Jump to content
Co nového? Mé kurzy
Články a tutoriály:
Archiv článků Psychologie obchodování Jak na obchodní plán Mé obchodní strategie
  • Finančníkovy vychytávky: automatické stahování dat přes SierraChart

    Některé drobnosti dokáží v tradingu ušetřit spoustu práce a peněz. Často jde o velmi jednoduchá řešení, které jen člověka nemusí napadnout. V dnešním článku ukáži své řešení na automatické externí ovládání programu SierraChart (SC) – v mém případě pro stahování dat.

    Řada obchodníků na Finančníkovi používá program SierraChart pro intradenní obchodování. Ovšem SC může dobře posloužit i pro další účely – například jako zdroj dat, která jsou s programem dodávána (jde prakticky o všechny futures a akcie, nově i opce a řadu mimo burzovních produktů). Data tak lze stahovat automaticky do databáze nebo pro účely různých analýz. Já takto například zpracovávám na serveru kvalitní ticková data akciových indexů a řešil jsem, jak si zajistit jejich automatické stahování.

    Jedno řešení se nabízí okamžitě. Grafy patřičných trhů si lze nadefinovat do „Chartbooks“ a následně je nastavit jako ty, které se budou otevírat automaticky při spuštění programu (General Settings > Files To Open On Startup).

    Jenže toto řešení není úplně flexibilní. Například proto, že musíme ručně neustále konfigurovat kontraktní měsíce, které se průběžně mění. Sám jsem celou funkcionalitu nakonec vyřešil přes velmi jednoduchý skript v bezplatném Pythonu:

    1) Automatické spouštění a ukončování SierraChart ovládám pomocí standardní knihovny subprocess: Spuštění programu pak vypadá například takto:

    P=subprocess.Popen("C:SierraChartSierraChart.exe")

    A později mohu konkrétní otevřenou instanci zavřít pomocí:

    p.terminate()

    Skript mám napojený na plánovač úloh ve Windows, a podle potřeb tak mohu spouštět a zavírat SierraChart.

    2) Otevírání grafu v SierraChart lze velmi snadno ovládat přes UDP protokol. A to tak snadno, že jsem to zvládl i já, neprogramátor.

    SierraChart má UDP standardně na IP adrese 127.0.0.1 a portu 22903.
    Na tento port pak stačí poslat specifikaci konkrétního trhu, který se v SC otevře a stáhnou se příslušná data. Tedy například „YMU17.scid“

    V Pythonu je to otázkou dvou řádků s použitím modulu socket:

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.sendto(“YMU17.scid”.encode(), ("127.0.0.1", 22903))

    3. Aby vše běželo úplně automaticky, stačí si vytvořit funkci pro automatické generování kontraktního měsíce podle zvoleného data. V indexech probíhá rolování v měsících březen, červen, září a prosinec. Sám roluji začátkem 3. týdne, a funkce tak může mít následující podobu:

    import calendar
    import numpy as np
                      
    calendar.setfirstweekday(calendar.MONDAY)
                                              
    def get_week_of_month(year, month, day):  
        x = np.array(calendar.monthcalendar(year, month))
        week_of_month = np.where(x==day)[0][0] + 1
        return(week_of_month)     
    def get_contract(symbol, year, month, day):
        exp={1:"H",2:"H",3:"H",4:"M",5:"M",6:"M",7:"U",8:"U",9:"U",10:"Z",11:"Z",12:"Z"} 
        if month in [1,2,4,5,7,8,10,11]: return symbol+exp[month]+""+str(year)[2:]
        if month in [3,6,9,12]:      
            if get_week_of_month(year, month, day)>=3:   
                if month==12:                                 
                    return symbol + exp[1] + "" + str(year + 1)[2:] 
                else:                        
                    return symbol + exp[month+1] + "" + str(year)[2:] 
                            
            else:         
                return symbol+exp[month]+""+str(year)[2:]  

    To už je trochu komplikovanější kód, ale opět velmi jednoduchý – nejprve zjišťuji pořadí aktuálního týdne v měsíci a podle logiky rolování mi systém vrací expirační měsíc.

    Volám například funkcí get_contract(“YM”, 2017, 9, 1) a výsledkem je YMU17. Zkušenější programátoři navíc jistě dokáží kód napsat lépe a efektivněji.

    Sám mám výše uvedené spojené se stahováním různých trhů a ukládáním do databáze.

    Pokud si již program SierraChart platíte pro jiné využití (intradenní obchodování), pak výše uvedený postup může představovat velmi efektivní způsob, jak jednoduše dostávat data do dalších nástrojů používaných pro trading (databáze, různé analyzátory atd.).

    3.9.2017

    Petr Podhajský

    Fulltime obchodník věnující se tradingu více než 20 let. Specializace na systematické strategie obchodované na futures a akciích. Oblíbený styl obchodování: stavba automatizovaných portfolio systémů, které využívá i při správě většího externího kapitálu.


    Sdílíme, co nám samotným funguje.
    7 výukových lekcí.

    Jak reálně uspět v tradingu?

    Naučte se vydělávat na své sny (naše metody na Finančník.cz)

    Praktický návod, jak v trzích získat šanci vydělávat stovky tisíc až miliony dolarů ročně bez vlastního kapitálu a nutností trávit denně hodiny před počítači (bez práce to ale nepůjde).

    >> Získat kurz zdarma <<
×
×
  • Vytvořit...