Získání historických dat pro potřeby nejrůznějších analýz v aplikaci Excel bylo předmětem minulého článku. Vyžadovalo to mírnou úpravu platformy TWS a následně přípravu excelovského sešitu, abych po jednoduchém porozumění sestavení příkazu na požadavek pro historická data do buňky v takto připraveném Excelu mohl začít stahovat historická data v požadovaném tvaru. Pokud jsem tedy schopen získat historická data (nejběžněji například pro akciové tituly) pro různé časové rámce, nemuselo by být také špatné zjistit, jakým způsobem by bylo možné pořídit do excelovského sešitu živá aktuální data od mého brokera Interactive Brokers, mohl bych pak například vidět ve svém Excelu historická data současně s aktuální cenou pro sledovaný titul a vytvářet si tak aktuální obrázek o aktuálním chování na trhu současně se zobrazenou historií podle typu stažených dat.

   K propojení a získání dat do Excelu nebude zapotřebí žádné „náročné programátorské práce“ se skripty a jejich kopírování do okna aplikace Visual Basic v mém Excelu, jako v případě historickými daty, bude stačit pouze pochopit logiku získávání dat a konstrukce požadavku na tato živá data, potom již stahování bude otázkou jednoduché rutiny. Stejně jako v případě práce s historickými daty, bude zapotřebí připravit aplikaci TWS, tedy obchodní platformu a také pořídit nezbytné programové vybavení pro správnou komunikaci mezi TWS a mým excelovským sešitem.  


Příprava TWS

   Nejprve je zapotřebí připomenout, že nemohu získat živá data, která nemám oprávnění získávat do své platformy TWS. Znamená to tedy, že uvidím taková data, na která mám subscription, a která se mi také živě zobrazují v době obchodování v TWS. Nastavení oprávnění pro požadovaná data mohu provádět v Account Management, což je základní klientská operace, kterou zde nebudu rozebírat. V dřevních dobách mých počátků s experimentováním s daty s TWS do Excelu jsem zakoušel mnoho krušných chvil s živým streamování dat, protože prostředí, vytvořené Interactive Brokers, bylo značně nestabilní a vykazovalo značné nedostatky ve spolehlivosti. Stahování dat totiž fungovalo prostřednictvím DDE, tedy obdobně jako v případě zpracovávání požadavku na historická data, a toto bylo značně nekomfortní. Vyžadovalo již mírně pokročilejší schopnosti s prací ve VBA, a toto navíc nebylo žádnou zárukou pro správnou funkcionalitu, stahování postihovaly časté výpadky dat, takže to bylo téměř k ničemu. Zdá se, že se v Interactive Brokers poučili a pro potřeby živého stahování dat vymysleli lepší technologii. Stahování dat probíhá nově prostřednictvím RTD serveru API, která umožňuje načítat potřebná data do buněk Excelu na základě jednoduše formulovaných požadavků v těchto buňkách, tyto požadavky pak představují formulované vzorce s požadovanou syntaxí, jejichž odezvou jsou živá data. Z technologie a softwarového řešení RTD serveru pak vyplývá, že tato možnost běží pouze v prostředí Windows, majitelé Maců mohou na toto živé stahování toto cestou prozatím zapomenout.

   Ke správnému nastavení platformy TWS budu tedy potřebovat téměř stejné nastavení, jako v případě požadavku na historická data z minulého článku. Pro pořádek znovu připomenu.

   API software nainstaluji do svého počítače ze stránek Interactive Brokers, kliknutím na tlačítko GET API SOFTWARE.

   Zde musím požadovat instalaci verze API 9.73 a vyšší. Pokud již mám instalaci ve starší verzi, musím ji přeinstalovat

   Tato vyšší verze má totiž implementovanou komunikaci s RTD serverem, která zajistí hladký průběh vyřizování požadavků na živá data do mého Excelu

 

   Po úspěšné instalaci správné verze API na mém počítači musím povolit komunikaci mého Excelu s datovým rozhraním mého brokera. V hlavním okně platformy TWS postupuji podle níže uvedeného obrázku

(1) Na pásu nástrojů kliknu na „Configure

(2) Z „Configuration“ vyberu „API“ a následně potvrdím „Settings

