Strategia ja sen testaus: Osa8

Pörssisysteemejä testataan useammin väärin kuin oikein. Yksi klassinen esimerkki on, että käytetään indikaattorin laskennassa sellaisia arvoja mitä ei laskentahetkellä vielä ole olemassa. Eli katsotaan takaisinlaskennassa tulevaisuuteen. Pekka Valkonen kehotti lukemaan Kari Laakson artikkelin Piksussa ja innostuin tästä testaamaan Coppock-indeksiä.  Koodasin AmiBrokeriin Coppock-indeksi koodin:

SetPositionSize(1,spsShares );
MonthPrice = TimeFrameGetPrice( "C", inMonthly, -1 );
Coppock = WMA(ROC(MonthPrice,14)+ROC(MonthPrice, 11),10);
Plot(Coppock, "Coppock", colorRed);

Tässä tein oikein eli käytin edellisen kuukauden close arvoa (oletan, että minulla on päivä-data) rivi 2. Jos olisin käyttänyt arvo 0, eli tätä kuuta niin olisin katsonut tulevaisuuteen. Tietäisin jo mikä on kuukauden close-arvo vaikka käyn vain päiväarvoja lävitse. Tämä virhe on yleisempi kuin harvinainen, kun käytämme eri ajanindikaattoreita samassa kuvassa. Alla on piirretty Coppock-indikaattori OMXH25 indeksiin.

 

4 thoughts on “Strategia ja sen testaus: Osa8

  1. Sir

    Hei,

    Siinä tulikin esille mielenkiintoinen ohjelma, jota en ole ennen noteerannut. Amibroker siis.

    Miten tuohon softaan saisi OMXH quotet? Saako nämä päivittymään automaattisesti?

     

    -Sir

    1. Data feed

      Data ostetaan erikseen. Voit käyttää ilmaisia lähteitä, kuten yahoota. Mutta siellä ei ole suomen kursseja, joten joudut ostamaan ne esignalilta. Esignalilta saa lähes kaikkialle datan reaaliaikaisena, se ei tosin ole aivan halpaa. Katso http://www.esignal.com sivulta. Heillä on oma ohjelma, mutta mielestäni Amibroker on parempi. Se on paljon joustavampi.

  2. Oikea Coppock-indikaattorin koodi

    Hei Jarno,

    Vältit tulevaisuuteen katsomisen Amibroker-koodissasi, mutta muuten se on melko pielessä mm. ROCit tulevat kaavassasi päivien jaksoilta eikä kuukausien kuten pitäisi.

    Alla on oikea alkuperäinen Coppock-indikaattori (päiväkuvaajassa arvo vaihtuu vain kuun ensimmäisenä päivänä) ja aikavälejä päiviksi muuttaen tehty nopeammin reagoiva Coppock Daily. Alinna olevassa kuvassa näkyy molemmat indikaattorit HEX25 EOD-kurssista laskettuna.

    Olen rakentanut eri strategioiden toteutuksia mm. kotimaisille ja ulkomaisille osakkeille ja rahastoille Amibrokeria hyödyntäen useiden vuosien ajan. Kauttani saa edullisesti EOD-kursseja mm. Helsingin osakkeet ja indeksit sekä Suomessa myytävät rahastot. Autan tarvittaessa rakentamaan Amibroker-indikaattoreita tai vaikka täysin automatisoidun päiväkaupankäyntijärjestelmän.

    Parhain terveisin,

    Jaakko

    jaakko.valli@tut.fi

     

    // Coppock Indicator

    // (C) Vallum Oy 2009-

    TimeFrameSet(inMonthly);

    Coppock=WMA(ROC(Close,11)+ROC(Close,14),10);

    TimeFrameSet(inDaily);

    Coppock_monthly=TimeFrameExpand(Coppock,inMonthly);

    UpOrDn=Flip(Coppock_monthly>Ref(Coppock_monthly,-1),Coppock_monthly<Ref(Coppock_monthly,-1));

    GreenOrRed=IIf(UpOrDn==1,colorGreen,colorRed);

    Plot(Coppock_monthly,"Coppock",GreenOrRed);

     

    // Coppock Daily Indicator

    // (C) Vallum Oy 2009-

    Coppock_daily=WMA(ROC(Close,233)+ROC(Close,296),210);

    UpOrDn=Flip(Coppock_daily>Ref(Coppock_daily,-1),Coppock_daily<Ref(Coppock_daily,-1));

    GreenOrRed=IIf(UpOrDn==1,colorGreen,colorRed);

    Plot(Coppock_daily,"Coppock_daily",GreenOrRed);

     

     

    1. Olet oikeassa!

      Koodissani käytettiin kuukausiarvoja käyttäen TimeFrameGetPrice funktiota. 
      Mutta tein kieltämättä virheen timeframen kanssa kun laskin ROC ja WMA, laskin ne päiväarvoista. 
      Näissä tekee helposti virheitä joten täytyy olla tarkempana. 
      http://en.wikipedia.org/wiki/Coppock_curve. 

       

      SetPositionSize(1,spsShares );

      TimeFrameSet(inMonthly);

      CoppockMonthly = WMA((ROC(C,14)+ROC(C, 11)),10);

      TimeFrameRestore();

      DayCoppock = TimeFrameExpand( CoppockMonthly, inMonthly);

      Plot(DayCoppock, "Coppock", colorRed);

       

      Buy = DayCoppock<0 AND Ref(DayCoppock, -1)<Ref(DayCoppock, 0);

      Sell = DayCoppock>0 AND Ref(DayCoppock, -1)>Ref(DayCoppock, 0);

      Buy = ExRem( Buy, Sell );

      Sell = ExRem( Sell, Buy );

      Ajoin tämän DJIA indeksin kanssa ja saimme kauppoja seuraavasti:
       

      Tämä tyyli tuottaa kauppoja varsin harvoin, mutta se löytää varsin kivasti halpoja ostohetkiä. Tämän 
      indikaattorin hyvyyttä on vaikea arvioida, koska kauppoja tulee niin harvoin.
      
      Tästäkin esimerkistä huomataan, että nämä tällaiset ohjelmat mitkä soveltuvat backtestaukseen ovat tehokkaita
      ja varsin yksinkertaisia käyttää vaikka niillä on mahdollista testata myös hyvin mutkikkaita systeemejä.
      
      Kiitos vielä Jaakko kun huomasit virheen.
      

