Příspěvky odjinud–MATLAB

matlabDnešním datem zahajuji takový malý experiment, a sice zveřejňování článků čtenářů. Pokud máte co sdělit a buď nemáte vlastní blog, nebo prostě chcete, aby to bylo tady, obraťte se na mě, zkusíme se nějak dohodnout. Dnešní článek poslal čtenář s nickem “Kolous”, kterému tímto děkuji. Dnes to bude o Matlabu a jeho propojení s IB.

Propojení Matlabu a IB TWS

V diskuzi u jednoho z předchozích článků vyvstal zájem o technické řešení propojení Matlabu a TWS, které využívám. Tradingu se naživo věnuji necelý rok s nevalnými výsledky….na tomto blogu čerpám zajímavé informace a nápady. Programování se věnuji od dob DOSu, takže zde můžu něčím přispět na oplátku. Nicméně jsem hobík, programováním jsem se nikdy neživil.

Způsoby propojení Matlabu a TWS

Zkoušel jsem následující způsoby propojení:

a) Java API – Matlab umožňuje přímo volat funkce Javy, pouze je nutné programy kompilovat se starší nebo shodnou verzí Javy, než tou, která je součástí Matlabu (lze zobrazit: version -java, u R2014a je to 1.6.0_cosi). Java API využívá například komerční řešení IB-Matlab (http://undocumentedmatlab.com/ib-matlab). Zkoušel jsem demo a funguje rychleji než níže popisované, práce je jednodušší – jen ta cena není do začátku až tak perfektní (navíc nemám rád programy s ročním předplatným). Jako ideální řešení se mi zdá udělat samostatný program v Javě (ten lze přeložit novější verzí Javy) který bude poskytovat služby pro strategie psané v Matlabu nebo přímo v Javě. Tímto směrem v současné době experimentuji.

b) ActiveX – je možné vytvořit ActiveX objekt pomocí funkce actxcontrol a pomocí něj přistupovat přímo k funkcím IB API. Z 64bit Matlabu se mi nepodařilo načíst 32bit Tws.ocx, i když jsem na google objevil návod, který by to měl umožnit.

c) Trading Toolbox – Toolbox využívá ActiveX a některé funkce zapouzdřuje (zapouzdřuje takovým způsobem, že je tomu lepší se vyhnout a volat přímo funkce TWS API). Dokumentace na www.mathworks.com pokulhává, protože ukázkový kód neobsahuje callback funkce. Tento způsob propojení budu popisovat v tomto článku a používám při obchodování.

Co je k tomu potřeba

  • Matlab R2014a (Trading Toolbox) – Starší Matlab má jiné prototypy některých funkcí, ale funguje taky (ve verzi 2014 byl přidán jeden bezcenný parametr, takže je tomu potřeba upravit program). Existuje ve verzi “home” za přijatelnou cenu.
  • IB API verze 9.71 – Stejně jako Matlab, tak i IB rádo rozbíjí API (změna byla myslím v 9.69)
  • A aby to fungovalo dohromady a nemuselo se používat starší API, tak je nutné aplikovat patch R2014apatch.zip.
    • nahradit původní soubor (zobrazí, kde je: which(‚ibtws‘))
    • spustit přikaz: rehash toolboxcache
    • pokud vše proběhlo v pořádku, půjde vytvořit spojení s TWS pomocí příkazu ib = ibtws(“,7496); V opačném případě příkaz skončí chybou.
  • Referenční příručka: https://www.interactivebrokers.com/en/software/api/api.htm sekce Active X.

Varování! Upgrade Matlabu nebo TWS API může (a mě se to stalo při upgradu obojího ;-) vaše řešení rozbít díky změnám v parametrech funkcí. Takže, pokud se v něčem vrtáte, tak si pěkně všechno prvně otestujte na simu, ať potom nejste smutní ;-)

Připojení k TWS a získání dat o účtu

TWS zasílá zprávy asynchronně a Matlab se s tím musí nějak poprat. To se děje prostřednictvím event handlerů (callback funkcí). Jinými slovy: Matlab vytvoří handler ActiveX objektu a prostřednictvím něho volá funkce TWS API (požadavky), platforma zasílá odpovědi Matlabu prostřednictvím registrovaných event handlerů. Například handler signalizující chybové stavy má v ActiveX API následující prototyp:

Sub errMsg(ByVal id As Integer, ByVal errorCode As Integer, ByVal errorMsg As String)

 

Do callback funkce je předán argument s proměnlivým počtem parametrů (varargin) s následujícími hodnotami:

[1×1 COM.TWS_TwsCtrl_1] [11] [-1] [2105] ‚HMDS data farm connection is broken:ushmds‘ [1×1 struct] ‚errMsg‘

