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.
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
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.
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);
Olet oikeassa!
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 );