bir sistemin getiri eğrisini,bir indicator haline getiren formulleri,yıllar önce bir inetrnet sitesinde bulmuştum...bu formuller üzerinde zamanında oldukça çalışmalarım oldu,ama trading tarzıma uymadığı için,hiçbir zaman kunlanmadım,sadece işe yarar birşeyler çıkartabilir miyim diye üstünde çalışmalar yaptım...iki üç sayfa önceki yazımda da yazdığım gibi,sisteminiz sinyallerin harfiyen uyup,bunu da kaldıracı ayarlamak için de kunlanabilirsiniz,zaten birazdan vereceğim formullerle,eğer bilginiz yeterliyse hepsini denersiniz..
trend takip eden sistemler,yapıları itabariyle piyasada ki fiyatı belirli bir oranda lag ile(geriden gelme ile) takip ederler,tepe oluşur sat gelir,dip oluşur al gelir...amaç mümkün olduğunca kısa bir sürede hareketin yönüne yakalamak ve trend boyunca,bu yönde kalmaktır...trend takip eden bir sistemin,verdiği sinyallerden oluşan getiri eğrisi üzerine hareketli ortalamalar vs koymak onu da geriden takip etmek demektir...yani zaten sisteminiz dolasıyla piyasayı biraz geriden takip ederken,o sistemin getiri eğrisi üzerinden filtre yapmakta,geriden takip edeni geriden takip etmekle sonuçlanır...zaten bu getiri eğrisi üzerinde filtreler,işlem sayısını düşürmekle beraber,kar oranlarını da düşürmektedir...
bu söylediklerimi işkembeden sallamıyorum,onlarca değişik versiyonunu test ettiğim için,söylediklerim matematiksel gerçeklerdir...ama trading tarzına uyan,arkadaşlar başarı ile uygulayabilirler,bu tamamen o kişiye kalmıştır...aşağıda, bu formulleri system tester da nasıl test edebiliriz,bunun ufak bir örneğini vereceğim...dediğim gibi onlarca değişik versiyonda test edebilirsiniz,bunları geliştirmek,yorumlamak tamamen size kalmış...sadece bu konu da değil,başka konularda da indicatorlerin yorumlanması,sistemlerin geliştirilmesi konusu,benim paylaşım yaptığım konular değil...
mesela bir sistem düşünelimtamamen hayali,atmayson,kötü bir sistemdir,sadece örnektir)
al: c>mov(c,50,e)
sat: c<mov(c,50,e) olsun...acaba bu sistemin getiri eğrisi üzerine hangi ortlamayı
koyarsam,sistemimin bir takım hatalı sinyallerini eleyebilirim...burada cross function'ı kunlanmadım,çünkü cross function sadece o barda koşul gerçekleşirse sinyal verir...
bizim test edeceğimiz şey şu:close,50'lik ortalamanın üzerine çıktığında,getiri eğrisi 200'luk ortalamasının altındayda sistem al vermesin,ne zaman ki close hala 50'lik ortalamasının üstündeyken,getiri eğrisi de 200 ortalamasının üstüne çıkarsa,o nokta da sinyal versin....close,50'lik ortalamasının altına inerse ve bu sistemin getiri eğrisi 200'luk ortalamanın üzerindeyse,hiç beklemeden sinyal versin,eğer getiri eğrisi 200'luk ortalamanın altındaysa,sinyali vermek için üstüne çıkmasını beklesin....bizim test edeceğimiz değişken,burada ki getiri eğrisi üzerinde ki 200'luk ortalamadır,acaba başka bir ortalama daha iyi bir sonuç vermektedir? bu yapacağım örnekten yola çıkarak,siz kendi varyasyonlarını denersiniz(sisteminiz cross function'lıysa veya farklı bir türdeyse ya bu hale getirin ya da kafayı çalıştırın,bunun yolları mevcut,size kalmış)....
şimdi bu sistemin getiri eğrisini,indicator haline getirirsek şöyle oluyor:
a1:=mov(c,50,e);
entry:=C>a1;
sentry:=C<a1;
init:=Cum(IsDefined(entry+sentry))=1;
flag:=ValueWhen(1,entry-sentry<>0 OR init,entry);
entry:=flag*(Alert(flag=0,2) OR entry*Cum(entry)=1);
sentry:=(flag=0)*(Alert(flag,2) OR sentry*Cum(sentry)=1);
EntryVal:=ValueWhen(1,entry,C*(1));
Profit:=C*(1)/EntryVal-1;
ProfitPer:=(flag*Profit+Cum(sentry*Profit))*100;
sflag:=ValueWhen(1,sentry-entry<>0 OR init,sentry);
sEntryVal:=ValueWhen(1,sentry,C*(1));
sProfit:=C*(1)/sEntryVal-1;
sProfitPer:=(sflag*sProfit+Cum(entry*sProfit))*100 ;
(If(1,ProfitPer,entry-sentry)-If(1,sProfitPer,sentry-entry))
bunu system tester da al kısmına getirirken,şöyle yapıyoruz(son satırı değiştirip,koşullarımızı ekliyoruz)
AL
a1:=mov(c,opt1,e);
entry:=C>a1;
sentry:=C<a1;
init:=Cum(IsDefined(entry+sentry))=1;
flag:=ValueWhen(1,entry-sentry<>0 OR init,entry);
entry:=flag*(Alert(flag=0,2) OR entry*Cum(entry)=1);
sentry:=(flag=0)*(Alert(flag,2) OR sentry*Cum(sentry)=1);
EntryVal:=ValueWhen(1,entry,C*(1));
Profit:=C*(1)/EntryVal-1;
ProfitPer:=(flag*Profit+Cum(sentry*Profit))*100;
sflag:=ValueWhen(1,sentry-entry<>0 OR init,sentry);
sEntryVal:=ValueWhen(1,sentry,C*(1));
sProfit:=C*(1)/sEntryVal-1;
sProfitPer:=(sflag*sProfit+Cum(entry*sProfit))*100 ;
g1:=(If(1,ProfitPer,entry-sentry)-If(1,sProfitPer,sentry-entry));
c>a1 and g1>mov(g1,opt2,s)
burada g1 sistemin getirisi oluyor,kendi ortalamasının üzerindeyse,diğer koşul da geçerliyse sinyal veriyor...
SAT
a1:=mov(c,opt1,e);
entry:=C>a1;
sentry:=C<a1;
init:=Cum(IsDefined(entry+sentry))=1;
flag:=ValueWhen(1,entry-sentry<>0 OR init,entry);
entry:=flag*(Alert(flag=0,2) OR entry*Cum(entry)=1);
sentry:=(flag=0)*(Alert(flag,2) OR sentry*Cum(sentry)=1);
EntryVal:=ValueWhen(1,entry,C*(1));
Profit:=C*(1)/EntryVal-1;
ProfitPer:=(flag*Profit+Cum(sentry*Profit))*100;
sflag:=ValueWhen(1,sentry-entry<>0 OR init,sentry);
sEntryVal:=ValueWhen(1,sentry,C*(1));
sProfit:=C*(1)/sEntryVal-1;
sProfitPer:=(sflag*sProfit+Cum(entry*sProfit))*100 ;
g1:=(If(1,ProfitPer,entry-sentry)-If(1,sProfitPer,sentry-entry));
c<a1 and g1>mov(g1,opt2,s)
opt1'i 50 yapın,opt2 ise artık bu sistemin getiri eğrisi üzerinde hangi ortalama iyi çalışır diye belirli bir aralıkta test edin..mesela 5 ile 100 arası basamak 5'er olsun gibi...burada aynı anda hem opt1'i hem de opt2'yi test edebilirsiniz,yani limit sizin hayal gücünüz...
son satırı şöyle de yapabilirsiniz:
al için:
c>a1 and g1>ref(g1,-1)
sat için:
c<a1 and g1>ref(g1,-1)
burada da getiri eğrisini üzerinde ki ortalamanın yönüne göre filtreledik işlemleri...dediğim gibi onlarca değişik versiyonunu üretebilirsiniz,ben ufak bir yol gösteriyorum,derdim bunları herkesin anlaması değil,anlayan zaten anlıyor,kendini geliştirmeye çok meraklı arkadaş var,bu konuda bu kadar bilgi yeterli...ben kendi adıma bu konu da işe yarar yarar şeyler çıkartamadım,umarım siz çıkatırsınız,herkese kolay gelsin...
Yer imleri