Comments are closed.

Related Posts

Talous Yhteiskunta

Suomen kansalaiset ovat läntisen Euroopan köyhimpiä mutta kaikki yrittävät silti sijoittaa osakkeisiin

Suomalaiset yksityishenkilöt kuuluvat länsi-Euroopan köyhimpiin, mutta ovat silti talousosaamiseltaan taitavimpia ja sijoittaminen pörssiosakkeisiin ja rahastoihin on yleisempää kuin muualla.
Suomalaiset sijoittavat ahkerasti osakkeisiin ja sijoitusrahastoihin
Suomi kuuluu

Sijoittaminen

Listaamattomiin yhtiöihin sijoittaminen on opettavaista ja haasteellista

Listaamattomiin yrityksiin sijoittaminen on haasteellista: tiedot sijoituskohteesta ovat yleensä puutteellisia, osakkeiden jälkimarkkina on olematon ja toiminta on muutaman avainhenkilön varassa.  Sijoittamista kannattaa kuitenkin harkita, jos

Sijoittaminen

Pörssikurssit pitävät pimeydestä – osakkeiden arvot tapaavat laskea kesällä

Sijoittajat saavat kesällä muuta ajateltavaa, kauppa on vaisua ja pörssikurssit laskevat. Ensimmäisen vuosipuliskon tuloskausi herättelee heinäkuussa sijoittajia, mutta vain hetkeksi. Elo ja syyskuu ovat taas