VB.NET a burza – REALTIME data z Google–5. díl

V předchozích dílech seriálu jsme se zabývali stahováním historických dat ze serverů YAHOO a GOOGLE. To je sice hezká a moc záslužná práce, ale k běžné praxi tradera nám historická data prostě nestačí. Chtělo by to data reálná. S těmi je problém, protože ta Vám typicky nikdo nedá – všichni nabídnou jen data zpožděná o 15 – 20 minut, a to je pro trading zatraceně pozdě. Všichni jsou zlí, až na GOOGLE, který je hodný a reálná data nám poskytne.

Jak na to

Opět stačí znát speciální URL, pouze vrácená data nyní nejsou ve formátu XML ani CSV, ale JSON. Ono magické URL vypadá nějak takto:

http://finance.google.com/finance/info?client=ig&q=GLD

a vrácená data jsou skutečně REALTIME. Ve VB.NET bychom pak psali toto:

Code Snippet
Imports System.Net
Imports System.Web.Script.Serialization

Module Module1
  Sub Main()
    Dim myClient As WebClient = New WebClient()
    Dim reply As String = myClient.DownloadString("http://finance.google.com/finance/info?client=ig&q=GLD").Replace("[", "").Replace("]", "").Replace("//", "")
    Dim result = New JavaScriptSerializer().Deserialize(Of Dictionary(Of String, String))(reply)
    Console.Write(result("l")) 'vrátí vždy vždy aktuální cenu
  End Sub
End Module

Kód je velice přímočarý, pouze je třeba dát pozor na to, že JavaScriptSerializer funguje až s verzí .NET frameworku 4.0 nebo vyšší a že funkcionalita se nachází v prostoru System.Web.Script.Serialization, který musíme importovat.

Vylepšení

Co když budeme chtít vrátit aktuální ceny všech tickerů, které aktuálně obchodujeme ve strategii “90%”? Využijeme vlastnost, kdy Google umí vrátit v jediné odpovědi data pro více tickerů. URL by tedy vypadala následovně:

http://finance.google.com/finance/info?client=ig&q=GLD,SPY

Kód ve VB.NET by vypadal nějak takto:

Code Snippet
Imports System.Net
Imports System.Web.Script.Serialization
Imports System.Text.RegularExpressions

Module Module2
  Sub Main()
    Dim myClient As WebClient = New WebClient()
    Dim Tickery As String() = New String() {
      "AAPL", "ABBV", "ABT", "ACN", "AIG", "ALL", "AMGN", "AMZN", "APA", "APC",
      "AXP", "BA", "BAC", "BAX", "BIIB", "BK", "BMY", "C", "CAT", "CL", "CMCSA",
      "COF", "COP", "COST", "CSCO", "CVS", "CVX", "DD", "DIS", "DOW", "DVN",
      "EBAY", "EMC", "EMR", "EXC", "F", "FB", "FCX", "FDX", "FOXA", "GD", "GE",
      "GILD", "GM", "GOOG", "GS", "HAL", "HD", "HON", "HPQ", "IBM", "INTC",
      "JNJ", "JPM", "KO", "LLY", "LMT", "LOW", "MA", "MCD", "MDLZ", "MDT",
      "MET", "MMM", "MO", "MON", "MRK", "MS", "MSFT", "NKE", "NOV", "NSC",
      "ORCL", "OXY", "PEP", "PFE", "PG", "PM", "QCOM", "RTN", "SBUX", "SLB",
      "SO", "SPG", "T", "TGT", "TWX", "TXN", "UNH", "UNP", "UPS", "USB",
      "UTX", "V", "VZ", "WAG", "WFC", "WMT", "XOM"}
    Dim reply As String = myClient.DownloadString(String.Format("http://finance.google.com/finance/info?client=ig&q={0}", String.Join(",", Tickery))).Replace("[", "").Replace("]", "").Replace("//", "")

    'tím dostaneme všechna data ve smyslu {…},{…}, čili je třeba to rozdělit
    Dim Rozdelovace As String() = New String() {"}" + vbLf + ",{"}
    Dim Casti() As String = reply.Split(Rozdelovace, StringSplitOptions.None)
    For Each cast In Casti
      cast = cast.Trim 'odstraníme prázdné znaky
      If Not cast.StartsWith("{") Then cast = "{" + cast 'pokud chybí
      If Not cast.EndsWith("}") Then cast = cast + "}" 'pokud chybí
      Dim result = New JavaScriptSerializer().Deserialize(Of Dictionary(Of String, String))(cast)
      Console.WriteLine(String.Format("{0} – {1}", result("t"), result("l"))) 'vrátí vždy vždy aktuální cenu
    Next

  End Sub
End Module

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

