Istediginiz robot tarafinda da yapilabilir ancak sistem tarafinda olmasi backtest yapilabilirligi saglar. Gunde 1 karli islem belki 3 zararli islem sonrasi 25 puanla gelecek. Bu yaklasimin beklentinize paralel sonuc uretip uretmedigini gecmis verilerle muhakkak test etmenizi oneririm.
Asagidaki goruntude sari bolgeler mevcut sisteminiz, mavi bolgeler ise hangi bolgeye neler eklenmesi gerektigini gosteriyor. "GunlukLimit" ve karli islem icin "KarMargin" istege gore ayarlanabilir veya optimize edilebilir.
Kod:var V = Sistem.GrafikVerileri ; var C = Sistem.GrafikFiyatOku(V, "Kapanis"); //Diger tum sistem degiskenleri var SonYon = ""; float islemKZ = 0f; float KarMargin = 0.05f; float Sayac = 0f; float AlFiyat = 0f; float SatFiyat = 0f; int GunlukLimit = 1; for (int i=1; i<V.Count; i++) { //Sistem hesaplamalari if ( V[i].Date.Date != V[i-1].Date.Date) Sayac=0f; if ("Al Kosulu" && SonYon != "A" && Sayac < GunlukLimit ) //Alis { AlFiyat=C[i]; islemKZ= AlFiyat>0 && SatFiyat>0 ? SatFiyat-AlFiyat : 0f; if (islemKZ > KarMargin) {Sayac++; SonYon="F"; Sistem.Yon[i]="F";} else { SonYon="A"; Sistem.Yon[i]="A"; } } else if ("Sat Kosulu" && SonYon != "S" && Sayac < GunlukLimit ) //Satis { SatFiyat=C[i]; islemKZ= AlFiyat>0 && SatFiyat>0 ? SatFiyat-AlFiyat : 0f; if (islemKZ > KarMargin) {Sayac++; SonYon="F"; Sistem.Yon[i]="F";} else { SonYon="S"; Sistem.Yon[i]="S"; } } }
twitter @AlgoTrd
Çok zahmet etmişsiniz..
Çok teşekkürler...
Islem basina KZ nin hatasiz hesaplanmasi icin ufak bir ekleme yapildi.
Kod:var V = Sistem.GrafikVerileri ; var C = Sistem.GrafikFiyatOku(V, "Kapanis"); //Diger tum sistem degiskenleri var SonYon = ""; float islemKZ = 0f; float KarMargin = 0.05f; float Sayac = 0f; float AlFiyat = 0f; float SatFiyat = 0f; var GunlukLimit = 1; for (int i=1; i<V.Count; i++) { //Sistem hesaplamalari if ( V[i].Date.Date != V[i-1].Date.Date) {Sayac=0f; AlFiyat=0f; SatFiyat=0f;} if ("Al Kosulu" && SonYon != "A" && Sayac < GunlukLimit ) //Alis { AlFiyat=C[i]; islemKZ= AlFiyat>0 && SatFiyat>0 ? SatFiyat-AlFiyat : 0f; if (islemKZ > KarMargin) {Sayac++; SonYon="F"; Sistem.Yon[i]="F";} else { SonYon="A"; Sistem.Yon[i]="A"; } } else if ("Sat Kosulu" && SonYon != "S" && Sayac < GunlukLimit ) //Satis { SatFiyat=C[i]; islemKZ= AlFiyat>0 && SatFiyat>0 ? SatFiyat-AlFiyat : 0f; if (islemKZ > KarMargin) {Sayac++; SonYon="F"; Sistem.Yon[i]="F";} else { SonYon="S"; Sistem.Yon[i]="S"; } } }
twitter @AlgoTrd
Backtest yaparken 1, 5, 60 ve G periyotlarını kullanmak mantıklı olan sanırım çünkü 10, 15, 20, 30 grafikleri 5 dk'lıktan, 120, 240 grafikleri 60 dk'lıktan ve H, A, U, Y grafikleri de Günlük grafikten türetiliyor böyle olunca da canlıdayken 5 dk'lık bar kapanıyor ama diyelim 15 dk'lıkta sistemimiz var ve 15 dk barı kapanmadığı için bakctestte karlı olan canlı da karlı olamayabilir diye düşünüyorum. Bu konuda ne dersiniz?
ideal robotumda kullanmak üzere vip-usd ve vip-gld 5 dk ve 1 dk geçmiş datasına ihtiyacım var. Elinde bu datalar olan varsa bizimle paylaşabilir mi? Tşk.
Burada yer alan yorumlar, kişisel görüşlere dayanmaktadır. Bu nedenle, yatırım veya al/sat tavsiyesi olarak değerlendirilmemelidir.
twitter @AlgoTrd
bool FiltreUP = (C[i] >= SonFiyat * 1.003 || C[i] <= SonFiyat);
bool FiltreDN = (C[i] >= SonFiyat || C[i] <= SonFiyat * 0.997);
buna benzer fiyat ile filtre biliyormusunuz elinde olan paylaşabilirmi
Yer İmleri