Jump to content
Co nového? Mé kurzy
Komunita:
Diskuze Sledované příspěvky Žebříčky

TWS API a dojení historických dat 1


okolo

Doporučené příspěvky

Upozornění:
Tento příspěvek je určen především stávajícím klientům IB, kteří jsou obeznámeni se základy práce s TWS. Pokud o IB teprve uvažujete a některé pojmy vám nebudou zcela jasné, lze všechny potřebné informace dohledat v jiných materiálech na tomto webu. Pokud si uvedený postup budete chtít vyzkoušet, je nutná dobrá znalost práce s Excelem a s počítačem obecně a znalost angličtiny vám také hodně pomůže.

Blíží se vánoce a tak se většina z vás zajisté dost nudí. Dárky nakoupeny, cukroví napečeno, doma uklizeno a vy nevíte do čeho píchnout.
Pokud takováto situace u vás doma nastala, bude nejlepší zasednout k počítači a třeba si trochu backtestnout nějakou novou strategii. Že už máte všechno projeto třikrát? A co takhle vyzkoušet to na nějakém jiném trhu – třeba na zlatě? A co když ta ropa nebo káva přece jenom není tak strašná, jak se povídá? No dobrá, tak třeba je, ale co ten NQ? Opravdu je líný jako YM? Že nemáte data abyste to všechno otestovali? Že by taková data stála moc peněz?

Data a kde je vzít – to je obecně jedna z prvních otázek, které musí vyřešit každý začínající trader. Obchodujeme-li intradenně, potřebujeme reálná intradenní data a k testování historická intradenní data. Klienti IB mají k dispozici, co se týče poměru cena/výkon, relativně kvalitní zdroj živých dat. Historická data pak doplňují pomocí dalších služeb, v našich končinách především SCMagic.

Je poměrně málo známým a skoro nevyužívaným faktem, že TWS API umožňuje download všech intradenních historických dat, které máte objednány (v periodách 1,5,15,30sec, 1,2,3,5,15,30min, 1hod, 1den, 1týden, 1měs, 3měs, 1rok) zpětně za celý jeden rok. Ano, skutečně až k vám na stůl vede drát, ze kterého mohou kapat přesně ta data, za která platíte zvlášť.
Tedy např. pokud plánujete první rok jen backtestovat a papertradovat a založíte-li si účet u IB nyní, bude mít za rok k dispozici dva roky historie dat (samozřejmě jen pokud si je bude stahovat a vhodně skladovat). Řekl bych že i na velmi solidní testování by to mohlo stačit.

Takže to bylo na úvod něco marketingových žvástů a pojďme se podívat jak na to konkrétně.

Upozornění: celý tento příspěvek je v této fázi spíše „proof of concept“, že z API lze po kapkách „vydojit“ rok historických dat. Úvod byl opravdu jen marketing a pokud doufáte, že za několik minut budete mít v Sieře rok dat kávy, do odpoledne to otestujete a do desíti jste v balíku a na Silvestra letíte na Bahamy, vraťte se raději zpět k připalujícímu se cukroví.

Co potřebujeme:
- TWS a API nejnovější verze – v okamžiku psaní tohoto příspěvku je to TWS 865 a API 900. Verzi API zjistíte ze souboru API_VersionNum.txt v adresáři s vaší TWS. Pokud nemáte nejnovější verzi, proveďte upgrade ze stránek IB.
- MS Excel
- klid na práci

Upozornění:
– pro neklienty IB - Demo prý lze požít pro testování tohoto postupu, získaná data však nelze použít vůbec k ničemu, to snad je pochopitelné. Z různých starých příspěvků ve fórech se zdá, že demo kdysi dávalo zpožděná data, ale to už je dávno pryč.
- Pokud používáte Tsim, který pracuje pouze s určitou starou verzí API, musíte se rozhodnout jestli chcete data nebo Tsim. Možným řešením by bylo použít API switcher (ke stažení na stránkách BT) nebo nainstalovat TWS a API dvakrát – do různých adresářů pochopitelně :) Ani jedno jsem nezkoušel, je to na vás.

