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

V minulém díle jsme probrali teorii komunikace .NETové aplikace s brokerem Interactive Brokers pomocí IB Gateway a API. Dnes, jak asi tušíte, se vrhneme na nějakou tu praxi. Bude to záměrně dost jednoduchá, na druhou stranu je nutné pochopit základy, než do problému pronikneme hlouběji. Čili pojďme na věc, Visual Studio do ruky a jdeme kódovat!

Postup

Jak víme z minula, samotné API je stále ještě poměrně složité ovládat “ručně”, proto existují knihovny, které nám pomohou napsat kód ve VB.NET a ta knihovna jej transformuje do kódu, jemuž “rozumí” API a IB Gateway. Tyto knihovny jsou v současné době nejméně dvě – oficiální knihovna od Interactive Brokers a dřívější knihovna, kterou napsal Karl Schulze (více na jeho blogu). Já v příkladu použiji Karlovu knihovnu, prostě proto, že je k dispozici déle a mám s ní více zkušeností. Později, v některém z dalších dílů použiji knihovnu “oficiální”.

Postup bude zhruba následující:

  1. Ve VB.NET založíte nový projekt – konzolová aplikace
  2. Je třeba si stáhnout knihovnu Karlovu krs.ats.ibnet.dll, například odtud.
  3. Z toho zip souboru “Krs.Ats.IBNet9.66.0.21.Bin.zip” je třeba rozbalit knihovnu dll, umístit ji někam do projektu a odkázat se na ni (Project / Properties / Reference / Add reference).
  4. Nyní je třeba spustit si na počítači Trader Workstation nebo IB Gateway. Pro tento příklad nezáleží na tom, zda se pustí oproti ostrému účtu nebo papertradingovému účtu.
  5. Spuštěnou Trader Workstation nebo IB Gateway je třeba nakonfigurovat tak, aby se vůbec bavila s naší aplikací. Neboli, v případě IB Gateway to bude: Configure / Settings, API / Settings a zde nastavíme “Socket port” například na 4001 (to je mimochodem výchozí hodnota) a do “Trusted API adresses” přidáme IP adresu místního počítače, na kterém projekt spouštíme (127.0.0.1). Pro Trader Workstation to bude obdobné, tam ještě zaklikneme položku “Enable socket clients”. Bude to vypadat nějak takto:

IBGW

Kód, který vytvoříme ve VB.NET, bude následující:

Code Snippet
Imports Krs.Ats.IBNet
Module Module1
Dim WithEvents mujKlient As New IBClient
Sub Main()
mujKlient.Connect(„127.0.0.1“, 4001, 100)
mujKlient.RequestCurrentTime()
Do
Threading.Thread.Sleep(100)
Loop
End Sub
Private Sub cas(sender As Object, e As CurrentTimeEventArgs) Handles mujKlient.CurrentTime
Console.WriteLine(e.Time)
Console.WriteLine(„Stiskněte libovolnou klávesu pro ukončení…“)
Console.ReadKey(True) : End
End Sub
End Module

Jak vidíme, není to nic složitého. Malé vysvětlení:

  • Na začátku naimportujeme do projektu knihovnu, abychom se na ni mohli odkazovat.
  • Proměnná “mujKlient” představuje instanci třídy, pomocí níž komunikujeme s IB Gateway.
  • Tato proměnná je deklarovaná jako WithEvents, aby mohla reagovat na události.
  • Následně nastartujeme program. A první věc, kterou v programu uděláme bude to, že se připojíme k IB Gateway běžící na našem počítači (127.0.0.1) naslouchající na konkrétním portu (4001) a budeme se tvářit jako klient č. 100.
  • Nyní požádáme IB Gateway, aby nám sdělila, jaký je právě čas na serveru Interactive Brokers. To je ten řádek s “.RequestCurrentTime”.
  • A dál … dál nic. Pokud bychom aplikaci ukončili po zaslání požadavku na zobrazení času, odpověď by většinou (respektive skoro nikdy) nestihla přijít před koncem aplikace, a proto musíme zvolit nějaký způsob, jak aplikaci nechat běžet. Já jsem zvolil nekonečnou smyčku, která vždy uspí program na 100 milisekund a pak pokračuje “dalším kolem”.
  • Za nějakou dobu (ony to budou řádově milisekundy, ale nikdy nevíme kolik) se IB Gateway “uráčí” poskytnouti nám výsledek. Což se dozvíme tak, že je spuštěn kód v rutině “Private Sub cas”. Mimochodem, samotná procedura se může jmenovat jakkoliv, důležité tam je, že obsahuje v definici ono “Handles …” což znamená, že bude spuštěna automaticky, pokud nastane definovaná událost – v našem případě odpověď na otázku “kolik je hodin”.
  • Samotná procedura už nedělá vlastně nic – jen vypíše čas na obrazovku, počká na stisk klávesy a skončí.

Pokud vše přeložíte a spustíte, měli byste vidět následující věc:

result

To je téměř vše, ještě malá zajímavost závěrem. IB Gateway lze nastavit tak, aby zobrazovala “API messages”. Pokud to uděláte a spustíte zde uvedený kód ještě jednou, uvidíte v okně IB Gateway na záložce “Client 100” něco podobného jako je na následujícím obrázku.

IBGW2

To už jsou “syrové” příkazy a odpovědi API, které (díkybohu) nemusíte znát a nemusíte jim rozumět, to už za Vás udělá ta Karlova knihovna.

A co dál?

Později v seriálu zjistíme, že veškeré API probíhá podle stejných pravidel jako to, co jsme viděli v tomto dílu. Je vždy otázka – odpověď. Čili teď už je “jen” potřeba znát odpovídající příkazy a formáty odpovědí a můžeme vesele komunikovat s IB API – zjišťovat pozice, zadávat příkazy, dotazovat se na stav účtu a tak dále. O tom bude v dalších dílech seriálu.

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. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

4 komentáře u Použití VB.NET pro obchodování na burze–9. díl

  1. Mirek napsal:

    Admine, mám dotaz ohledně knihovny krs.ats.ibnet.dll – kde je prosímtě možné získat seznam příkazů které jsou použity pro tuto knihovnu?
    Pro oficiální knihovnu od IB jsem si našel příručku, ale pro tuto neoficiální knihovnu nemohu nic najít.

    Díky

  2. Pingback: VB.NET na burze–14. díl–automatizujeme spouštění IB GW | Akcie

Napsat komentář

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