Jde to i bez dokupování?

Na tomto blogu jeho admin uveřejnil strategii s 90% úspěšností, která je podle mého názoru velmi povedená. V některých aspektech mi ovšem nevyhovuje a proto jsem se rozhodl si s ní trochu “pohrát”. Dospěl jsem k některým podle mě zajímavým výsledkům, o které se tady podělím.

Na strategii se mi líbí velmi rovnoměrná equity křivka, jednoduchá pravidla pro otevření a uzavření pozice a skutečnost, že se obchoduje jenom v okamžiku close (vysoká likvidita) a pracuje pouze s close cenami (a tedy výsledky backtestování jsou velmi spolehlivé). Co mi naopak vadí, je agresivní dokupování do ztrácející pozice, což trochu zavání martingale přístupem. Jinak ovšem 90% úspěšnost těžko dosáhnout. Druhá věc, která mi nevyhovuje, je spíše technická. Všechny svoje dosavadní strategie mám postavené tak, že již v okamžiku otevření pozice vím přesně, kdy pozici uzavřu a mohu tedy spolu s příkazem nákupu odeslat rovnou i skupinu příkazů k prodeji – typicky stop loss, profit target nebo prodej k určitému datu (Time-based exit). Výhoda je, že i když nebudu schopen další dny spustit AOS např. kvůli technickým problémům nebo osobním důvodům, otevřené pozice se i přesto uzavřou správně.

V rámci úprav strategie jsem rovněž chtěl ověřit, do jaké míry trpí výsledky backtestování na survivorship bias. Rovněž mě zajímalo, jak si strategie povede na jiné skupině akcií než SP100 – například NASDAQ 100 nebo DOW 30.

Strategie jsem testoval na historických datech v období 1.1.2006 až 28.11.2014. Použil jsem nejprve koš akcií SP 100 k datu 1.1.2014, poté jsem backtestoval variantu, kdy se koš akcií průběžně aktualizuje vždy k 1. lednu nového roku. Tj. v daném roce se obchoduje pouze s akciemi, které k 1. lednu patřily do příslušného koše. Složení koše jsem získal ze serveru DayTradingBias v sekci “Other Data”. Pro dosud obchodované akcie jsem použil historická data z Yahoo adjustované o splity a dividendy. Pro akcie vyřazené z obchodování jsem získal data ze stránek Quantopian. Data vyřazení akcií z obchodování lze kontrolovat na stránkách Marketocracy.

Strategie jsem testoval pomocí programu AmiBroker verze 5.90. Zdrojový kód pro testování a detailní výsledky backtestů je možné stáhnout zde. Výsledky backtestů jsou uváděny bez použití páky, bez uvažování poplatků, skluzu, avšak s každodenním reinvestováním zisků. U jednotlivých výsledků je uveden v tabulce průměrný roční zisk (CAR) , maximální draw down (MDD) a graf equity křivky.

Survivorship bias

Nejprve porovnám výsledky strategie s 90% úspěšností obchodů na koši akcii SP 100 s pevným složením k datu 1.1.2014 a s ročně upravovaným složením koše:

KošCAR [%]MDD [%]Equity křivka
SP 100 k 1.1.20141613hnědá
SP 100 ročně upravovaný *)1314černá

Pozn: Tyto výsledky použijeme v dalších testech jako benchmark a budou v grafech reprezenotvány vždy černou křivkou.

Obr1

Z tabulky a porovnání průběhů equity je vidět, že survivorship bias má na výsledky strategie určitý vliv. Výraznější rozdíly jsou vidět před rokem 2009, což je logické, protože během krize 2008 byly změny ve složení koše největší.

Koše NASDAQ 100 a DOW 30

Dále porovnám, jak se bude strategie chovat na jiných koších a to konkrétně NASDAQ 100 a DOW 30. V obou případech opět s ročně upravovaným složením koše.

KošCAR [%]MDD [%]Equity křivka
SP100 ročně upravovaný1314černá
NASDAQ 100 ročně upravovaný1324zelená
DOW 30 ročně upravovaný1010modrá

