Použití VB.NET pro obchodování na burze–8. díl

Zatímco v předchozích dílech seriálu jsme pracovali víceméně se samotným VB.NET a skládali jsme různými způsoby data, dnes se zaměříme na propojení .NETové aplikace s brokerem, konkrétně to bude Interactive Brokers. Ono je totiž hezké, že aplikace umí získat burzovní data a vypočítat indikátory, není to ale nic platné, pokud neumíme komunikovat s brokerem a posílat objednávky. Dnešní díl bude hodně teoretický, ale příště to napravíme a použijeme nějaké ty praktické ukázky.

Trocha té teorie

Odborníci prominou, některé věci zjednoduším. Jak víme, u Interactive Brokers komunikujeme s brokerem pomocí mnoha různých aplikací, z nichž nejznámější je desktopová Trader Workstation (TWS). TWS sama o sobě žádné nástroje na automatizované obchodování nemá, IB ale nabízí možnost tvorby “vlastní” aplikace, která by uměla některé věci stejně jako TWS, ale mohli bychom si ji napsat – a ovládat – sami. K tomu je poskytnuta sada nástrojů a dokumentace, souhrnně se tomu říká API (Application Programming Interface). Toto API můžeme stáhnout ze stránek IB, nejnovější verze je pak zde.

TWS (a aplikace, kterou napíšeme rovněž) komunikuje se svými servery pomocí tzv. síťových socketů a asynchronně. Síťové sockety si můžete představit jako takové virtuální “trubky”, do kterých “křičíme” po síti dotazy na server a po kterých nám server zpátky “křičí” svoje odpovědi. A asynchronní znamená, že pokud položíme serveru několik dotazů, odpovědi mohou přijít na přeskáčku a víceméně kdy se jim zlíbí. Schéma komunikace mezi naší aplikací a burzou tedy – hodně zjednodušeně řečeno – je taková:

Naše aplikace <-> TWS <-> Servery brokera <-> Servery burzy

Nemám rád TWS

Jak si víte, pokud máte svoje obchody řešené přes Interactive Brokers, Trader Workstation je pěkný slepenec. Má mnoho vlastností, které mi vadí, například

  • příšerně řešené GUI
  • pomalost
  • to, že je napsána v Javě
  • přeplácanost

ale pokud se bavíme o automatizovaném obchodování, jsou dvěma nejhoršími vlastnostmi

  • obrovská náročnost na paměť počítače,
  • a to, že aplikace se každý den po skončení burzy sama vypíná.

V praxi jí tedy pro automatické obchodování zkrátka nepoužívám. Naštěstí existuje “odlehčená” verze TWS, a ta se jmenuje IB Gateway. Sama o sobě neumí nic, umí však poskytovat jakési rozhraní mezi naší aplikací a servery Interactive Brokers. Schéma komunikace mezi programem, který napíšeme a burzou se tedy změní takto:

Naše aplikace <-> IB Gateway <-> Servery brokera <-> Servery burzy

IB Gateway

IB Gateway je napsána v Javě (stejně jako TWS), ale narozdíl od TWS má několik příjemných vlastností:

  • sama se nevypíná, může tedy běžet celé měsíce, a
  • nevyčerpává tolik systémových prostředků a paměti

Neboli, pokud to myslíte s AOS vážně, na Vašem počítači bude neustále spuštěná IB Gateway. Tu získáte s instalací TWS, pouze bude možná potřeba si vytáhnout zástupce na plochu, aby byl neustále k dispozici.

Varování: Pokud si nejste absolutně jisti tím, co děláte, používejte vždy pro práci IB Gateway napojenou na zkušební – papertradingový účet. IB Gateway totiž – pokud je správně nastavená a připojená k serverům IB – posílá opravdické příkazy na burzu! Vy tak můžete vydělat nebo prodělat reálné peníze.

IG Gateway a VB.NET