Link to comment
Sdílet pomocí služby

  • Odpovědí 54
  • Vytvořeno
  • Poslední

Nejaktivnější diskutující

Postup:

- Spusťte TWS a pokud ještě nemáte, nastavte používání IDE API. POZOR! Pro experimenty s API používejte raději Papertrading účet!!!

- V adresáři s TWS najděte podadresář Excel a v něm soubor TwsDde.xls. Vytvořte si kopii tohoto souboru, vhodně si ji pojmenujte (jedno jak). Pokud použijete přímo soubor TwsDde.xls vystavujete se nebezpečí, že si jej při další přeinstalaci API přepíšete novou verzí a přijdete tak o všechny provedené úpravy.

- Spusťe váš xls soubor. Je třeba povolit makra, pokud to nejde, je třeba vhodným způsobem upravit v Excelu výši zabezpečení.

- Soubor obsahuje mnoho listů. Jako první krok je třeba téměř na všech listech vyplnit v části Which Trader Workstation políčko User Name. Jednoduše zadáte jméno, kterým se přihlašujete ke svému TWS (papertrade) účtu. Žádné heslo není třeba nikde vyplňovat.

- Tento soubor umožňuje kompletní ovládání TWS – má skoro všechny funkce jako vaše TWS. Jejich popis je mimo rámec tohoto příspěvku, zájemci najdou příslušnou literaturu na webu IB.

- Vyzkoušejte si, že vám funguje propojení s API. Na první záložce Tickers vyberte buď celý řádek nebo první buňku řádku (např. IBM) a klikněte na tlačítko Request Market Data. Pokud jsou zrovna obchodní hodiny, měly by se vám v řádku objevit v část Market data reálná data. Nebo aspoň nuly (mimo obchodní hodiny)
Zde mohou nastat první zádrhele. Jejich zdrojem je nejspíš váš firewall nebo antivirus. Oboje je třeba pečlivě vypnout. Pozor – např. Kerio nestačí jen zastavit, je třeba jej opravdu vypnout a ověřit, jestli všechno jeho procesy umřely, popřípadě je zabít.

- přesuňte se na záložku Historical data. Už za chvilku konečně uvidíte svoje první historická data.
Např. v části Futures vytvořte nový řádek, nebo přepište stávající např. takto:
Symbol: ER2; Type: FUT; Expiry 200603; Exchange: GLOBEX; Currency: USD; End Date/Time: 20051220 24:00:00 GMT; Duration: 86400 S; Bar Size: 5; What to Show: TRADES; RTH Only: 0; Date Fromat Style:1; Page name: ER2H6; Expired: PRAVDA (nebo 1 nebo ano, podle nastavení vašeho Excelu)

- Vyberte takto vyplněný řádek, nebo první buňku řádku, chvíli nedýchejte a klikněte na tlačítko Request Historical Data. Pokud je vše o.k., objeví se za okamžik na konci sešitu nový list a na něm zhruba 1440 řádek – barů ve vašem budoucím grafu. Podle uvedeného příkladu získáte minutová data za přibližně jeden den – 20. prosinec 2005 u březnového kontraktu ER2 2006.

- neradujte se předčasně. Cesta k vytvoření většího smysluplného souboru dat, nacpání takovýchto dat do vašeho kreslícího sw a pak k prvním miliónům je ještě hooooooodně dlouhá. Navíc od teď se to začíná už jenom komplikovat.

- parametry, které v jednotlivých řádcích nastavujete jsou popsány na mnoha místech, nejlépe zde: www.interactivebrokers.com/en/software/apiReleaseNotes/api9.php?ib_entity=uk
popis všech funkcí excelového souboru je tady www.interactivebrokers.com/download/ExcelApiBeginners.pdf
a všechno je samozřejmě popsáno v sekci o API DDE dokumentace TWS. www.interactivebrokers.com/php/webhelp/webhelp.htm