Obr2

Je patrné, že na koši DOW 30 generuje strategie menší zisk. Počet akcií v koši je podstatně menší a tím i počet obchodů. Na druhou stranu maximální drawdown je rovněž menší, takže vyššího zisku by šlo dosáhnout větší pákou. Na koši NASDAQ 100 je průměrný roční zisk srovnatelný, ale drawdowny jsou podstatně větší v porovnání s košem SP 100. Vysvětlení se hledá obtížněji. Podle mého názoru je to dáno rozdílnou metodikou výběru akcií do daného indexu. Zatímco u NASDAQ 100 se přihlíží podstatě pouze k velikosti kapitalizace, u S&P 100 se bere v úvahu mnoho dalších faktorů jako poslední hospodářské výsledky, podíl veřejně obchodovaných akcií a další. Takto vybrané firmy jsou pak pravděpodobně dlouhodobě stabilnější.

Modifikace strategie

V poslední fázi se pokusím modifikovat strategii, tak aby se nedokupovalo do ztrátové pozice a aby šlo spolu s příkazem k nákupu rovnou odeslat příkaz nebo OCA skupinu příkazů k prodeji.

Úpravou původní strategie s 90% úspěšností vznikly dvě strategie. Strategie_A, která nedokupuje a zachovává původní logiku uzavření pozice, pokud je CLOSE>MA(5). Další úpravou vznikla Strategie_B, která pro uzavření pozice používá Profit target v kombinaci s Time-based exit.

Popis Strategie_A

  • Obchodují se pouze akcie z koše S&P 100
  • Obchoduje se pouze 1 x denně v závěru seance (tedy za Market-On-Close)
  • Systém je long-only
  • Kupují se pouze akcie, u nichž je cena nad 200-denním průměrem
  • Kupují se pouze akcie, u nichž RSI(2) < 10
  • Pozice se neškálují. Každý den je otevřena maximálně jedna pozice s 1/3 kapitálu. V případě, že je možné otevřít více pozic, otevře se ta s nejnižším RSI(2).
  • Žádné STOP-LOSSY.
  • Výstup na EOD nastává v momentě, kdy cena akcie je větší než pětidenní klouzavý průměr.

Popis Strategie_B

  • Obchodují se pouze akcie z koše S&P 100
  • Nakupuje se pouze 1 x denně v závěru seance (tedy za Market-On-Close)
  • Systém je long-only
  • Kupují se pouze akcie, u nichž je cena nad 200-denním průměrem
  • Kupují se pouze akcie, u nichž RSI(2) < 10
  • Pozice se neškálují. Každý den je otevřena maximálně jedna pozice s 1/3 kapitálu. V případě, že je možné otevřít více pozic, otevře se ta s nejnižším RSI(2)
  • Žádné STOP-LOSSY
  • Pozice se uzavírá při profitu 1% (intradenně) nebo nejpozději 4. den při CLOSE

Je patrné, že Strategie_A splňuje v úvodu vytyčený cíl pouze částečně. Sice nepracuje s agresivním dokupováním do ztrátové pozice, ale v okamžiku nákupu nelze poslat soubor pokynů pro prodej. Denně je třeba sledovat pětidenní klouzavý průměr CLOSE cen a teprve podle jeho hodnoty dát příkaz k prodeji. To řeší až Strategie_B, kterou lze obchodovat tak, že spolu s příkazem k nákupu lze rovnou odeslat navázané příkazy k prodeji: profit-target a market-on-close k určitému datu sdružené ve skupině one-cancels-all. Výsledky obou strategií a porovnání s původní strategií je v následující tabulce a grafu. Výsledky jsou pro obchodování ročně upravovaného koše akcií SP 100.

StrategieCAR [%]MDD [%]Equity křivka
Strategie 90% (původní)1314černá
Strategie_A2014červená
Strategie_B1417oranžová

Obr3