(3) V okně možných voleb vpravo vyberu a zatrhnu „Enable DDE clients

(4) Nastavení „Socket Port“ ponechám výchozí 7496

(5) Nastavení potvrdím kliknutím na „OK

   Instalací API a správnou úpravou TWS jsem nyní schopen ve svém Excelu nastavovat požadavky na živá data mého brokera Interactive Brokers.


    Syntaxe požadavku v buňce Excelu

   Vytvoření požadavku na živá dat do buňky mého Excelu připomíná zadání jakéhokoliv jiného matematického nebo logického vzorce. Syntaxi si mohu přizpůsobovat podle potřeby komplexnosti mého požadavku, nebudu zde ale popisovat jednotlivé nuance, protože budou závislé na každém odlišně, podle odlišnosti požadavků na parametry získávaných dat v závislosti na individuálních potřebách jednotlivých traderů.

   Než odkážu na celou komplexní možnost syntaxe požadavků pro nejrůznější investiční instrumenty a nejrozmanitější podoby získávaných dat, uvedu na jednoduchém příkladu nejdříve obecný formát nejjednodušší formy požadavku. Podstatou syntaxe požadavku je níže uvedený vzor, ve své patřičné modifikaci pro různé investiční nástroje vepsaný do buňky Excelu za současně spuštěné platformě TWS.

=RTD(tws.twsrtdserverctrl;;TěloDotazu; Co chci zobrazit)

   K popisu jednotlivých částí vzorce

  • RTDneměnná část vzorce pro každý požadavek
  • twsrtdserverctrlneměnná část vzorce pro každý požadavek
  • TěloDotazu – složenina obsahující převážně označení tickeru požadovaného investičního nástroje, například akcie „JPM“ a za lomítkem označení zdroje a případně dalších náležitostí, požadovaných dat
  • Co chci zobrazit – o jaká data mám z daného datového zdroje (burzy) zájem, například „Bid“, „Ask“, „Last“, „Volume“…atd.

Akcie

   Pro lepší přehlednost a praktičnost jednoduché syntaxe je na obrázku níže zobrazeno konkrétní zadání požadavku na získání živých cen „Ask“ pro akciový titul „JPM“ do označené buňky Excelu

   (1) Do buňky „A1“ je napevno vepsána neměnná část vzorce, kterou volám živá data ve formě textu twsrtdserverctrl

   (2) Do buňky „B4“ je vepsán Ticker požadované akcie, v mém případě JPM

   (3)  V buňce „C4“ je formou excelovského zápisu sestavena pospojovaná část požadavku na získání dat akcie JPM z vybraného burzovního zdroje, oddělený lomítkem, v mém případě „JPM/SMART“, (nazývám tuto část „Tělo dotazu“)

   (4) Do buňky „D4“ je zapsána burza, ze které chci získat požadovaná data, v mém případě volím možnost „SMART“, mohu volit například „NYSE“, „ARCA“…apod., podle toho, jaký datový zdroj chci využít (akcie mohou být listovány na více burzách) nebo na které burze se akcie obchoduje, univerzálně mohu uvést „SMART“

   (5) V buňce „J4“ je pak již kompletní požadavek na zjištění „Ask“ ceny z dané burzy pro akciový titul JPM. Požadavek má tvar =RTD($A1;;C4;J3) a je tak složen za závorkou z pevného textu (1), dvou středníků, sestaveného „těla požadavku“ (3), středníku a textu, jaká data chci zobrazit, v mém případě Ask cenu, toto slovo „Ask“ je uvedeno v buňce „J3“ (5).

   K bodu (3) bych pro úplnost doplnil, jakým způsobem mohu sestavit Tělo odkazu pomocí Excelu pospojováním více buněk. K takovému úkonu je použito spojovacího znaku ampersand „&“, který umí spojit obsahy jednotlivých excelovských buněk. Na obrázku níže je jednoduchý příklad.

   Slovo „Bratislava“ mohu napsat do buňky prostým vepsáním textu (1) nebo rovnítkem a zadáním textu s uvozovkami (2). Pokud bych potřeboval složit slovo Bratislava ze dvou zadaných slov, vepsaných do různých buněk, využiji ampersand jako spojovač obsahu těchto buněk (3) a pokud budu chtít to výsledného tvaru přidat další libovolné znaky (například lomítko mezi slova), vložím tento znak pomocí ampersandu mezi obsah buněk, které chci pospojovat, lomítko pak z obou stran (jako vkládaný znak) musí být obaleno uvozovkami (4). Ampersandem tak mohu skládat a řetězit obsahy několika buněk, přidávat a vkládat mezi ně libovolné výrazy a znaky. Například vložení znaku (zavináče) mezi obsah buněk a přidání dalšího textu za tento výraz oddělený mezerou „je nejlepší!!!“ je pak vyobrazen na řádku (5). Tímto zdravím kolegy na Slovensku, Bratislava se mi zdála pro ukázku plastičtější než například Valašské Meziříčí :c)

   Takto zadaný požadavek podle obrázku pro akcie výše by měl vracet ceny Ask pro daný titul, v případě, že je obchodní seance, budou se data živě přenášet do této buňky podle aktuální situace na trhu. Nemusím patrně uvádět, že musí být současně spuštěná platforma TWS (nejvhodněji je spustit TWS před otevřením excelovského sešitu). Odeslání požadavku na živá data do Excelu tak, oproti požadavku na data historická, nevyžaduje žádný speciálně kopírovaný VBA script do mého sešitu a také nevyžaduje uvádění žádného uživatelského jména účtu u Interactive Brokers. Se stejnou logikou tvorby vzorce jsou pak v dalších buňkách excelovského sešitu zobrazovány ceny pro Bid, Last, Close…mohu zadávat mnoho dalších požadavků na parametry získávaných dat přesně podle instrukce, kterou do formule požadavku zapíšu. Seznam druhů požadavků pro akciové tituly je vyznačen na obrázku níže.