Není v mých silách jednotlivé parametry rozebírat. Nejdůležitější je vědět, že ne všechny kombinace periodicit jsou přípustné, tzn. nelze periodu 1 rok, velikost baru 1 min a očekávat výpis jednoho listu s daty za celý rok. Lépe řečeno fungují jen velmi specifické kombinace nastavení doby trvání a velikosti baru. Pokud je nastavení špatné, nezobrazí se žádné výsledky. Kde je problém vám může napovědět tlačítko Show Errors.

- nejdelší soubor, který se mi podařilo vytvořit má cca 1440 řádků, podle různých diskusí je hranice asi 2000 řádků. V tomto dokumentu www.interactivebrokers.com/en/software/apiReleaseNotes/api9.php?ib_entity=uk je snad popsána možnost, jak tento počet zvětšit, mě to ale nefunguje.
Tzn. na jedno kliknutí lze vyexportovat cca jeden den jednominutových dat. Ani to by ještě nebyl problém, vytvořit sadu potřebných řádků-dotazů do tabulky tak, aby vyexportovaly celý rok dat je v Excelu hračka na pár minut.
Problém je v tom, že po nějakém množství (3-5) po sobě rychle následujících requestů (dotazů, vyplněných listů) vás server IB na nějakou časovou periodu (2-5 minut, neměřil jsem) odstaví. Snadno to poznáte podle toho, že ve sloupečku Ctrl se objeví nápis Processing ale nic se neděje. Vyberte Processing, klikněte na Cancel Historical Data, chvíli počkejte a zkuste to znovu.

- dejme tomu, že se nějak tímhle vším prokousáte a nějak naklikáte okolo třiceti listů dohromady s asi jedním měsícem historických dat.

- Musíte získaná data spojit do jednoho listu tak aby časově navazovala. I ručně to máte za chvilku.

- Je třeba data vhodně upravit. Úprava, kterou je třeba provést v každém případě je rozdělení datumu a času do dvou řetězců = sloupců, např. pomocí funkce zleva (nebo zprava)

- Jakékoliv další úpravy závisí na schopnosti všeho kreslícího programu vyrovnat se s různými tvary ascii dat. Najdete si ve vaší dokumentaci potřebné údaje a podle nich si vytvoříte požadovaný csv soubor. Asi nejjednodušší to mají amibrokeristé, do toho se dá nacpat a převést na graf snad i telefonní seznam, ale ani Sierra by neměla být problém. Trochu natvrdle mi připadá v tomto směru Ensign.

- a je to. Po kratším či delším boji se na vás z vašeho programu usmívají nové grafy a jejich ladné svůdné křivky vás svádí – otestuj mě, otestuj mě....

Link to comment
Sdílet pomocí služby

V této chvíli je už asi také jasné, že popsaný manuální postup je přinejmenším dost časově náročný a nehodí se k velkému dolování dat z API. Možná už přemýšlíte, jestli by se to nedalo řešit nějak pohodlněji a jednodušeji. Odpověď je jednoduchá. Dalo!

API obsahuje podobné příklady jako je tento Excel i ve VB, C++ a Javě. Můžete si to i vyzkoušet – v příslušných adresářích najdete exe soubor, ten spustíte a otevře se okno, ve kterém je třeba provést podobné nastavení jako v Excelu a získat tak jakékoliv údaje z TWS.

Každý schopný programátor by měl zvládnout upravit tyto příklady tak, aby se výsledky – např. získaná historická data – ukládaly do souboru, během ranního čištění zubů. Po snídani by pak stačilo dodělat nějakou komfortnější masku pro zadávání vstupních údajů a především časovač, který by odesílal požadavky na data v nějakých delších intervalech, nebo jinak vhodně ošetřit intervaly stahování. A to je celé. Do oběda tady máme komfortní nástroj na získávání historických ascii dat z TWS API. Pak to jen ve vhodný okamžik spustíme a za chvíli se můžeme v datech koupat. Přičemž chvílí myslím desítky hodin až jednotky dnů.

