Strategie “90%”–servisní info

Jen pár postřehů ke strategii “90%”, protože se nám k tomu v diskusi zapojuje hodně lidí (což je samozřejmě dobře).

Riziko “survivorship bias”

(pro ty, kdo se s tímto termínem setkávají poprvé doporučuji článek na Wikipediii zde). V praxi jde o to, že složení koše S&P100 se v historii měnilo, a proto když se dělají backtesty, mělo by se zohlednit složení akciového koše ke dni, v němž se skutečně obchodovalo. Jinak se může stát, že “zapomeneme” koupit určité akcie jen proto, že je momentálně už nemáme v “koši”, ale správně tam měly být. Nebo, opačně, koupíme akcie, které v době nákupu v koši neměly být (byly zařazeny později nebo vyřazeny dříve).

Je třeba si uvědomit, že toto opomenutí – jakkoliv je samozřejmě formálně nesprávné – mohlo vést jak k zisku, tak i ke ztrátě; bohužel není v silách většiny z nás otestovat to úplně poctivě. Například může dojít k situaci, kdy akcie je vyřazena z indexu uprostřed obchodu, nebo je naopak zařazena do indexu v době, kdy měl být obchod již otevřen a tak dále.

Co s tím? Našel jsem stránky ETF OEF, kde by složení koše mělo odpovídat indexu S&P100. Výhoda je, že na stránkách lze sledovat historické složení ETF a (věřme, že tím pádem i) indexu. Naštěstí výsledky se tolik neliší, pokud se nějaká akcie vynechala nebo přidala, strategie je v tomto docela robustní.

Jak je to s tím dokupováním

V diskusích se objevilo několik variant “dokupování”. “Správná” (z hlediska původního zadání) je následující:

  1. Pokud je cena akcie XYZ nad SMA200 a RSI2 je nejnižší z celého koše, a tato akcie ještě není nakoupena, koupí se první část (v hodnotě 1/20 z celkového kapitálu, neboli 5%) za MOC cenu na konci obchodní seance (nebo co nejblíže této ceně, protože nakupování za EOD má technická úskalí).
  2. Pokud je EOD cena akcie XYZ v některém z dalších dnů (tedy nikoli nutně druhý den) nižší než byla cena z bodu 1, dokoupí se další akcie v hodnotě 2/20 kapitálu (neboli 10%). Tím pochopitelně dojde ke zprůměrování, zředění ceny.
  3. Pokud byla EOD cena akcie XYZ v některém z dalších dnů nižší než cena z bodu 2, dokoupí se další akcie v hodnotě 3/20 kapitálu (neboli 15%). (dokupovat za cenu z bodu 1 nebo dokupovat za průměrnou cenu z bodů 1 a 2 není součást původní strategie).
  4. A konečně, pokud je cena akcie XYZ v některém z dalších dnů nižší než cena z bodu 3, dokoupí se další akcie v hodnotě 4/20 kapitálu (neboli 20%). (dokupovat za cenu z bodu 1 nebo dokupovat za cenu z bodu 2 nebo dokupovat za průměrnou cenu z bodů 1 a 2 a 3 není součást původní strategie).

Stručně a česky – každý dokup je za nižší cenu než předchozí dokup.

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