Futures

   Stejným způsobem, při dodržení pravidel syntaxe podle poskytovatele dat, mohu do svého excelovského sešitu obdržet živá data futures kontraktů, na která mám subscriptions. Na obrázku níže je vidět postup, jak si takový požadavek, sestavený jednoduchou syntaxí, vepsat do jednotlivých buněk, aby bylo do nich poté možné streamovat živě požadovaný druh dat. Na obrázku níže je vyobrazena nejjednodušší syntaxe požadavku například pro živé Ask ceny futures kontraktu ES s expirací v září 2018. Jednotlivé buňky řádku pro ES jsou naplněny údaji, které slouží k vytvoření pospojovaného „těla požadavku“ na tato Ask živá data.

   (1) V prvním sloupci pro futures je zobrazen ticker ES (E-mini S&P 500) futures kontrakt. V mém případě chci tedy získávat živá data do buňky excelovského sešitu například pro “Ask” ceny pro toto futures. V buňce “B7” mám proto uvedený požadovaný ticker ES.

   (2) V této buňce „C7“ je vyobrazeno správné sestavení nejjednoduššího „těla požadavku“ na živá data pospojováním dílčích potřebných údajů prostřednictvím excelovského zápisu, kdy tento nejjednodušší požadavek je ve tvaru Ticker@Burza//FUT/Expirace futures kontraktu. Protože chci sledovat živá data ES, které expiruje 21.9.2018, bude můj požadavek v buňce „C7“ vyjádřen v tomto tvaru ES@GLOBEX//FUT/20180921

   (3) Abych mohl takový požadavek pospojovaně sestavit, musím do jednotlivých buněk vepsat dílčí požadavky, ve sloupci „D7“ mám tedy zadán název burzy, ze které budu načítat data a kde se požadované futures obchoduje, v mém případě se ES futures obchoduje na burze GLOBEX

   (4) Ve stejném smyslu je v buňce „E7“ uveden typ investičního nástroje, tedy pro futures je vyžadováno „FUT

   (5) Nakonec musím pro pospojování požadavku vložit do buňky „F7“ datum expirace futures kontraktu, kterým je 21.9.2018 ve tvaru YYYYMMDD, tedy konkrétně v mém případě 20180921.

   (6) Stejně jako v případě akcií, je kompletní nejjednodušší požadavek sestaven a vepsán do buňky, do které chci načítat dat a má strukturu:

