Jóideje foglalkoztat már a kereskedési stratégiák automatizálásának kérdésköre. Nem mintha egy robotra merném bízni a számlámat, a technológiai megvalósítás része viszont kifejezetten az a fajta intellektuális kihívás, amivel örömmel foglalkozom.
Az Interactive Brokers van olyan jó, hogy ügyfeleknek különböző API-kon keresztül is hozzáférést biztosít a számlavezetési és kereskedési funkcionalitásához. Ha tehát hozzám hasonlóan rendelkezel programozó vénával, elviekben semmi sem tart vissza tőle, hogy saját automatizált, vagy félautomata (kvázi signaling) rendszert készíts az Interactive Brokers számládhoz.
Mit csináltam, mi az az IBKR Facade?
Bizonyos esetekben hasznát vettem vettem volna a napi kereskedésben valamilyen eszköznek, ami segít a pozíciók biztonságos zárásában, amikor épp nem ülök a chartok előtt. Eredetileg ezért kezdtem nézegetni az Interactive Brokers TWS API-ját, amire végül ráépítettem még ezt-azt és aztán úgy gondoltam mindez másnak is hasznos lehet. A főbb funkcióit kiajánlottam egy saját REST API-n, így akár más szoftverekkel is relatíve könnyen összeköthető.
Mivel a relatíve nehézkesen használható TWS API-t beburkoltam egy Java Spring technológiára épülő projektbe, és a főbb funkciókat kiajánlottam mindenféle Springes komponensek formájában, így Java Spring tudással a szoftver könnyen kibővíthető, akár teljesen automatizált kereskedési stratégiák motorjaként is szolgálhat.
A cél az volt, hogy a tőzsdei kereskedés automatizálása iránt érdeklődő fejlesztőknek egy svájcibicska szerű megoldást adjak a kezébe, amire a nyers TWS API használatánál jóval kényelmesen felépíthetik a saját szoftverüket.
Mi mindenre használhatod?
- Feliratkozás bármilyen az Interactive Brokers kínálatában szereplő instrumentumra (bid, ask, stb…), ami aztán egy Redis TimeSeries adatbázisból tetszőlegesen felhasználható árinformáció kinyerésére, idősor analitikák készítésére, gépi tanulási modellek inputjaként, stb.
- Kereskedési szignálok generálására
- Pozíció management, order kezelés
Működési elv
Az IBKR Facade feltételezi, hogy fut valahol egy már az Interactive Brokershez authentikált TWS, vagy egy IB Gateway példány, amihez hálózaton keresztül csatlakozni képes. Ezeket a beállításokat az application.properties állományban kell megadnod. Ha szeretnél árfolyaminformációkat Redis-be írni (márpedig enélkül sokmindent nem fogsz tudni csinálni), akkor szükséged lesz még egy TimeSeries extensionnel futó Redis-re.
Ha a fentiek adottak, akkor az IBKR Facade indulást követően a kiajánlott REST API-val használható. Például az instrumentum keresés, instrumentum árfolyam stream-re történő feliratkozás, számlafunkciók lekérdezése stb. funkciók mind rendelkezésre állnak. De ha te nem REST API-n keresztül szeretnéd a már meglévő funkcionalitást használni, akkor magából a forráskódból használhatod az egyes funkciókat.
Kereskedési stratégiát például úgy programozhatsz le, hogy feliratkozol azokra az instrumentumokra, amelyeket használni szeretnél, majd elkezded gyűjteni és periodikusan kiértékelni az adatokat kereskedési szignálok után kutatva. Amikor vételi, vagy eladási szignált kapsz, akkor pedig a megfelelő service használatával beadhatod a megbízásodat. Minderre példát is találsz a GitHub-on.
Mi kell hozzá?
- Java 11, Maven, némi Spring tudás, tőzsdei tapasztalat
- A TWS API Java implementációja (a GitHub repo tartalmazza)
- Interactive Brokers számla, értelemszerűen eléréssel azokhoz a piacokhoz és instrumentumokhoz, amikkel dolgozni szeretnél
- Futó TWS, vagy IB Gateway a megfelelő beállításokkal (engedélyezned kell a szoftverben a külső hozzáférést) – Itt fontos, hogy tudd, mit csinálsz. Ne adj kereskedési jogot az API-nak, ha nem vagy biztos a dolgodban, vagy használj demo számlát!
- Egy Redis szerver TimeSeries modullal. Ha nincs ilyened, vagy nem akarsz lokálisan bajlódni vele, használhatod a Redis Cloudot is (értelemszerűen sokkal lassabb lesz)
API alternatívák
Nem biztos, hogy neked pont ez a megfelelő eszköz. Az Interactive Brokers által szolgáltatott API-k, és azok célja (a cikk írásának pillanatában):
- Trading WorkStation: Gyakorlatilag az Interactive Brokers vastag klienses alkalmazása, amit a legtöbb aktív kereskedő használ (a mostanában megjelenő IBKR Desktop valószínűleg kiváltja majd). Az én megoldásom erre épül, mivel így párhuzamosan tudom használni a TWS-t és futtatni az algo-t.
- IB Gateway: Fenti megoldással 100%-ban kompatibilis, de a GUI nélkül. Használata akkor javasolt, ha háttérben akarod futtatni az algoritmusodat, például egy cloud VPS-ről.
- Web API: Gyakorlatilag egy REST interface-t biztosít az IB funkcióihoz. Főleg a számlakezelés tekintetében tűnik kézenfekvőnek a használata, de mivel nekem erre nem volt szükségem, nem mélyedtem el benne részletesen.
- FIX: Nekem totálisan irreleváns, így ebbe sem ástam bele magam, de ezek szerint az elvi lehetősége megvan, hogy alacsony szinten, natív FIX protokkolon keresztük fogadjuk az árinformációkat és kereskedjünk. Ha valaki HFT algoritmuson töri a fejét, akkor sok sikert!
Hol találod?
A pojekt aktuális állapotát, a szükséges technikai részleteket megtalálod a GitHubon:
https://github.com/medovarszki/ibkrfacade
Ha szeretnéd használni, de segítségre van szükséged, írj bátran a GitHub-on, vagy a kezdőlapon található kapcsolatfelvételi űrlapon keresztül!