Takže API odpovídají hodnoty varargin{3} až varargin{5}, zbytek je omáčka Matlabu. Celé to vypadá takto.

Pár poznámek na závěr

  • doporučuji volat přímo funkce API přes ib.Handle (obalové funkce z Trading Toolboxu neprospívají duševnímu zdraví Mrkající veselý obličej
  • stejným způsobem prakticky funguje veškerá ostatní komunikace s TWS, ať už jde o zadávání příkazů, nebo čtení dat.
Příspěvek byl publikován v rubrice Nezařazené se štítky . Můžete si uložit jeho odkaz mezi své oblíbené záložky.

28 komentářů u Příspěvky odjinud–MATLAB

  1. Djm napsal:

    Mel bych dotaz na Kolouse – prosimte na kolik zhruba te vysla ta licence matlabu?

    • Anonym napsal:

      Zdar, za matlab (home edition) je to $135 . Dalsie toolboxy su za $39/kus. Vo finale za matlab + datafeed + financial + optimization + statistics + trading toolbox je to $330. Zdroj http://www.mathworks.com/pricing-licensing/index.html?intendeduse=home&prodcode=ML

      • Djm napsal:

        Diky za odpoved. Mam jeste par dotazu. Kdyz pouzivas k backtestu/vyvoji a obchodovani matlab, jak bysi to hodnotil vzhledem k jinym platformam (napriklad ze jiz diskutovany RightEdge)?
        Ja jsem si hral s programem Maple, uz je to tak 8 let a bylo to docela zajima prostredi pro ruzne matematicke pokusy, takze tento clanek me docela zaujmul a napadlo me, ze by matlab mohl byt dobre prostredi na backtest a ruzne zkouseni novych pristupu.
        Ty pises o Matlabu, ktery je doplnen o tradingove knihovny, neco na tohle tema jsem cetl i od autora Ernst P. Chan – pana z Hongkongu, ktery na svem blogu pise docela krkolomne clanky na tema automatickeho obchodovani a take pouziva matlab.

        Jak bys hodnotil prinosy pouzivani matlabu, jake to ma plusy / minusy oproti jinym platformam?

        • Kolous napsal:

          Matlab je program programové prostředí a skriptovací jazyk původně pro matematické výpočty, ale rozrostl se díky modulům na velmi univerzální nástroj ve kterém můžeš provádět fyzikální výpočty, simulovat obvody nebo třeba obchodovat. Rightedge je specializovaná backtestovací platforma, takže podporuje funkce zaměřené přímo na obchodování, které si v Matlabu musíš napsat sám nebo se poohlédnout po nějakém frameworku (jako třeba: http://www.tadeveloper.com). Výhody a nevýhody jsem se snažil shrnout v první verzi článku, ale pak jsem se do toho zamotal, tak jsem to vyhodil. Mě vyhovuje syntaxe matlabu, když si v něm něco potřebuju rychle spočítat (výpočty s celými maticemi)….na větší projekty už to tak přehledné není. Dál, když si ten program napíšu celý včetně indikátorů, tak jsem pochopil plno věcí nad kterými mě nenapadlo ani přemýšlet, když bych využil nějakou hotovou knihovnu. Záleží na vkusu každého soudruha ;-)

        • Kolous napsal:

          Na porovnání výhod nevýhod jednotlivých jazyků jsem narazil úplně náhodou tady:

          http://www.quantstart.com/articles/Successful-Backtesting-of-Algorithmic-Trading-Strategies-Part-I

          • admin napsal:

            Užitečný. I když můj milý VB.NET chbyí, ale co se dá dělat. Život je drsný.

            Mimochodem, přešel jsem na https, pokud by někdo měl problémy se zobrazením webu nebo vkládání komentářů, tak se prosím ozvěte.

  2. Honza napsal:

    Ahoj, chtěl jsem se zeptat, jestli by bylo možné s uživatelem Kolous navázat nějakou spolupráci. Tradingu se již věnuji delší dobu.
    Mám plno nápadu, co chci zrealizovat, ale v Matlabu teprve začínám, tak jestli by nebylo se možné nějak domluvit na spolupráci. Děkuji

    • admin napsal:

      Tady si můžete normálně vyměnit kontakty a pak pokračovat po soukromé linii, není problém … nejsme na glandu.

      • foglik napsal:

        Jen dotaz, pokud začínáš s programovaním, proč zrovna matlab – je tolik programovacích jazyků, kde neplatíš zbytečné poplatky…

  3. Honza napsal:

    Oukei, tak mi mi prosím tě napiš na jansafarcik@seznam.cz
    Dík

    • Kolous napsal:

      Můj kontakt máš na mejlu. Prohlášení: „Tradingu se již věnuji delší dobu.“ mi ale příliš nezapadá do kontextu další diskuze ;-)
      V čem to napsat je vcelku fuk….záleží v čem kdo umí programovat. Osobně bych pro začínajícího programátora doporučil spíš python pro pokročilého javu. Mě matlab sedí (hlavně syntaxe pro práci s daty)….pro obchodování portfolia kde potřebuješ databázový backend, exekuční atd. to ale není moc přehledné.

  4. foglik napsal:

    Myslím core + plugins – hodláš obchodovat ze školy?

    • Honza napsal:

      nn, nad tím jsem zatím neuvažoval.
      Mám strategie a teprve se je snažím naprogramovat.
      A hledám nějakého odborníka, co mi s tím pomůže :-)

      • admin napsal:

        Mám strategie, a teprve se je snažím naprogramovat? Mě se zdá, že může platit vždycky jen jedna půlka, ne?

        Buď:
        Mám strategie, což znamená, že jsem je vymyslel, zbacktestoval a tudíž programuji (byť v nějakém jazyce typu Easy Language)

        Nebo:
        Nemám nic a teprve se snažím vymyslet postup, jak ověřit nějaké nápady

        Odborníků je tady na webu celkem dost, ale fakt myslíš, že Ti s tím bude někdo pomáhat? Máš kromě kapitálu na obchodování, který „se nějaký sežene vždycky“ taky prostředky na zaplacení těch odborníků?

    • Honza2 napsal:

      Předpokladam, že myslel skolni licenci..

      Ktera ale nebude platit vecne a navic mi take prijde, ze je spousta lepsich jazyku pro psani AOSka..

      Mohu se zeptat, s jakým počátečním kapitálem do toho vstupuješ? Jsem v celkem stejné situaci, tak by mě zajímalo porovnání..

      • Honza napsal:

        Počáteční kapitál zatím neřeším, pokud to půjde tak se nějaký sežene vždycky. Hlavní je mít kvalitní systém.

        • foglik napsal:

          To se hodně lehce píše, ale nevěř tomu – pokud jsi nevyhrál ten poslední Jackpot ve sportce. Systém 90 tady popsaný je otestovaný, funkční a má dobré výsledky – kolik na něj seženeš? Kapitálem myslím 50K USD a výše…

  5. Honza napsal:

    No, abych to shrnul. V diskuzi se ke mě objevilo hodně otázek a prohlášení. Myslím, že nejlépe mě vystihuje tento článek:
    https://winpes.cz/kde-mam-vzit-100000-usd/
    Nepředpokládám, že to budu schopen stihnout do 30, ale tak snad se mi to nějak do 45 snad povede. Držte palce! :-)Než našetřím a vydělám těch 100 000 USD, tak už začínám pracovat na tom, co potom s nimi. Snad to tady nikomu nebude vadit.

  6. Kolouš napsal:

    Nevím jestli se s tím setkal ještě někdo ale včera mi po upgradu TWS přestaly jít přes API aktuální data pro CSCO, MSFT a INTC s chybou: The contract description specified for CSCO is ambiguous. (errcode: 200). Při streamování dat používám STK-SMART-USD. Pro vyřešení problému stačí přidat při vytváření kontraktu parametr primaryExchange = ‚NASDAQ‘;

    • piftik napsal:

      ano, svata trojica csco-msft-intc, stary znamy problem. ja ako primary exchange davam ISLAND

      • foglik napsal:

        Tak já jsem opět bez problém;) Co používáte za jazyky a knihovny, že máte problém.

        • Djm napsal:

          To prave zalezi na tom, jaka data u IB mas subscribnuta. Pokud jsi prihlaseny zvlast k datum NYSE a NASDAQ (tak to mam ja), tak je potreba explicitne nastavit destination u teto trojice tickeru na ISLAND. Pokud mas ale nejaka ta souhrnna data obsahujici kotaci z BATS, tak se ten problem neprojevi.

          • admin napsal:

            Což mě opět vede ke zvolání „zlatej IQFeed“ ;-)))

          • Kolous napsal:

            Jo mám tyhle dvě. Co je vůbec začten INET(ISLAND)? Nejpodrobnější popis jsem našel na wiki:

            Inet was an electronic trading platform based on a system developed by Instinet in the 1970s that merged with Island Exchange in 2002 and was subsequently acquired by NASDAQ in 2005.

            Takže pod Nasdaq to patří ale proč bych měl chtít primaryExchange odtud, když si můžu nastavit rovnou NASDAQ? Což mi funguje.

            Jinak všechno nejlepší do nadcházejícího roku.

          • Honza napsal:

            Btw dekuji.. Uz asi deset minut na to hledam reseni a stejne jsem nakonec skoncil tady s jednoduchou odpovedi :-)

  7. Pingback: Backtesting / Testování a jak na něj (4/6) | Akcie

Napsat komentář

Vaše emailová adresa nebude zveřejněna.