2020. május 1., péntek

Adatfolyam (streamelés)

Ebben a posztban egy olyan eszközt adok kezedbe, melyet én nap mint nap használok és nagyban képes segíteni az elemzést, vagy meglévő portfólió értékelését.

Évek óta keresem - kisebb-nagyobb lelkesedéssel - online adatok Excelbe transzferálási és azok valósidejű feldolgozási lehetőségét. Egy ilyen megoldás rendkívüli módon leegyszerűsíti és felgyorsítja meglévő portfólió elemzését, illetve értékelését, valamint megkönnyíti watchlist-k készítését, stb.
1.) Először próbáltam weboldalakról leszedni adatokat. Ez a törekvésem csak részben volt sikeres, mert részben nem támogatták az adatexportot, részben pedig statikus, nem frissülő adatokkal szembesültem (újra el kellett indítani az Excel weblekérdezést)
2.) Google Táblázatok függvényei (googlefinance, importxml, importhtml) kínálnak webes lekérdezési lehetőséget. ez már jobban működött, de megvannak a korlátai. Nem szerkeszthető szabadon, nagy adatmennyiség esetén lefagy, az adatfrissítés frekvenciája alacsony és eléggé bizonytalan. Korábban Yahoo Finance szolgáltatott adatokat, de ezt 2017-ben leállították
3.) Egyedileg fejlesztett add-in segítségével lényegében bármilyen - webes - adatot le tudok hívni. Ennek hátránya, hogy statikus (nem frissül automatikusan), lassú (kb. 50 adat/perc lekérdezési sebesség), ami nagyobb adatigény esetén napokig eltartó lekérdezést eredményezett és egyes - előre definiálhatatlan - adatok lekérdezése visszautasításra kerül. Mindezekkel együtt ezt az eszközt már jól tudtam használni és máig is használom.
4.) Excel VIA (Valós Idejű Adatok, vagy RTD - Real Time Data) függvényének használata. A függvény létezése nem volt titok számomra, de használni nem tudtam (és most is csak hályog kovács módján). A valós idejű adatkiszolgáló helyi számítógépre telepítésének feladatát már nem tudtam megoldani. Időközben aztán kiderült, hogy ez talán még sem olyan ördöngösség. Elegendő az adatszolgáltató alkalmazást elindítani a számítógépen és nem szabad bezárni az adatlekérési időszak alatt, mert megszakad az adatfolyam. Persze ha bezárod, akkor sem történik katasztrófa. Újra kell indítani az egész mutatványt.
A jó hír az, hogy Interactive Brokers TWS és Thinkorswim (TOS) desktop alkalmazása egyaránt támogatja a streamelést. Én most TOS - Excel összekötést fogom bemutatni, mert ez igazán egyszerű, nem kíván semmilyen előképzettséget.
Sajnos ez a funkció nagyon gyengén (mondhatni sehogy) dokumentált TOS-nál, amely egyébként nagyon részletes funkció és működési leírással bír.
  • Első lépésként le kell tölteni és telepíteni TOS desktop (demo) alkalmazását. Ha ez  már fut a gépeden, akkor nincs semmi teendőd ezzel kapcsolatosan. Arra vonatkozóan nem találtam információt, hogy a demo változat - ami késleltetett adatokat mutat - ugyanúgy teljes körű lekérdezési lehetőséget biztosít-e, mint az éles kereskedési platform. Feltételezem és remélem, hogy igen, mert korábbi tapasztalatom szerint az összes funkciója elérhető demoban is azzal a korlátozással, hogy késleltetett adatokat ad. Időben korlátlan demo regisztráción Opcióguru lépésről lépésre végigvezet.
  • Ha a TOS fut a gépeden, az már fél siker. Indulás után az alábbi képernyőhöz hasonló fog megjelenni

