Jump to content
Co nového? Mé kurzy
Články a tutoriály:
Seriály Komoditní Manuál Psychologie obchodování
  • Pracujeme s TradeStation (2)

    V dnešním díle našeho seriálu postoupíme od teoretického úvodu k praxi. Ukážeme si konkrétně jak v programu TradeStation naprogramovat triviální "obchodní systém" a jak porozumět jednotlivým položkám kódu.

    Pojďme se rovnou pustit do práce s přípravou kódu našeho jednoduchého systému. Ten bude spočívat ve vstupu do krátké pozice v případě, že se indikátor CCI překříží s nulovou linkou. Věřím, že nemusím zdůrazňovat, že dnešní triviální příklad zde vytváříme čistě pro demonstraci a nejde o kompletní obchodní systém, který by byl připraven pro aplikování do trhu - přípravu takového si naznačíme v některém budoucím díle seriálu.

    Pravidla pro automatizovaný obchodní systém (nebo jeho dílčí část) se v rámci TradeStation nazývají strategie a vytvářejí se v okně strategy. To se vyvolá nejsnadněji přes ikonku EasyLanguage v tzv. shortcut liště - svislé liště s ikonkami, která se nejčastěji zobrazuje na levé straně programu. Pokud lištu s ikonkami nemáte v TradeStation zobrazenou, vyvoláte ji přes hlavní horní menu View > Shortcut Bar (Ctrl + Shift + S).

    Kliknutím na ikonku EasyLanguage se rozbalí kontextové menu, ve kterém v případě založení nové strategie zvolte New EasyLanguage Document > Strategy. Mimochodem - na uvedeném seznamu je vidět, jaké množství nejrůznějších typů kódu lze v TradeStation vytvářet.

    V druhém kroku nás TradeStation vybídne k založení nové strategie. TIP: všechny strategie se ukládají na disk do jednoho adresáře a je proto dobré, připravit si nějakou vlastní konvenci řazení strategií v rámci adresáře. Zejména v testovacím období se vám jinak stane, že se v nejrůznějších strategiích přestanete orientovat. Osobně si např. testovací strategie vytvářím s tečkou na začátku, takže se mi řadí na začátek výpisu v adresáři.
    V rámci založení nové strategie máme možnost vybrat si také šablonu, která nám do dokumentu vloží určitou základní pomocnou osnovu, jak by strategie měla vypadat a základní příkazy, které by měla obsahovat. V tuto chvíli si pojďme vybrat strategii se šablonou (template) None a začít "s prázdným papírem".

    Každá základní strategie by v TradeStation měla obsahovat několik prvků. Ne všechny jsou povinné, ale většina těchto prvků je natolik praktická, že je dobré se je naučit v kódu používat od začátku.

    Aby byl náš tutoriál co nepraktičtější, pojďme si strukturu celého našeho dnešního příkladu ukázat rovnou na kódu:

    V kódu si všimněte, že různé příkazy, nebo chcete-li slova, mají různou barvu. Světle modře jsou automaticky vyznačeny systémové příkazy - tj. takové, které v rámci programovacího jazyka EasyLanguage mají předem definovaný význam a které je třeba se naučit používat. Fialově jsou zobrazeny existující funkce (na screenshortu je fialově zobrazeno slovo CCI. Tj. jde o odkazy na existující kódy, zajišťující příslušnou funkcionalitu. Nejčastějším příkladem funkce jsou nejrůznější indikátory - ty jsou pochopitelně v programu již naprogramovány a obchodník se tak může na danou funkci pouze odkázat. Např. tím, že napíše CCI, čímž vyvoláme funkci provádějící aktuální výpočet indikátoru CCI. Zeleně jsou zobrazována slova, která nemají žádný programový význam a vesměs slouží pro orientaci uživatele.

    Jako první řádek našeho jednoduchého obchodního systému vidíme:
    Inputs: CCIperioda(20);

    Jde o definovaní vstupních konstant a příkaz Inputs: naleznete v kódech drtivé většiny obchodníků pracujících s TradeStation. Je to velmi jednoduchý způsob jak definovat konstanty, které budeme v kódu používat a potřebujeme jim přiřadit určitou hodnotu. Jako řada programovacích jazyků, také EasyLanguage potřebuje dopředu znát jména konstant, se kterými budeme v rámci kódu pracovat. Není třeba nastavovat žádný jejich typ, stačí je pouze programu představit - napsat jejich jméno a do závorky výchozí hodnotu. Inputs: CCIperioda(20); znamená, že budeme v kódu používat naši konstantu se jménem CCIperioda a tato konstanta bude mít hodnotu 20. Proč vkládáme hodnotu 20 "složitě" přes konstantu a nepoužijeme v kódu přímo dané číslo? To má dva základní důvody:

    • ve složitějších kódech se můžeme na konstantu odkazovat na řadě míst kódu. V takovém případě už by bylo mnohem složitější případnou číselnou konstantu změnit (změnu bychom museli složitě provádět na mnoha místech dokumentu, takto stačí změnit číslo pouze v definici konstanty).
    • TradeStation s hodnotami konstant dále pracuje a tyto hodnoty je možné později měnit v nastavení strategií, případně indikátorů atd., přes přehledný panel bez nutnosti zásahu do programového kódu. A především je možné přes konstanty velmi snadno provádět tzv. optimalizaci - nechat TradeStation projít řadu možných parametrů dané konstanty (tj. v našem případě např. CCI v rozsahu 9-50) a sledovat, jaké dopady to bude na danou strategií mít.

    Tzn. definování konstant pomocí příkazů Inputs je velmi praktické a používané. Konstant můžeme definovat samozřejmě více než jednu - v takovém případě je oddělujeme čárkami. Za poslední konstantou je třeba vložit středník. Středníkem vždy ukončujeme každý příkaz v rámci EasyLanguage.

    Příklad definování 3 konstant najednou:
    Inputs: CCIperioda(20), mujstoploss(120), mujprofittarget(300);

    Takto zapsaný řádek připravuje v rámci EasyLanguage tři konstanty obchodníka, se kterými se dále bude pracovat v kódu strategie. Všechny tři konstanty budou mít na začátku příslušné hodnoty - tj. např. konstanta mujprofittarget bude mít hodnotu 300 atd. Jak již bylo řečeno výše, výhodou tohoto nastavení je zejména skutečnost, že konstanty bude možné velmi efektivně zkoumat programem pomocí tzv. optimalizace - automatického hledání nejrůznějších kombinací parametrů a zobrazování jejich dopadu na strategii.

    Konstanty zadané pomocí Inputs lze později velmi snadno konfigurovat v nastavení strategie. Snadno tak můžeme např. sledovat dopad různého stop-lossu. Výpočet provede TradeStation v rámci zvoleného rozsahu zcela automaticky (pomocí nástroje Optimalizace).

    Druhý řádek obsahuje:
    Variables: myCCI(0);

    Tento řádek je velmi podobný řádku Inputs s tím rozdílem, že se definují proměnné. Ty představují pro obchodníka srozumitelná "slova", která později naplňuje určitým obsahem (různé výpočty atd.) a dále s nimi pracuje. Proměnné uvedené v řádku Variables nelze optimalizovat, je to čisté "představení" všech používaných uživatelských proměnných a jejich prvotní naplnění hodnotou. Prvotní hodnotu udává číslo zapsané v závorce. V našem případě pracujeme s námi vymyšlenou proměnnou myCCI, která při prvním spuštění kódu bude mít hodnotu nula. Všechny proměnné použité v kódu musí být uvedeny buď v řádku Inputs nebo Variables, jinak nebude kód fungovat. Budeme-li ve složitějším kódu pracovat s více proměnnými opět můžeme jejich představení řetězit tak, že je uvedeme do jednoho řádku, ukončeného středníkem:
    Variables: myCCI(0),starttime(900),endtime(1200);

    Máme-li v kódu mnoho konstant a proměnných, lze zápis udělat na více řádků - každý musí začít označením Variables, nebo Inputs a musí končit středníkem.

    Třetím řádkem máme ukončeny veškeré "přípravy kódu" a dostáváme se již k samotné strategii. EasyLanguage vychází z běžných jednoduchých programovacích jazyků a všem obchodníkům, kteří kdy pracovali s libovolným programovacím jazykem bude zápis patrně velmi srozumitelný. Pro absolutní neprogramátory je pak porozumění pouze věcí určitého cviku a praxe. Uvidíte, že na konci našeho seriálu budete schopni jednoduché strategie připravovat bez jakýchkoliv problémů.

    myCCI=CCI(CCIperioda);

    Tento řádek přiřazuje naší proměnné myCCI hodnotu funkce CCI s příslušnou periodou. V našem konkrétním úvodním příkladu je tento řádek skoro nadbytečný, protože bychom mohli dále pracovat rovnou s funkcí CCI(CCIperioda), ve složitějších konstrukcí se však proměnným nevyhneme a je tak dobré si na jejich přítomnost zvyknout.

    if myCCI crosses below 0 then
    Sellshort ( "CCI_short" ) next bar at market ;

    Poslední řádky kódu obsahují samotnou logiku našeho jednoduchého ukázkového systému. Angličtináři si patrně dokáží význam odvodit na první pohled. Modře vytištěné jsou příkazu jazyka EasyLanguage, které je třeba ovládat, a jejichž význam a seznam lze nalézt v uživatelské příručce nebo v nápovědě programu.
    příkaz if znamená klasickou programovou logiku, nebo-li "jestli". Syntaxe if je následující:
    if podmínka then ** základní zápis podmínky;
    následují příkazy, které se mají vykonat při splnění podmínky.

    V našem konkrétním příkladě tedy podmínka znamená:
    pokud hodnota myCCI klesne pod hodnotu 0 (jinými slovy překříží nulovou linku) potom vykonat otevření krátké pozice s názvem "CCI short" následující bar za market.

    Podmínky mohou být samozřejmě výrazně košatější a lze je jednoduše řetězit klasickými operandy jako je AND a OR.
    Tj. chceme-li např. přidat další podmínky, že příkaz se má vykonat pouze v čase 9 - 15 hodin, můžeme zadat:

    if myCCI crosses below 0
    AND time>900 AND time Sellshort ( "CCI_short" ) next bar at market ;

    Co se základních příkazů pro otevírání pozic v TradeStation týče, potom:

    pro dlouhou pozici: otevřít=buy, uzavřít=sell
    pro krátkou pozici: otevřít=sellshort, uzavřít=buy to cover
    (pozor všimněte si, že příkaz sell neslouží k otevření krátké pozice, ale k uzavření dlouhé, a to je v pojetí EasyLanguage rozdíl!)

    Pokyny lze vykonávat za market, jako v našem příkladu, ale samozřejmě i pomocí dalších typů obchodních příkazů jako je limit nebo stop. Tomuto se budeme ale věnovat v některém dalším díle seriálu v rámci konkrétního příkladu.

    Ač to na první pohled může vypadat složitě, po určité praxi lze i s několika základními funkcemi a příkazy, kterým se budeme v tomto seriálu věnovat, poskládat řadu zajímavých systémů, které nemusí nutně fungovat jako plně automatizované, ale mohou i začínajícím uživatelům programu pomoci s testováním základních myšlenek, které lze posléze pilovat např. pomocí jemného diskréčního testování.

    V příštím díle seriálu si ukážeme, jak náš první ukázkový systém aplikovat do různých trhů a vyhodnocovat jeho výsledky.

    10.1.2007

    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 v alternativním fondu, který spravuje.


    Mohlo by vás dále zajímat

    Tradestation - současné přihlášení

    Dobrý den všem,
    poradíte někdo jak se přihlásit k účtu Tradestation současně na 2 pc? Na jednom k Live a na druhym k Demu. Vždy mně ted druhý login zruší předchozí přihlášení nezávisle na tom, zda se přihlašuji k Live nebo Demu. 
    Díky za radu

    Je mozne si vyskusat Tradestation na deme?

    Zdravim,

    Chcel by som sa spytat ci je mozne si vyskusat a zoznamit sa s Tradestation platformou na deme? Nasiel som na stranke TS informaciu o "Simulatore" ale nebol tam link aby som sa dozvedel viac.

    Ak ano , ako dlho toto demo trva?

    Dakujem za pomoc, skutocne som hladal ale nenasiel som to nikde na ich stranke.
    Jan

    Breakout první korekce - automatické testování v TradeStation

    Dnes navážu na svůj minulý článek „Studujeme intradenní systémy - breakout první korekce“ a prakticky vám ukážu, jak přibližně složité je vytvořit automatický test strategie, jehož výsledky byly v článku uvedeny.
    S Tomášem skoro na každém našem kurzu diskutujeme na téma, zda-li obchodní strategie programovat či nikoliv. Odpověď je vždy jednoznačná – pokud člověk s tradingem začíná, měl by se z naší zkušenosti programování čehokoliv vyhnout. Je totiž jen velmi nepatrná šance, že začátečník, který má o burze jen minimální povědomí, naprogramuje něco, co by mělo reálnou šanci „samo“ vydělávat peníze. Obzvláště to platí v oblasti intradenního obchodování. Jediné, co může začínajícího tradera posunout vpřed je studium grafů. A začátečníkům, kteří se snaží dívat na trhy skrz mechanické programování, bohužel navždy unikají ty nejzákladnější principy.
    Situace se pochopitelně mění u zkušených obchodníků. Pokud již rozumíte principům obchodování, máte dobře osahané své strategie (nejlépe skrz dlouhodobější živé obchodování), mohou vám různé programové nástroje zvýšit efektivitu nejrůznějšího testování nebo pomoci při nejrůznější automatizaci. Osobně používám programovatelné nástroje pro hledání tendencí nebo problematických období. Jednoduše řečeno jsem si vědom, že nejsem žádný programátor a nejsem schopen naprogramovat veškeré nuance obchodních přístupů, které používám. Většinou si tak vytvořím nějaký jednoduchý kód vystihující z principu určitou myšlenku a mohu chtít mechanicky otestovat její robustnost v čase předtím, než ji začnu jemně testovat ručním backtestem.
    Nástrojů, ve kterých lze testovat mechanické principy existuje obrovské množství. Poměrně dost tipů můžete získat ve starším článku „Jaký software pro backtesting a vytváření vlastních obchodních systémů a indikátorů?“. Osobně dnes používám programy TradeStation a Microsoft Excel.
    Krátce o TradeStation
    TradeStation je brokerská analytická platforma, kombinující skoro vše, co obchodník potřebuje pro technickou analýzu a mechanické programování nejrůznějších algoritmů. Podrobněji viz např. náš seriál „Pracujeme s TradeStation (1)“. Dnes samozřejmě existují i další podobná řešení, já osobně ale upřednostňuji právě TradeStation, kterou ke své spokojenosti používám již velmi dlouho. Mezi hlavní důvody patří snadná práce s daty (v podstatě historická data vůbec neřeším, protože se mi vždy načtou od brokera, byť např. ticková data jsou zde omezená pouze na 6 měsíců), velmi rozsáhlá uživatelská komunita (když potřebuji tak na diskuzním fóru vždy najdu řešení svého problému) a samozřejmě technické možnosti. Jenom pro dokreslení obrázku - platforma je zdarma klientům TradeStation (pokud děláte alespoň skutečné minimum obchodů) nebo se platí cca 100 dolarů měsíčně (plus je třeba vždy platit poplatky burzám za jejich data), komise jsou podobné jako u InteractiveBrokers. TradeStation má pochopitelně také své ALE – vývoj platformy je poměrně dost pomalý a např. až letos do platformy přibyla možnost obchodování rangebars (vteřinové grafy pořád chybí) a pro obchodníky z Evropy je nepříjemné, že prakticky příliš nelze obchodovat evropské trhy.
    Podoba kódu pro testování konceptu proražení první korekce
    Abyste si dokázali udělat představu o náročnosti programování v TradeStation, přikládám svůj kód pro diskutovanou strategii proražení první korekce. Upozorňuji, že nejsem programátor, ale uživatel. Je tak pravděpodobné, že věci jdou dělat efektivněji nebo jinak. Aby byl kód přehledný, uvádím jej jako obrázek, pokud by měl někdo zájem, napište do diskuze a vložím jej v textové podobě:

    Jak vidíte, kód není příliš dlouhý. Nejprve se definují používané proměnné a vstupní hodnoty.
    Následná zhruba třetina kódu sleduje, kolik uděláme obchodů za den. V této chvíli obchoduje strategie jediný obchod denně, počítání obchodů se děje přes proměnnou numTradesToday a jakmile má tato proměnná hodnotu 1, další obchody bude software „obchodovat“ až následující den.
    Teprve až posledních několik řádků obsahuje kód samotné strategie. Obchodujeme pouze v určité hodiny (zde nastaveno přes proměnné čas 9:33 až 10:00, což je lokální čas obchodování trhu TF, budete-li chtít obchodovat např. trh NQ je třeba nastavit lokální čas o hodinu nižší, neboť TF a NQ se obchodují na jiné burze, v jiném časovém pásmu) a sledujeme, zda-li trh překoná v daném čase první korekci. V takovém případě zkoušíme nastoupit stop příkazem nad high (v případě dlouhé pozice) poslední úsečky.
    Výstupy v tomto kódu definované nejsou, protože používám předpřipravené kódy dostupné v TradeStation. Strategie ani neřeší „premarket“, protože v TradeStation můžeme strategii automaticky aplikovat pouze na data v hlavní obchodní hodiny – v našem případě zvolím „ticker“ @TF.D.
    Shrnutí
    Článkem jsem chtěl ukázat, že pro určité typy situací může být efektivní použít programové prostředky a otestovat si robustnost myšlenky tímto způsobem. Pochopitelně, že vytvoření kódu např. v TradeStation vyžaduje určitou zkušenost, ale můžete mi věřit, že sám ovládám jen minimum příkazů, většinou kód buduji systémem pokus-omyl-diskuze, ale i tak je vytvoření podobného kódu otázka maximálně několika málo hodin práce (a zkušený programátor toto pochopitelně má hotové za pár minut). Zdůrazňuji, že je nutné rozlišovat situace, pro které má mechanické testování smysl dělat, a pro které nikoliv. Pokud však obchodník buduje jednoduché strategie, které plánuje obchodovat čistě mechanicky a tyto lze naprogramovat, tak by se o to myslím mohl pokusit. Jednak proto, že si poté velmi zkrátí čas s hrubým otestováním robustnosti přístupu (aplikováním na roky historie zpět, další trhy atd) a jednak proto, že může kód použít pro zautomatizování exekucí, protože proč nenechat jednoduchou strategii tohoto typu zobchodovat počítač, pokud je vše nadefinováno mechanicky?
    Na závěr připomenu, že sám jsem diskréční typ obchodníka a mechanické přístupy testování používám většinou na vyšší timeframe (většinou denní), navíc za účelem sledování různých základních tendencí a pravděpodobností, nikoliv pro budování AOS. V rámci intradenního obchodování neobchoduji přístup, který by bylo možné naprogramovat, ale na druhou stranu se určitě nezdráhám použít nejvhodnější nástroje v případech, které jsou k tomu vhodné.
×
×
  • Vytvořit...