29 komentářů u Strategie “90%”–servisní info

  1. msk napsal:

    Rad by som sa opytal na backtest tohoto systemu v RightEdge. Snazil som sa pochopit ako RE pracuje s metodami BarClosing a NewBar. Podla debugingu je BarClosing volany na urovni systemu pred volanim NewBar na urovni Symbolu. Vzhladom k tomu, ze sa RankValue pocita v NewBar a obchoduje sa v BarClosing na zaklade zoradenia podla RankValue sa defacto obchoduje podla RSI(2) z predchadzajuceho dna.
    Podla popisu strategie som predpokladal, ze RSI(2) bude pocitane pre aktualny den.

    • admin napsal:

      Mělo by se brát vždy aktuální RSI2 pro daný den, tedy pro den, kdy se zavírá a (případně) nakupuje či prodává. RightEdge, pokud si vzpomínám má metodu BarClosing skutečně na úrovni systému, ALE tato metoda volá SymbolScript.BarClosing na úrovni symbolu, tudíž by to mělo být v pořádku.

      ...
      'pro kazdy z nich spustime metodu BarClosing
      For Each SymbolScript As MySymbolScript In orderedSymbolScripts
      SymbolScript.BarClosing()
      Next
      ...

      • msk napsal:

        No prave ze BarClosing na urovni systemu je zavolany ako prvy. V ramci toho je preiterovane cez vsetky symboly na ktorych je volana metoda barclosing. Az ten cyklus dobehne a skonci volanie barclosing na urovni systemu je postupne volany newbar pre vsetky symboly, ktory pocita rank value. Preto mi z toho vychadza, ze pracujem zo starym RSI.
        Ja si chcem system napisat stejne sam, len som uz par rokov neprogramoval, takze sa do toho musim postupne dostat. RE mi v tom celkom pomaha :)

        • admin napsal:

          Dobře, a co Ti brání v RE napsat někam OutputMessage a ověřit si to v praxi?

          • msk napsal:

            Ja som si to overil cez debugger, len som si chcel overit ci to je zamer alebo omyl :) myslim to pouzivanie stareho RSI…

            • admin napsal:

              Ověřil sis to evidentně špatně, protože mě to funguje jak má. Vyzkoušej prosím:

              1) strategii s jediným tickerem SPY
              2) obchoduj od 1.7.2014
              3) data dej třeba od 1.1.2013, ať jsou k dispozici data pro výpočet SMA
              4) a dej vědět, kdy se Ti otevřel obchod. Měl by se Ti otevřít 29.7.2014, protože TEHDY bylo RSI2 pod 10. Den předtím bylo RSI2 nad 30, tudíž kdyby používal staré RSI2, tak obchod neotevře.

              Obchod se otevřel, tudíž strategie musela použít správné RSI2. Anebo máš jiný kód pro testování než je ten můj.

    • admin napsal:

      Jinak ten RightEdge moc dobrý soft není, a hlavně ho už nevyvíjejí. Což je škoda. Nevíte někdo o něčem jiné, co by umělo obchodovat více akcií najednou (tzn. koš akcií) a zároveň by se v tom dalo psát pod VB.NETem?

  2. Djm napsal:

    Taky by me takovy soft zajimal. Je toho spousta, ale zatim jsem na backtesty kose akcii nevidel nic pouzitelnejsiho nez je RE, ktere uz je zastarale. A psat si na backtesty vlastni prostredi – to je prostě anabáze.

    • admin napsal:

      Já se dokonce obávám, že ten, kdo napíše software na testování koše akcií podobný, jako je RE, ale bez jeho nevýhod, může mít do konce života vystaráno. Co se mi nelíbí na RE:

      * směšná až žádná podpora
      * všechny mřížky „natvrdo“
      * ve výsledcích to neumí řadit
      * nulová podpora exportu do Excelu
      * Tragicky zastaralé GUI
      * Nemají genetické algoritmy
      * Není komunita

      Vše ostatní je relativně ok, například:
      * Umí to koš akcií
      * Správně se počítají komise
      * Využije vícejádrové procesory na bactest
      * Umí akcie, futky, opce, forex
      * Lze použít data z IB, YAGHOO, GOOGLE, IQFeed či napsat vlastní konektor
      * Technická analýza je ok
      * Stabilita je taky relativně ok

      • Djm napsal:

        Ja si proste myslim, ze vyvojari RE zacli dobre, presne ty vyhody jak pises to ma. Libi se mi ta otevrenost/modularita, ze si vpodstate muzes priojit dalsi konektory podle libosti.. Ale na tom projektu bylo asi neco spatne a tak dalsi vyvoj odstavili k ledu. Je to videt nekde na jejich webu, jak jim tam lidi pisou namety na vylepseni, ale oni uz ani nereaguji. Nevim, co za tim vezi. Mozna spatna obchodni strategie, malo propagace, tim padem malo financi na vyvoj, netusim. Pritom je to sikovny program, zadne slozitosti atd. Ale on se sam od sebe asi nezpropaguje. Ja jsem se o RE dozvedel poprve od tebe. Tak je mozne, ze dojeli na to, ze se o nich moc nevi.
        Napsat neco podobneho mozne je, ale po nocich se to spichnout neda.

      • Ondrej napsal:

        Ona s tim souvisi jeste jedna zasadni vec. Proc je tak slozite sehnat soft pro backtesting nebo primo jednoduchy designer AOS nepojitelny na API IB nebo TWS? Kdyz neco existuje, tak je to pomerne drahe, nebo to pulku veci neumi. Proto se snazim s vyvojari ted udelat neco trosku univerzalnejsiho, v cem by i nevyvojar dokazal AOS navrhnout a otestovat.
        Za sebe musim rict ze me komercni produkty, ktere pry umi automatizovany trading, vetsinou odradily uz na uvodni strance. Anebo je poptavka opravdu tak velika ze jsou zacinajici traderi donuceni platit stovky $ mesicne za pronajem SW?
        Je to dane pouze tim, ze mali traderi/vyvojari , kteri si vyvinou vlastni system, nemaji duvod dal prodavat/pronajimat jejich aplikaci protoze jim vyrazne vic vydela vlastni trading?

        • misch napsal:

          Těžko říct, ale pronájem SW nebo systému taky znamená dělat mu podporu. A řešit problémy uživatelů. A úplně chápu lidi kteří se do tohoto závazku zrovna dvakrát nehrnou, i když by jim to mohlo vynášet.

        • admin napsal:

          Pokud to „něco univerzálnějšího“ bude k dispozici, tak se hlásím, minimálně jako tester ;-)

          K tomu vývoji: Řekněme, že to bude trvat 1000 hodin a že hodina Tě bude stát 1500,- Kč + DPH. (Takhle to máme u mě ve firmě.) Tudíž, budeš mít super produkt, ale jsi 1 800 000 Kč v mínusu. To už kdekoho vyděsí. Tak se rozhodneš to pronajímat za 4000 Kč měsíčně, a doufat, že k tomu přemluvíš 100 lidí, abys měl aspoň 400 000 měsíčně cash flow. Po třech měsících zjistíš, že Ti zbylo 25 platících zákazníků a budeš se modlit, aby ses dostal za 5 let aspoň na nulu ;-)

          • Djm napsal:

            Je to tak, vyvoj sw je draha brutalita. To spis nez psat neco vlastniho je lepsi si zaplatit neco hotoveho a vyjde to levneji. Hacek hotoveho reseni je ale v podpore. Kdyz sw, ktery si pronajimas nema nejakou funkci, kterou potrebujes, tak mas smulu. Jsi plne zavisly. Proto kdyz uz bych mel nejaky SW pouzivat, tak preferuji aby byl co nejvic rozsiritelny, abych si pripadna udelatka do nej mohl dobastlit. Trosku modularne se tvari prave RE. Ale i ta rozsiritelnost ma samozrejem svoje omezeni.

  3. Ondrej napsal:

    Omlouvám se že to vytahuju, ale potřeboval bych poradit s výpočtem RSI. Jak to řešíte vy ostatní, kteří systém obchodujete?
    V XLQ:
    RSI(2) na datech od IB vrací nesmyslné hodnoty – třeba právě teď MS 2,8
    Pokud počítám na zpožděných datech z Yahoo, tak je hodnota 27.
    Pokud počítám na historických datech z Yahoo, ale poslední close beru aktualní cenu z IB, tak jsem na 2,96

    Jak se dobrat k relevantním výsledkům? Moc díky

  4. Ondrej napsal:

    Napsal jsem to chybne, tu nesmyslnou hodnotu vraci samozrejme data z IB. Ja to chci praveze pocitat stejne jako stockfetcher, ale aby posledni close cenou byly real-time data z IB.

    • piftik napsal:

      Tak trocha som sa v tebe stratil.
      Pre porovnanie u mna:
      a) xlqxhRSI(„MS“,0,2,“IB“) dava hodnotu okolo 2,54
      b) moja vlastna VBA implementacia RSI pocitana na datach z IB (historicke aj real-time) dava tu istu hodnotu, co RSI, teda okolo 2,54
      c) xlqxhRSI(„MS“,0,2,“YAHOO“) dava hodnotu okolo 2,75
      d) moja vlastna VBA implementacia RSI pocitana na historickych datach YAHOO (adjusted close) a real-time IB dava hodnotu RSI okolo 2,54

      Pokial ti XLQ hadze hausnumera, mne pomoze v XLQ Stock Manageri zmazat data a nechat ich natiahnut znova.

      • Ondrej napsal:

        Diky moc, mazat data me nenapadlo, problem s MS to vyresilo a dava mi to podobne hodnoty. Nicmene ale zase naopak:
        xlqxhRSI(„CSCO“,0,2,“IB“) dava 1,2
        xlqxhRSI(„CSCO“,0,2,“YAHOO“) dava 21,4
        prijde mi tam neco zadrene:(

  5. piftik napsal:

    Tu je zas problem v uprave cien (adjusted close).
    Yahoo ponuka na vyber ceny bud upravene o splity a dividendy (obe naraz) alebo neupravene.
    IB ponuka natvrdo upravene a este k tomu iba o splity a nie o dividendy (mam to potvrdene od IB).
    Takze pokial si aj v yahoo vyberies upravene ceny, RSI sa medzi IB a YAHOO moze lisit, ak dana akcia mala nedavno dividendy.

    • piftik napsal:

      A este si prosim skontroluj, ci v XLQ Preferences pre IB mas „Return Backfill only for RTH“ prepnute na Yes.

  6. Ondrej napsal:

    Jeste jednou diky za tipy, s upravou cen jsem pocital, preferences mam taky nastavene. Holt to zkusim jeste jednou od zacatku, nekde jsem musel udelat chybu.

  7. Scapegrace napsal:

    Heads-up:
    27.11.2014 Thanksgiving Day – U.S. Closed
    28.11.2014 Early Close – U.S. Early Close U.S. (1:00 p.m) – zavírá se v 19:00 našeho času

    Od 30.11.2014 končí u IB tohle předplatné: Securities Non-professional Bundle Level 1, které bylo zdarma pokud bylo na komisích více než 30 USD. Pokud chcete mít data tak je potřeba udělat nové předplatné. NYSE & NASDAQ potřebné pro strategii 90% bude do konce 2014 zdarma a od 1.1.2015 bude 1,5 USD za kus. Takže 3 USD. Info hlavně pro ty, co mají IB data feed.

    • Djm napsal:

      Pro ty, kteri jste si udelali predplatne na data NYSE & NASDAQ – musite si ted dat pozor na to, ze kdyz ted poslete request na historicka data s automatickou volbou „Smart“, muze se vam stat, stejne jako me, ze vam API nahlasi takovouto chybu „Error 200: The contract description specified for INTC is ambiguous.“
      Je pak potreba tyto problematicke tickery requestovat s vyplnenou cilovou burzou. Napr. u vyse uvedene misto „Smart“ pouzivat „ISLAND“.

Napsat komentář

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