A felső menüsorból a Marketwach-t kiválasztva jutunk a következő képernyőre.
A watchlist formátum és elnevezés (1)elkészítése után fogadókész a rendszer a portfólió,vagy a vizsgálandó sokaság fogadására. A ticker-ek beírhatók kézzel a "Symbol" oszlopba,vagy fájlból beimportálhatók (2). Több ilyen lista is készíthető ízlés szerint.
  • Kétféle adattípus áll rendelkezésre. Lekérdezhetők a statikus és dinamikus adatok. A statikus adatok azok, melyek negyedévente egyszer változnak. Ezek nem streamelhetők, de érdemes a (fundamentumok) lekérdezését elvégezni nagy adattömeg esetén, mert azok nagyon gyorsan előállíthatók. Ha elkészült az adattáblázat, akkor az fájlba exportálható.                                      A dinamikus (streamelt) adatok választéka a "help on data export" menüpont alatt található. Egy részét ennek valószínűleg nem fogod érteni (némelyiküket én sem), de a szükségesek könnyedén beazonosíthatók.                                                                                                          A Marketwatch oldalon megjelenő táblázat fejlécére ("Symbol" sora) jobb egérgombbal kattintva felkínálja a rendszer a táblázat oszlopainak (lekérdezendő mezőinek) összeállítási lehetőségét. Az itt kiválogatott streamelhető adatokat kell a táblázatba foglalni. Az előre legyártott mezőkön túl van még 19 custom mező lehetőség, de ezt most ne tárgyaljuk.
Az itt kiválasztható adatok mindegyike streamelt. 
List of available fields:  (nem teljes, stock és opciós paraméterek is streamelhetők)
52HIGH
52LOW
CLOSE
DESCRIPTION
DIV
DIV_FREQ
EXCHANGE
EX_DIV_DATE
HIGH
HTB_ETB
IMPL_VOL
INTRINSIC
LAST
LOW
MARKET_CAP
NAME
NET_CHANGE
OPEN_INT
PE
PERCENT_CHANGE
PROB_OF_EXPIRING
PROB_OF_TOUCHING
PROB_OTM
PUT_CALL_RATIO
RHO
ROC
ROR
SHARES
STOCK_BETA
VOLUME
YIELD

Ha kiválasztottad a mezőket és feltöltötted a szimbólumokat, akkor a rekordok automatikusan kitöltődnek. Itt több ezer rekordról beszélünk, amit a tetszőleges számú mezővel felszorozva kapjuk a lekérdezett adatszámot. Nagy adatmennyiség esetén lehet, hogy néhány másodpercet várni kell, amíg letöltődik maradéktalanul minden. Később a frissítés már gördülékenyen zajlik.
Az előző képernyőn az export "To Microsoft Excel" menüpontot választva a vágólapra másolódik a lekérdezésed, melyet Excel táblázatba másolva elkészül az adatfolyam import. Ezután már elhagyható "Marketwatch", sőt akár törölhető is a Watchlist. A "VIA" függvény argumentumai cellahivatkozásokra mődisíthatók. Így igazán rugalmassá válik az alkalmazás.
Később ez lementhető, bezárható, újranyitás után ismételten elindul az adatfolyam.
Fontos betartani, hogy először mindig a TOS-t kell elindítani, az Excelt csak ezután,
A kapott adatok valós időben frissülnek, a feldolgozó képletek eredménye is aktualizálódik.
Excel alapbeállítása szerint 250ms az adatfrissítési frekvencia. Erre a gyakoriságra valójában nincs szükség és nagyobb adatállomány esetén nem is feltétlenül tud teljes körűen frissülni.
Ezért én átállítottam a frissítési gyakoriságot 10000ms-ra, azaz 10mp-re.
Ehhez az Excel beállításaiban ki kell jelölni a "Fejlesztő eszközök" fület az alábbiak szerint,

A Visual Basic ikonra kattintás után az Immediate ablakban lehet megváltoztatni a frissítési frekvenciát a következők beírásával:
Application.RTD.ThrottleInterval=10000 <ENTER>

Ezzel minden érdemleges információt átadtam. Sok sikert!

UPDATE 2020.10.11. Találtam egy rövid videóbemutatót.