Z výsledků je vidět, že Strategie_A má průměrný roční zisk vyšší než původní strategie při stejném maximálním drawdownu. Poměr ziskových obchodů klesnul na 70%. Strategie_B má průměrný roční zisk srovnatelný s původní strategií, maximální drawdown je vyšší. Poměr ziskových obchodů je 76%.

Závěr

Při backtestování strategie s 90% úspěšností při použití koše akcií s časově neměnným složením jsou výsledky mírně nadhodnoceny. Avšak i výsledky při použití ročně aktualizovaného koše (tj. survivorship bias free) jsou stále dost dobré. Strategie funguje dobře koši akcií SP 100 a DOW 30, na koši akcií NASDAQ 100 dosahuje sice strategie pozitivního zhodnocení, ale výkyvy resp. drawdowny jsou značné. U strategie lze úspěšně modifikovat vstupní podmínky tak, že funguje bez agresivního dokupování do ztrátové pozice. Pokud připustíme určité zhoršení výkonnosti, lze uvažovat i o modifikaci výstupních podmínek do tvaru profit-target / time based exit, které lze odeslat do systému rovnou v okamžiku otevření pozice.

Poznámka k testování v AmiBrokeru

Před testováním je třeba v nejprve do AmiBrokeru nahrát všechny symboly, které jsou nebo byly v letech 2006-2014 součástí koše SP 100, NASDAQ 100 a DOW 30. Seznam těchto symbolů je v souboru All_Symbols_List.txt v připojeném archivu. Při testování pak strategie sama vybere pouze ty symboly, které byly v daném roce součástí koše. Zajišťují to funkce InSP100, InNASDAQ100, InDOW30, které jsou deklarovány v souboru IndexComponents.afl. Tento soubor je třeba nakopírovat do adresáře \AmiBroker\Formulas\Include\

Příspěvek byl publikován v rubrice Nezařazené. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