=RTD(tws.twsrtdserverctrl;;TěloDotazu; Co chci zobrazit)

   K popisu jednotlivých částí vzorce

  • RTDneměnná část vzorce pro každý požadavek
  • twsrtdserverctrlneměnná část vzorce pro každý požadavek
  • TěloDotazu – opětovně pospojovaný excelovský výraz složený z označení tickeru požadovaného futures, například „ES“ + znak zavináče + označení burzy, kde se dané futures obchoduje, například „GLOBEX“ + dvě lomítka + typ instrumentu, tedy futures kontrakt označený „FUT“ + lomítko + datum expirace futures kontraktu ve tvaru YYYYMMDD. Pro konkrétní data futures ES je tak toto „tělo dotazu“ ve tvaru ES@GLOBEX//FUT/20180921
  • Co chci zobrazit – o jaká data mám z daného datového zdroje (burzy) zájem, například „Bid“, „Ask“, „Last“, „Volume“…atd.

    Takto sestavený požadavek bude vracet do buněk Excelu požadovaná živá data pro vybrané obchodované tituly jednotlivých futures. Na obrázku výše je vidět, jaké hodnoty jsem použil pro jiná futures, než je ES (E-mini S&P 500) futures kontrakt. Do dalších řádků je vepsán požadavek na živá data pro VXV8 – VIX futures kontrakt s říjnovou expirací 2018 nebo pro ZCZ8 – kukuřičný kontrakt s expirací v prosinci 2018. Pro správné nastavení hodnot, například názvu burzy, kde se kontrakt obchoduje, správnost tickeru nebo datum expirace konkrétního futures, zjistím tyto údaje přímo v platformě TWS podle níže uvedeného obrázku.

   Kliknutím pravým tlačítkem myši na řádek se zadaným futures kontraktem v platformě TWS, v mém případě (ZS DEC18 futures) (1) ze zobrazené nabídky možností vyberu „Financial instrument info“ (2) a z dalších možností vyberu „Description“ (3). Zvolením této nabídky se otevře specifikace futures kontraktu

  

   Z této specifikace vyčtu o jaký typ investičního nástroje se jedná (1), kdy tento nástroj expiruje (2) a na jaké burze se obchoduje (3), toto vše jsou údaje, které potřebuji k sestavení „těla dotazu“ do mého požadavku na živá data.


Opce

   Ve stejné logice mohu požadovat, aby se do mého excelovského sešitu načítala živá data opčních kontraktů. Opět musí být splněn předpoklad, že mám povoleno živé zobrazování těchto dat v platformě TWS pro můj obchodní účet. Nejjednodušší syntaxe požadavku umístěného do buňky Excelu pak má stejnou strukturu, jako byla pro akcie a futures kontrakty, tedy ve tvaru