24 komentářů u VB.NET a burza – REALTIME data z Google–5. díl

  1. Joystick napsal:

    To je zajímavé s těmi realtime daty z Googlu. Jaký je v tom háček, že nejsou využívány hojněji, třeba v XLQ? Spolehlivost? Přesnost?

    P.S. Abych předešel rychlé odpovědi – autorovi XLQ jsem už psal, ale zajímá mě názor zde :-)

  2. Djm napsal:

    Je to zvlastni ze google poskytuje zdarma realtime data. Obdivuhodne. To jsem fakt netusil. Mel jsem za to, ze ty data maji taky zpozdena.

    • admin napsal:

      Gdepak, když jsem to psal, tak jsem to testoval a byly fakt realtime a docela kvalitní …

      • Djm napsal:

        V tom pripade by pripadala v uvahu i moznost, ze na strategie obchodovane na konci dne nepotrebujeme datafeed IB, ani IQFeed a dalo by se vse tahat takhle zdarma. Sam zatim mam subscription k datum IB (zakladni US stocks bundle), kde jsou v tomto zakladnim balicku hist. a rt. data 100 max titulu. Kdybych chtel kos akcii rozsirit treba na sp500, tak by snad sly pouzit tyto data zdarma od googlu.

        • admin napsal:

          Přesně ;-)

        • misch napsal:

          Vidím tam drobný problém … data od googlu jsou, řekněme, věcí náhody. Nikde není zdokumentované a zaručené že budou fungovat. Nebo že obsahují správné hodnoty. Když se v googlu někdo rozhodne že parametr „client=ig“ byl nějaký historický a že už není potřeba ho podporovat, tak to pak nepotěší.

          Z toho pohledu mi víc vyhovuje sice ne tak snadno použitelný, ale přece jen aspoň *zaručený* streaming pouhé stovky tickerů od IB.

          • admin napsal:

            Pravda, streaming od IB je zaručený co do garance přísunu dat, ale zkoušel jsi ta PseudoRandomRádobyTickováIBdata porovnávat s „opravdickými“ daty co do stability a spolehlivosti – třeba v době extrémně vysoké volatility?

            Na denní bázi to bude jedno, ale na timeframe 5 sec to bude děs ;-)

            • foglik napsal:

              Google real time data jsem řešil už víc jak před rokem (možná i více) a už tehdy se mluvilo o zastaralém API, ale že není stanoven termín ukončení. Na blogspotu o tom byl dokonce článek – jenom už nevím jak se jmenoval. Jestli ho ještě najdu, tak se dám odkaz.

              • Joystick napsal:

                Ano to jsem taky četl (datum článku bylo dokonce 2010) ale API je něco jiného než poskytování realtime dat přes soubory jako json či csv v případě hist.dat. O tom, že by toto mělo skončit poskytování tohoto nikde nic není. Aspoň tak jsem to pochopil. A jestli funguje jejich API fakt nevím.

                • foglik napsal:

                  Jenže obvykle jde do kytek s API i to ostatní… Jestli to tak bude i v tomto případě netuším. A navíc proč se zlobit se soubory, když je tu API.

                  Přesto stále používám na real ceny IB – prostě toho, přes koho obchoduju. Nerad bych se dočkal situace, že systém vyhodnotí obchody na základě nějakého zdroje a pak mi to zobchoduje za zcela jiné ceny.

                  Článek je z roku 2011: http://googlecode.blogspot.cz/2011/05/spring-cleaning-for-some-of-our-apis.html

                  • admin napsal:

                    Tohle já řeším tak, že srovnávám ceny IB, IQFEED, GOOGLE a pokud se to nějakým podstatným způsobem liší, přijde mi alert. Samozřejmě ceny u IB na denní obchodování by stačit měly.

  3. Joystick napsal:

    Pro ty co to chtějí otestovat a nefunguje jim to (jako mě :-)). Je nutné předem přidat referenci na assembly System.Web.Extensions, jinak nelze namespace System.Web.Script.Serialization naimportovat.

  4. Joystick napsal:

    Pro info. Jaké data poskytuje Google realtime a která zpožděná a o kolik.

    http://www.google.com/intl/en/googlefinance/disclaimer/?ei=BsdGVMC3LIOVwQO9zYDYAg

  5. piftik napsal:

    Admine, posledna veta v prvom odstavci znie „Všichni jsou zlí, až na GOOGLE, který je hodný a historická data nám poskytne.“. Predpokladam, ze namiesto slova „historická“ ma byt slovo „reálná“.

  6. piftik napsal:

    Mozno sa to tu uz riesilo, len by som si chcel overit, ako sa pristupuje k historickym a realnym datam z IQFEED? O jednom sposobe viem a to je pristup cez XLQ.
    Ma IQFEED vlastne API, na ktore sa da nejak jednoducho napojit? VB, VBA, Python, inak?

  7. neuron napsal:

    samotny zoznam s&p100 tickerov tahate odkial ? resp mate to „zautomatizovane“ ked sa nahodou zmeni? dik

Napsat komentář

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