A jak dojde k propojení mezi programem ve VB.NET a aplikací IB Gateway? Právě přes ony sockety, o kterých jsme již hovořili. Je jistě možné napsat program, který by byl ve VB.NET a zapisoval by do socketu přímo data, kterým IB Gateway rozumí, v praxi se to tak ale nedělá. Příkazy pro IB Gateway, tzv. API messages, vypadají totiž jako změť čísel a písmen. Existují proto knihovny, které trochu zjednodušují tuto komunikaci, a naše aplikace je může použít. Jedna taková knihovna je dodávána přímo jako součást API a v dalším díle se na ni podíváme podrobněji. Komunikace se nám tedy “obohatila” o další prvek a vypadá nyní takto:

Naše aplikace <-> Knihovna <-> IB Gateway <-> Server brokera <-> Server burzy

To bude pro dnešek k teorii vše, příště už snad nějaká ta praxe Mrkající veselý obličej.

Ostatní články tohoto seriálu

  1. Použití VB.NET pro obchodování – zasílání e-mailů (25.2.2015)
  2. VB.NET, burza a Linux–není to šílené? (30.1.2015)
  3. Použití VB.NET pro obchodování na burze–10. díl (16.1.2015)
  4. Použití VB.NET pro obchodování na burze–9. díl (2.1.2015)
  5. Použití VB.NET pro obchodování na burze–8. díl (14.12.2014)
  6. Použití VB.NET pro obchodování na burze–7. díl (3.11.2014)
  7. Použití VB.NET pro obchodování na burze–6. díl (27.10.2014)
  8. VB.NET a burza – REALTIME data z Google–5. díl (20.10.2014)
  9. Použití VB.NET pro obchodování na burze–4. díl (13.10.2014)
  10. Použití VB.NET pro obchodování na burze–3. díl (6.10.2014)
  11. Použití VB.NET pro obchodování na burze - 2. díl (29.9.2014)
  12. Použití VB.NET pro obchodování na burze–1. díl (22.9.2014)
Příspěvek byl publikován v rubrice AOS se štítky . Můžete si uložit jeho odkaz mezi své oblíbené záložky.

6 komentářů u Použití VB.NET pro obchodování na burze–8. díl

  1. Mirek napsal:

    Admine, budeš psát i o způsobu jak komunikovat mezi excelem a TWS? Například jak zadat objdnávku z excelu.

    IB kdysi vydala ukázkový excel sheet pro tyto účely, bohužel dnes už daný excel pro vkládání objednávek nefunguje. Já se už několik týdnů peru s tím jak po splnění podmínek v excelu otevřít automaticky objednávku v TWS :-)

    • admin napsal:

      Seriál je o VB.NET, navíc v .NET je extrémně jednoduché zadávat objednávku. Nevím, proč bych kvůli tomu měl kupovat Excel a instalovat ho na server ;-)

    • marcus napsal:

      Uz to tu bolo niekde riesene – stiahni si starsiu verziu API a tam je funkcny Excel. Inak aj bez neho sa to da urobit, ak si stiahnes popis API. Je to extremne jednoduche, takze podla mna je akykolvek clanok na tuto temu zbytocny. Ak to myslis s AOS naozaj seriozne, tak nakoniec aj tak skoncis pri .NET alebo Jave. Excel je vhodny iba na testovanie resp. mozno na pilotne nasadenie. Vyuzivam ho, ale volam to dirty solution ;-), systemy mi tam bezia iba docasne. Z mojho pohladu to admin vedie ako seriozny web, kde si mozes najst doporucenia, ale ta vacsia (aj zlozitejsia) cast je uz na Tebe. Zadavanie prikazov cez Excel je z tohto pohladu banalita, ktoru by mal zvladnut kazdy sam (mozno s malym usmernenim, ktore mas hore). Minimalne dvaja tu to uz zrealizovali.

      • admin napsal:

        Přesně tak!

      • Mirek napsal:

        No dobře, dám tedy na vaše doporučení a začnu se pomalu seznamovat s .NET. Něco nového se alespoň naučím :)

        • Mirek napsal:

          Tak po dvou měsících co se peru s vb.net + s TWS API můžu konstatovat, že to vůbec není tak těžké jak se to z počátku zdálo. Díky adminovi a dalším za nakopnutí tímto směrem :-)

Napsat komentář

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