41 komentářů u Jde to i bez dokupování?

  1. admin napsal:

    Především, Honzo, díky za článek. Je vidět, že se můžeme vzájemně na blogu obohatit i bez toho, abychom navštěvovali drahé kurzy ;-))

    Pár postřehů:
    1) Martingale to sice připomíná, ale my máme limitovaný počet dokupování, takže jak píšeš – vyšší úspěšnost za cenu nižšího průměrného zisku, no…
    2) Bach na to, IB neumí OCA objednávky pro CFD: https://www.interactivebrokers.com/en/?f=%2Fen%2Ftrading%2Forders%2Foca.php
    3) Pokud rozdělíš kapitál jen na 3 díly, tak jsi od začátku v trhu s více penězi, než když použiješ dílů 20. Co mě ale fascinuje je fakt, že se tím nezvýší Max. DD. Budu to muset skouknout.

  2. Ondrej napsal:

    Pripojuji se s diky za clanek, tesim se az si s tim poradne pohraju! Klobouk dolu!

  3. Honza napsal:

    Super článek se super tématem, které budu v nejbližší budoucnosti řešit.. Díky!

  4. DsL napsal:

    Díky za zveřejnění článku i s užitečnými odkazy.

  5. Lovec napsal:

    Ahoj,

    opravdu super článek, dávám za něj palec nahoru :).

    Jen bych možná doplnil k tomu NASDAQ a k drawdownu.

    Nasdaq je technologický index, když jej porovnáš i na D1, tak zjistíš, že se jedná o mnohem volatilnější trh již v základu. Zkrátka technologie. Spíše by mne zajímalo jak by to jelo např. na SP400 nebo SP600, nebo i SP500 :). A taky jak by se Nasdaq choval při pohledu od roku 1995 např., zda by se dostal z propadu na přelomu tisíciletí.

    U těch DD jsem to zde již jednou zmiňoval – ale vždy je dobré uvažovat DD na úrovni minimálně roku 1987, kdy trh spadl přes noc o 23% a nebyla zkrátka šance zareagovat. Ale to jen taková vsuvka.

    Jinak opravdu děkuji za článek, jsi rozhodně na správné cestě :)!

    • admin napsal:

      Max. DD po stopadesáté páté ;-)

      Takhle nějak to bylo: http://en.wikipedia.org/wiki/Black_Monday_%281987%29

      Já si snad seženu data z tý doby a otestuju to … ;-)))))

      • Lovec napsal:

        Já na rizika kladu velký důraz :). Ale jinak mít data a udělat backtest by bylo určitě super. Já mám data od roku 1990, ty blbý tři roky mne chybí :D

        • labros napsal:

          S backtestem by to bylo určitě zajímavé, jenom mít ta data. Jenom připomínám, že v reakci na Black Monday 1987 byly zavedeny tzv. „Market-wide circuit breakers“, které zastaví celou burzu na 15 minut, pokud SP500 spadne o 7% proti včerejšímu Close, na 60 minut pokud spadne o 13% a do konce seance, pokud spadne o 20%. Takže by se to zase chovalo jinak, než tenkrát. Ale nikdo neví jestli líp, nebo hůř…

        • marcus napsal:

          Zohnal som data pre SVB 2006, ale nie pre vsetky tickery – cca polovicu.
          Otestoval som to a vysledok je Max DD 99,37 pri trojnasobnej pake pri zapociteani ID MAE. Nasledne sa to vyhrabalo za dva dni o cca 30% spat, takze za obdobie 1981-1990 CAR 61% je fajn. :-)
          Ale ako uvadza labros vzhladom na zavedene pravidla sa trh chova inak. Uz aj oproti 90-tym rokom, ked bolo pekne eldorado z pohladu ziskov v niektorych rokoch, je to ine – Max DD 63% paka 3 nasledne 23% spat.

          • marcus napsal:

            ten DD 99,37 je pre rok 87 :-)

          • admin napsal:

            Co je „SVB 2006“?

            • marcus napsal:

              sorry – Survivorship bias

              • admin napsal:

                mno, díky za snahu, ale logicky – pokud máš jen polovinu tickerů, tak jsou výsledky úplně mimo…

                • marcus napsal:

                  Mas pravdu, ale „uplne“ mimo byt nemusia, takze par detailov:
                  1. ak by boli otvorene ine pozicie pred prepadom – mohlo to dopadnut inak
                  2. Na vsetkych akciach doslo k vyraznemu prepadu
                  3. Akcie, ktore sposobili najvacsi prepad mali pri vstupe RSI 0,28 a 0,26, co by mohla, ale nemusela prekonat ina akcia
                  4. Nepresnost alebo ako si to nazval uplne mimo :-) sposobuje aj SVB 2006
                  Nedaval som to tu ako smerodajne, ale ako nieco pre utvorenie obrazu, ze by to malo/mohlo prezit rok 87 pri trojnasobnej pake.

                  • admin napsal:

                    „Otestoval som to a vysledok je Max DD 99,37 pri trojnasobnej pake pri zapociteani ID MAE“ – mohl bys mi říct, které akcie to byly? Protože tohle mi přijde úplně mimo, opravdu. Dej třeba někam graf a výpočty, alespoň ten rok 1987, napiš v čem jsi to počítal, jaké jsi měl složení indexu a dej nějakou tabulku.

                    • marcus napsal:

                      overil som to teraz aj v Amibroker podla labrosovho kodu a vysledok MaxSysDD – 98,56. Rozdiel je z toho, ze vo svojom kode som pouzil RSI<13.
                      Obchody a grafy davam na http://www.traders-forum.eu/

                  • labros napsal:

                    Ahoj. Díky za ověření chování strategie v roce 1987. Stáhnul jsem z trades fórum výsledky Tvých backtestů, ale chybí tam grafy, seznam obchodovaných symbolů a další věci (AmiBroker to exportuje nějak divně do .mht). Pokud by to šlo, napiš mi, které symboly jsi použil pro testování a kde jsi vzal data od de-listed symbolů. Zkusím testy zopakovat a dát to sem formou krátkého článku. Piš prosím na adresu: labros(zavináč)post.cz

                    • marcus napsal:

                      Ahoj. Mal som len Survivorship bias data podla 2006. De-listed symboly som nemal. Bolo to nieco okolo 45 symbolov a data som mal od znameho. Ked som ich porovnaval, tak boli skoro uplne identicke s adj datami z yahoo. Ja som si len chcel orientacne otestovat, ci by to prezilo rok 87. Ak chces mozem pridat tie .mht, ale na clanok to z mojich vysledkov nie je :-)

                • foglik napsal:

                  Pokud se jedná o robustní systém, tak by nemělo být na závadu, že některé tickery chybí (i když polovina je hodně – to chce ověřit i s druhou půlkou). Stejně jako u „devadesátky“ např. doufám, že si to pamatuju dobře, ale někdo nemá v koši BRK-B nebo naopak aktualizuje koš se skluzem;)

                  Mě by spíš zajímalo, když byl DD 99,37 % – pokud to čtu správně, pak na účtu zbylo 0,63 % (chápu že to bylo při páce 3:1) – jak dlouho se to hrabalo aspoň na nulu.

                  • marcus napsal:

                    Foglik Max Sys DD zahrnuje aj intradenne rozpatie a teda MAE. Ako som pisal za dva dni sa to vyhrabalo o 30% takze to nebolo az take kriticke. Mozem sa pozriet ako dlho mu to trvalo vyhrabat sa, ale neulozil som vysledky a teraz mi na servery bezia ine backtesty, takze neskor. Inak test som robil na 90-tke.

                    • foglik napsal:

                      Teďkom nevím jestli tomu dobře rozumím. Takže ten DD není z uzavřených, ale otevřených pozic? Tím bych chápal, že jeden den – 99,xx %, druhý den -69,xx % – možná jsem to někde nahoře přehlédl. V tom případě je potřeba posoudit, jestli to ustojíš bez margin callu.

                    • marcus napsal:

                      2foglik – margin call by tam bol. Max Sys DD sa rata aj z otvorenych pozicii.

  6. biker napsal:

    Neuvažoval jsi, že by jsi strategii 90% nahradil strategií A? Nebo alespoň, že by jsi ji obchodoval současně se strategií 90%, když vykazuje lepší výsledky při stejném DD?

    • foglik napsal:

      Obchodovat stejnou nebo podobnou strategii současně, pokud z původní strategie nepřesuneš např. 50 % kapitálu na podobnou strategii, není moc diverzifikační.

    • labros napsal:

      Neobchoduji strategii 90% ani její modifikaci A/B. Pokud bych se rozhodoval, tak bych volil strategii A. Obchoduji ale něco úplně jiného, o dost jednoduššího, takže zatím neuvažuji o žádné uvedené variantě. Byla to pro mě spíše mentální rozcvička a seznámení s AmiBrokerem.

  7. Ondrej napsal:

    Rad bych se autora clanku zeptal na par drobnosti – bude-li ochoten. Predem dekuji za kontakt na eggoide – seznam.cz

    • foglik napsal:

      A proč se nezeptáš tady – proto to bylo zveřejněno.

    • admin napsal:

      Taky se přimlouvám za položení dotazu sem. Obohatíš tím všechny a ukážeš, že nejen pomoc očekáváš, ale jseš ji i schopen poskytnout ostatním. To je ta komunita ;-)

      • Ondrej napsal:

        Omlouvám se, ale předpokládal jsem že můj dotaz je příliš specifický a že nebude čtenáře zajímat. Ale ok, nemám s tím problém. Tedy:

        Nedaří se mi správně rozběhnout backtest v Amibrokeru na Strategie_90, tak jak byla ke stažení u článku. Tituly mám stažené a aktualizované, backtest určitě bere jen z koše SP100, ale když to pustím např. od 1.1.2015 do dnešního dne, tak systém koupil správně jen 4 tituly, zbytek je nesmysl nebo opožděně. Nepřišel jsem na to, co bych mohl mít v Amibrokeru nastavené špatně.

        FDX – 2.1
        MA – 5.1
        GS – 16.1 – OK
        V – 28.1
        RTN – 30.1 – OK
        PG – 27.1
        BMY – 2.2
        SO – 4.2 – OK
        AEP – 6.2
        MRK 19.2 – OK

        Takže mě zajímá jestli autor, nebo někdo z čtenářů neřešil stejný problém?
        Děkuji

        • foglik napsal:

          Amibroker neznám – BT dělám (když je dělám:)) v excelu. Ale protože jsem to vyprovokoval já, tak napíšu, jak bych hledal chybu:
          1.) zkontrolovat Close ceny a jestli jich mám dost
          2.) zkontrolovat výpočty – jestli nemám překlep, desetinnou čárku jinde atd.
          3.) debug, debug, debug – vypiš si hodnoty a zkontroluj jestli se počítají správně proti ručním hodnotám

          Chybu bych viděl v RSI2 a jeho výpočtu.

          PS: Tady ti může odpovědět více lidí, než jeden nejistý na mailu;)

          • Ondrej napsal:

            Diky, ale prave proto jsem se obracel na autora:) Predpokladal jsem ze to neni uplne nejisty clovek na mailu. Nicmene budu laborovat dal.

            • labros napsal:

              Ahoj. Když jsem strategii programoval, narazil jsem na stejný problém. V některých obdobích teoretické obchody souhlasily přesně se zde publikovanými obchody, ale v některých obdobích to bylo úplně rozdílné. Problém je nejčastěji právě ve výpočtu RSI(2). Například: 19.2.2015 vidí AmiBroker podle CLOSE cen tři kandidáty na nákup MRK (RSI=4,1) T (RSI=6,7) a WMT(RSI=7,4). Nejnižší RSI má MRK, takže AmiBroker „kupuje“ MRK, ale minutu před close bylo pořadí jiné: T a WMT poslední minutu rostly, zatímco MRK klesalo, takže je dost pravděpodobné, že se MRK dosatalo na „první příčku“ právě až poslední minutu, ale v 15:59 mělo WMT skutečně nejnižší RSI(2). Podobně 9.2.2015 byly dva kandidáti FB (RSI=9,5) a ALL (RSI=9,7). AmiBroker „koupil“ FB, ale minutu před close bylo pořadí opačné. Tak by se dalo pokračovat dále. Další potíž je, když má AmiBroker „nakoupené“ nějaké akcie a je plně zainvestováno, ale ty skutečně máš z výše jmenovaného důvodu koupené něco jiného. To něco jiného prodáš, protože CLOSE>MA(5) a můžeš kupovat dál. Ale akcie, které má „nakoupené“ AmiBroker ještě mají CLOSE<MA(5), takže je "drží" dál a nekupuje jiné. Po určité době se to může teorie a praxe úplně rozhodit.

  8. miroj napsal:

    Zaujímalo by ma, či tu niekto seriózne využíva Quantopian – nie len na hranie a backtesty, ale hlavne či niekto cez Quantopian aj live obchoduje?

  9. Honza napsal:

    Ahoj. Dotaz pro autora: U strategie se nakupuje pouze 1x za den a to jeden titul. V případě, že druhý den splňuje podmínky na nákup jiný titul, tak kupujeme za dalších 1/3 kapitálu? Díky, Honza.

  10. ZlyTrader napsal:

    V porovnání strategii mi chybí údaj o maximálním využitém marginu. Algo „devadesátka“ mi příjde při market crashích na margin calls citlivé, závisí to dost zrovna na koupených symbolech, a margin call pak vyjde hodně draho. U Strategie A mám max margin 55%, kdežto orig. „devadesátka“ má max margin 43%. Srovnatelnější by byla Strategie A při 1/4 rozdělení (max margin 47%), ale pak zase má oproti „devadesátce“ P/L jen o 10% lepší. Vše testováno jen na 86 aktuálních symbolech (tj. neřešil jsem survivorship bias). Jinak reinvestování zisků mi příjde pro porovnávání strategií zavádějící, pozdější trades pak závisí víc na P/L předchozích trades než na vlastní P/L

    • admin napsal:

      Matematicky vzato máš samozřejmě pravdu. S tím reinvestováním to není fér, nemluvě o tom, že je pak velký rozdíl, jestli člověk začne v nejlepším období, v nejhorším období, nebo někde mezi. Jinak s tím margin callem – já všude zdůrazňuju, že 70000 USD, co na to mám vyhrazeno je jen malá část portfolia, ale pokud by na to někdo exponoval celý účet a přehnal to s pákou, tak si musí dát pozor.

  11. Honza napsal:

    Ahoj kluci, dokázal by mi někdo prosím do tohoto kódu zakomponovat pravidlo na max. nákup 1x/den? Kód jsem použil od zajíce.

    S programováním si zrovna moc netykám.
    Díky moc!! Honza

    #Region „Using statements“
    Imports System.Drawing
    Imports System.Collections.Generic
    Imports RightEdge.Common
    Imports RightEdge.Common.ChartObjects
    Imports RightEdge.Indicators
    Imports System.Linq
    Imports System
    Imports System.Net.Mail
    Imports Microsoft.VisualBasic

    #End Region

    Public Class MySystem
    Inherits MySystemBase
    Public Overrides Sub Startup()
    Me.PositionManager.MaxOpenPositions = 3
    SystemData.CreateTicksFromBars = True
    AddHandler SystemData.BarClosing, AddressOf BarClosing
    SystemData.EnableTradeOnClose = True
    End Sub

    Public Sub BarClosing()
    MyBase.NewBar()
    Dim orderedSymbolScripts As List(Of MySymbolScript) = SymbolScripts.OrderBy(Function(ss) ss.RankValue).ToList()
    For Each ss As MySymbolScript In orderedSymbolScripts
    ss.Trade()
    Next
    End Sub
    End Class

    Public Class MySymbolScript
    Inherits MySymbolScriptBase
    Public Property RankValue() As Double
    Get
    Return m_RankValue
    End Get
    Private Set(ByVal value As Double)
    m_RankValue = value
    End Set
    End Property
    Private m_RankValue As Double
    Public Property Rank() As Integer
    Get
    Return m_Rank
    End Get
    Set(ByVal value As Integer)
    m_Rank = value
    End Set
    End Property
    Private m_Rank As Integer
    Private myRSI2 As RelativeStrength
    Private mySMA200 As SMA
    Private mySMA5 As SMA
    Private myVolumeAvg As VolumeMA

    Public Overrides Sub Startup()
    myRSI2 = New RelativeStrength(2, Close)
    myRSI2.ChartSettings.Color = Color.DarkOrange
    mySMA200 = New SMA(200, Close)
    mySMA200.ChartSettings.Color = Color.Red
    mySMA5 = New SMA(5, Close)
    mySMA5.ChartSettings.Color = Color.Blue
    End Sub
    Public Overrides Sub NewBar()
    If Double.IsNaN(myRSI2.Current) Then
    RankValue = 0
    Else
    RankValue = Math.Abs(myRSI2.Current)
    End If
    End Sub

    Public Sub Trade()
    If Bars.Count < 3 Then
    Return
    End If
    If Bars.Current.BarStartTime.DayOfWeek = DayOfWeek.Saturday Then Exit Sub
    If Bars.Current.BarStartTime.DayOfWeek = DayOfWeek.Sunday Then Exit Sub
    If OpenPositions.Count = 0 Then
    If mySMA200.Current < Close.Current Then
    If myRSI2.Current mySMA5.Current Then ‚
    myposition.CloseAtMarket()
    End If
    End If
    End Sub
    End Class

Napsat komentář

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