=RTD(tws.twsrtdserverctrl;;TěloDotazu; Co chci zobrazit)

    Protože ale chci zobrazovat opční kontrakty, budu muset pro vytvoření „těla požadavku“ mít zadáno více parametrů. Pro modelový opční řetězec pro akcii JPM s expirací 20.7.2018 by taková konstrukce požadavku mohla vyplývat z níže uvedeného obrázku.

   V jednotlivých buňkách Excelu jsou na řádku 12 uvedeny nutné údaje pro správné složení „těla požadavku“ pro získání Ask cen pro opční kontrakt na strike 106

   (1) V buňce „B12“ je zadán ticker akcie „JPM

   (2) V buňce „D12“ je zadána burza, kde daný produkt obchoduje, v mém případě požaduji „SMART“ (toto nakonec nebudu potřebovat)

   (3) V buňce „E12“ jet typ investičního nástroje. Pro opční kontrakt mám zadáno „OPT

   (4) V buňce „F12“ je datum expirace opčního kontraktu je 20.7.2017, převedeno na tvar YYYYMMDD, je tam proto uvedeno 20180720

   (5) V buňce „G12“ je hodnota strike, v mém případě požaduji strike 106

   (6) V buňce „H12“ je uveden typ opčního kontraktu, v mém případě požaduji na strike 106 zobrazit data pro Put opci, proto je vepsáno „P“ (pro Call opci by bylo adekvátně „C“)

   (7) V buňce „C12“ je pospojováním údajů z výše uvedených buněk vytvořeno „tělo požadavku“, které má v mém případě tvar Ticker//OPT/Expirace opčního kontraktu/Typ opčního kontraku/Strike. Pro Put opci na strike 106 na akcii JPM s expirací 20.7.2018, bude celý pospojovaný požadavek mít tvar JPM//OPT/20180720/P/106

   (8) V buňce „I12“ je pak již vepsán konkrétní požadavek na živá data pro takto definovaný opční kontrakt Put na strike 106 pro živá data „Ask“ cen. Tento je pak ve tvaru =RTD(tws.twsrtdserverctrl;; JPM//OPT/20180720/P/106;Ask)

    Správně sestavený požadavek pak vrací do dané excelovské buňky při obchodování opčního kontraktu živá data pro konkrétní typ dat (například Ask, Bid,…). Jaké druhy těchto dat mohu získat je možné vysledovat z obrázku níže  

    Z obrázku výše s ukázkou správné syntaxe pro opční kontrakty mohu například vidět požadavek na hodnotu jedné z druhů Implied Volatilit (v obrázku se syntaxí pro opce výše označeno (9)) a pokud ji takto získám do svého Excelu, mohu pak na jednotlivých strike tuto volatilitu odezírat a například chtít ji zobrazit ve formě živého grafu. Tento by pak mohl vypadat jako na obrázku níže.

   Volatilita se na mě z grafu hezky „směje“, na Put straně je vyšší než na Call straně, křivka nemá patrné zuby, ale je plynule svažitá a stoupající na odpovídajících stranách, všechno je tedy patrně v pořádku (co se týká volatility a jejího skew).


   Možnost streamovat živá data do Excelu je omezeno počtem dotazů, které současně posílám. Pokud budu požadovat mnoho požadavků najednou, může se stát, že bude toto živé stahování dat přerušeno. Limit mých dotazů mohu kontrolovat, a to tak, že na spuštěné TWS platformě současně stisknu na klávesnici tři klávesy Ctrl Alt =. Tímto je iniciováno okno s přehledem „povoleného čerpání limitu“, z něj podle obrázku níže vyplývá, že z možného počtu dotazů na úrovni 100 nyní využívám 73 dotazů.

   Sešit v Excelu, který jsem použil pro demonstraci syntaxe v tomto článku je možné stáhnout zde. Možností syntaxe dotazů na živá data je celá škála, dokonaleji sestavené dotazy mohou být cestou k získání specifických dat podle konkrétní potřeby obchodníka. Pokud bych měl potřebu požadavky na živá data dále podrobněji specifikovat, pak pro pokročilejší další bádání doporučuji navštívit přímo stránky Interactive Brokers.

   Nejrůznější modifikace požadavků na živá data do Excelu jsou také v modelovém excelovském sešitu, který máte stažený na svém počítači (aniž o tom víte). Tento jste si pořídili současně se stažením doporučené verze API a implicitně by se měl nacházet ve Vašem počítači na C:\TWS API\samples\Excel\TwsRtdServer.xls. V mém počítači, na kterém píšu tento příspěvek je umístěn opravdu v tomto místě.

      Pokud jej nevidíte nebo nemůžete nalézt, je k prohlédnutí, další práci a zkoumání ke stažení zde.


   Živá data do excelovského sešitu mohou být opravdu dobrým pomocníkem. Mohu je využít například ke sledování svých obchodních pozic a porovnávání jejich vývoje s nejrůznějšími parametry mého obchodního plánu. Mohu také zkoumat vývoj zamýšlených obchodů a vytvořit si tak vlastní simulovaný excelovský testovací sešit pro paper obchody. Načítání živých dat také může sloužit k tvorbě nejrůznějších alertů a zobrazování situací, které platforma TWS nedokáže, například spreadové pozice investičních instrumentů obchodovaných v různých měnách nebo (v kombinaci s historickými daty) srovnávání současných hodnot živých dat s daty historickými. Pořizování živých dat by se tak mohlo stát jedním z dalších nástrojů, které obchodníkovi umožní vytvoření dalších zobrazovacích a analytických nástrojů :c)

Sleduj facebook, napiš e-mail nebo tweet