Tak to je moje představa. Samozřejmě, může v tom být nějaký háček a můžou se vynořit nečekané problémy. Kdybych uměl programovat, vyzkoušel bych to sám. Ale já nejsem schopen napsat ani čárku, takže se obracím na vás, čtenáře finančníka. Najde se někdo, kdo by se s tím popasoval?

Několik poznámek na závěr:

Spolehlivost IB jako zdroje data.
Na úvod jsem napsal, že IB vede v poměru cena/výkon. Skutečně dostáváte data za neuvěřitelně lidovou cenu o čemž se snadno můžete přesvědčit, když se podíváte do ceníků ostatních poskytovatelů dat. Tomu ovšem zcela odpovídá kvalita ve smyslu spolehlivost. Příkladem budiž např. situace, která nastala v pondělí 4.12., kdy nešel backfill dat z Globexu z tohoto dne a IB nebyl schopen toto opravit celý týden. (Ani nevím, jestli je to už ok). Za sebe můžu říct že i nižší spolehlivost mi za danou cenu při obchodech v řádech jednotek kontraktů bohatě postačuje.

Jediná konstanta je změna:
Všechno se mění a vyvíjí. A speciálně TWS. Např. po dnešním update má TWS jiné ikony než měla včera. Tzn. v tomto příspěvku uvedené informace se mohou velmi rychle měnit.
Dokumenty se mění a přibývají poměrně rychle.
Některé procesy mohou na jiných systémech prostě fungovat jinak.
Funkčnost API se může velmi rychle měnit.
Počítejte s tím.

Moje momentální laická představa distribuce dat:
Během sepisování tohoto postupu jsem na základě různých článků a diskusí dospěl k závěru, že distribuce živých dat je řešena dvěma hlavními způsoby
- buď k vám jdou všechna data tick po ticku – např. eSignal
- nebo k vám jdou souhrnná data po definovaných časových intervalech cca 0,2-0,3 sec (IB)
Oba dva způsoby přenosu mají svá pro a proti. V prvním případě máte naprosto přesná data, ale je jasné, že v kritické situaci (mnoho obchodů v krátkém časovém okamžiku, prudké změny ceny) jich může být moc, servery nestíhají a vy dostane data sice krásná, ale se zpožděním. V druhém případě je i v nejkritičtější situaci zátěž serverů konstantní a pokud vše funguje data se k vám dostanou bez problémů, ale zase holt mohou být drobně zkreslená. Něco za něco.
POZOR! Toto je jen můj velmi laický momentální náhled na situaci, ve skutečnosti to může být jinak. Pokud mě někdo doplní nebo opraví, bude to super.

Shrnutí:

Prvním cílem mého příspěvku je dostat do obecného podvědomí fakt, že TWS API od IB umožňuje roční backfill dat a popsat postup jak si tento fakt prakticky pomocí přiloženého vzorového excelového souboru ověřit.
Druhým a hlavním cílem pak je nastartovat tímto na toto téma diskusi, jejímž výsledkem bude v optimálním případě software, který bude veškerou činnost spojenou se získáváním historických dat vykonávat automaticky.

To jsem teda zvědav, jestli to dopadne.

Veselé vánoce!

P.S. A pokud byste se do toho moc ponořili a měli pocit, že vám to leze na mozek, pusťte si třeba pěknou písničku. www.youtube.com/watch?v=vjvVBCNcL_A

Link to comment
Sdílet pomocí služby

  • 6 months later...

Fretka : zaregistrovat TWS.ocx? muzes to prosim nejak upresnit.

ja mam demo TWS a mel jsem problem s tim ze ten excelovy soubor tam proste nebyl. nainsatloval jsem tedy InstallAX.exe a soubor se nahle objevil.
Propojeni souboru excel se mi podarilo bez probelmu a v zalozce ticker mi behaji data take v pohode.
Jedine co se mi nepodarilo na zalozce historical data neco stahnout ...ale to prikladam pravdepodobne chybce nekde ve spravnem vyplneni vsech nalezitosti. jeste si s tim pohraju.

Link to comment
Sdílet pomocí služby

> Fretka : zaregistrovat TWS.ocx? muzes to prosim nejak upresnit.

Je to chyba v insalacnim programu TWS API, ze neobsahuje vsechny soucasti co jsou potreba.
Az teprve vcera po dalsi urgenci mi IB napsali ze si mam stahnout Microsoft Visual C++ 2005 SP1 Redistributable Package z www.microsoft.com/downloads/details.aspx?FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647&DisplayLang=en což ten problém vyřešilo. Zkusím to stahování zrealizovat.

Link to comment
Sdílet pomocí služby

  • 2 týdny později...

prosím Vás o radu: testuji TWS demo od IB a stává se mi často, že když mám otevřenou pozici, a zadaný limit příkaz pro výstup z pozice, tak když se cena dotkne nebo překročí hranici příkazu, nic se neděje. Je tohle normální i v ostré verzi TWS? Myslel jsem si, že pokud se cena dotkne mého příkazu limit, bude za tuto cenu nebo cenu lepší příkaz automaticky realizován. Máte prosím někdo tuto zkušenost?

Link to comment
Sdílet pomocí služby

Dobry den,

reaguji na starsi, lec podnetny prispevek (Vloženo uživatelem: okolo, Datum: December 12, 2006 06:09PM).

Vcera jsem rozchodil stahovani dat v Jave. EOD funguji za posledni rok bez problemu, jemnejsi data narazi na urcita omezeni. Je omezen maximalni objem dat, ktery je mozno najednou stahnout. Napriklad kdyz chceme vterinova data, je mozne je skutecne obdrzet i rok nazpatek, ale ne za cely rok najednou, pouze za cca 1000 vterin (musim rict "dej mi data z 12.3. od 9:00 do 17:00). Sekvenci techto pozadavku samozrejme muzu poskladat historii za cely rok, ale zase IB API omezuje frekvenci, s jakou muzu pozadavky posilat - moc rychle nasledujici pozadavky odmitne obslouzit. Ale s takovymi detaily se da zit.

V soucasnosti se snazim efektivne rozdelit cas mezi stavajici zamestnani, a studium trhu a trading, takze na vyvoj dojiciho programu nemam moc casu, ale urcite to bude uzitecna pomucka a budu se tim po vecerech dle moznosti zabyvat.

Jestlipak je tu nekdo, s kym bych si mohl vymenovat zkusenosti o javovskem IB API?

Jan Marek

Link to comment
Sdílet pomocí služby


willtrader:

Ted nevim, do jakych detailu zajit... Kdyz je na nejakem pocitaci nastartovana TWS, tak pres sit poskytuje pristup ke svym sluzbam (dojeni dat, zadavani prikazu, atd atd). A podobne, jako se na tyto sluzby umi napojit excelovsky spreadsheet se spravnymi makry (popsano v uvodu tohoto vlakna, ja to znam jen z dokumentace, nezkousel jsem), muze se na ne pripojit javovsky program. IB uverejnili knihovnu funkci (API), pres ktere muzeme da z Java programu volat funkce IB.

Podrobnosti mozno najit v oficialnim manualu (pomerne strucnem)
www.interactivebrokers.com/php/webhelp/webhelp.htm#Interoperability/DDE_Configure_TWS.htm

nebo ta tomto neoficialnim webu (podstatne podrobnejsi)
chuckcaplan.com/twsapi/


Link to comment
Sdílet pomocí služby


×
×
  • Vytvořit...