17 thoughts on “Živá data z IB do Excelu”

  1. Jirko další skvělý tutoriál. Živá data z IB řeším přes XLQ, ale tohle je mnohem jednodušší a robustnější řešení nespoléhající na software třetí strany (teda kromě Excelu).

    1. Ahoj Kubo,
      XLQ jsem používal v minulosti a byl jsem spokojen, pokud to mohu vyhodnotit, tak je to podobné jako popisované v článku – přímý zápis vzorce požadavku do buňky v Excelu, pokud pochopím syntaxi, tak to funguje. XLQ je stejné vepisování vzorce do buňky Excelu, jenom se za to musí platit. Výhodou XLQ bylo to (pokud to ještě platí, protože si jej nepředplácím), že mohu nastavit příjem dat z různých zdrojů, nejenom z IB, ale když teď mohu celkem spolehlivě načítat přímo z IB….ahoj, Jirka :c)

  2. Jen bych doplnil, že DDE rozhraní funguje jen v 32-bitové verzi TWS. Ještě bych si zaškrtnul v nastavení Read-Only API. Člověk nikdy neví. :o)

    1. Ahoj, mám 64-bitovou verzi a stahování živých i historických dat funguje bez potíží, Jirka :c)

  3. Ahoj. Je mozne stahovat data z TWS bezicim na jinem stroji (jina IP adresa nez localhost)? Lze data stahovat pouze z TWS (TWS se 1x denne restartuje), nebo je mozne je stahovat z IB Gateway?

    1. Ahoj,
      nevím, jestli jde stahovat data z TWS běžícím na jiném PC, ale předpokládám, že je vždy vyžadováno simultánní spuštění TWS na stejném PC, toto nemám vyzkoušeno. Gateway (i při povoleném API) mi k načítání dat do Excelu nefunguje a Excel hlásí chybu připojení.

      Další podrobnosti o možných problémech jsou například zde. Ahoj, Jirka :c)

      1. Ahoj Jirko, není to tím, že IB Gateway má nastaven jiný Socket? Mám pocit, že 4001, ale nemohu teďkom ověřit. Jirka

        1. Ahoj Jirko,
          pravděpodobně to bude možné změnou syntaxe požadavku. Já to používám při spuštěném TWS a nemám potřebu nonstop živého streamu dat, takže mi vypínaní TWS nevadí. Vzory takové syntaxe pro Gateway nebo s upřesněním host, portu… jsou znázorněny v Excelu (ve spodní části), který je součástí staženého API, jak jsem o ní psal v článku nebo kterou si z článku jde stáhnout. Já jsem v článku popsal úplně nejjednodušší syntaxi požadavků na živá data, zkoumání dalšího upřesňování je pak už na každém podle jeho potřeb a zaměření. To upřesnění syntaxe je pak třeba jako na na níže uvedeném obrázku


          Ahoj, Jirka :c)

        1. Ahoj, ano, zkoušel jsem to, opravdu nefunguje, já to nepoužívám, takže je to pro mě novinka, měj se, Jirka :c)

  4. Testovano na 64bit verze Office pro API 9.73 a opravdu potrebuje prekompilovat ve Visual Studiu pro danou platformu pro 32bit verzi by to vse melo fungovat spravne.

  5. Mnohokrát děkuji za užitečné informace. Dříve jsem se prokousával živými daty do excelu přes DDE a mohu potvrdit výpadky a nespolehlivost. Několikrát jsem konzultoval s IB a musím říci, že by bylo lepší kdyby rovnou přiznali nespolehlivost. Ušetřili by mně čas. Jak nejsem obchodník na plný úvazek, tak jsem o této příjemné novince (RTD) nevěděl. Mohu se zeptat, zda Vám funguje ticker MSFT? Vše mi krásně běží ale MSFT hlásí chybu (teď nevím jakou, jsem v zaměstnání co mě opravdu živí :-). Dělám nějakou chybu? (data mám)
    Díky, Pavel

    1. Ahoj Pavle,
      MSFT mi nejede, pokud zadám požadavek na data ze zdroje označeného „SMART“. Pokud si sestavím tělo dotazu s požadavkem například na konkrétní burzu – třeba NYSE, tak se to rozjede, viz obrázek, Jirka :c)

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *