Sn. Erhan merhaba.
Yapmaya çalıştığınız şeyi anlamak pek kolay değil ancak "Equity Curve Trading" (örnek makale) denen yaklaşımı uygulamaya çalıştığınızı düşünerek bir sistem yazdım:
Yukarıdaki kodda buy ve sell diye belirttiğim alanda birkaç kombinasyon denedim. Verilen sistemin getiri eğrisinin ortalaması yaklaşımını da test ettim ancak hiçbiri algoritmanın kendi getirisine yaklaşamadı.Kod:var P = Sistem.GrafikVerileri; var C = Sistem.GrafikFiyatOku(P, "Kapanis"); var sys = Sistem.SistemGetir("DEMA5_MAV5", "VIP'VIP-X030", Sistem.Periyot); if (sys == null) throw new ArgumentNullException("DEMA5_MAV5"); sys.GetiriHesapla("01/01/2000", 0.0f); var sysCurve = sys.GetiriKZ; var sysCurveHH = Sistem.HHV(50, sysCurve); var sysCurveLL = Sistem.ListeFark(sysCurveHH, Sistem.Liste(3f)); var sysCurveAvgFast = Sistem.MA(sysCurve, "Simple", 3); var sysCurveAvgSlow = Sistem.MA(sysCurve, "Simple", 100); var sysCurveDiff = Sistem.ListeFark(sysCurveAvgFast, sysCurveAvgSlow); var sysPos = "F"; var take = 3.0f; var stop = 3.0f; var pos = "F"; var posPx = 0f; for (var i = 1; i < P.Count; i++) { var close = C[i]; if (sys.Yon[i] != "") sysPos = sys.Yon[i]; //var buy = sysCurveDiff[i] > 0 && sysPos == "A"; //var sell = sysCurveDiff[i] > 0 && sysPos == "S"; var buy = sysCurve[i] >= sysCurveLL[i] && sys.Yon[i] == "A"; var sell = sysCurve[i] >= sysCurveLL[i] && sys.Yon[i] == "S"; //var buy = sysCurve[i] >= sysCurveHH[i] && sysPos == "A"; //var sell = sysCurve[i] >= sysCurveHH[i] && sysPos == "S"; var posProfit = pos == "A" ? close - posPx : pos == "S" ? posPx - close : 0f; var hasTakeProfit = posProfit >= take; var hasStopLoss = posProfit <= -stop; var flat = hasTakeProfit || hasStopLoss || sysCurve[i] <= sysCurveLL[i]; if ((pos == "A" || pos == "S") && flat) { Sistem.Yon[i] = pos = "F"; posPx = 0f; } else if (pos != "A" && buy) { Sistem.Yon[i] = pos = "A"; posPx = close; } else if (pos != "S" && sell) { Sistem.Yon[i] = pos = "S"; posPx = close; } } Sistem.GetiriHesapla("01/01/2000", 0.0f); Sistem.Cizgiler[0].Deger = sysCurveHH; Sistem.Cizgiler[1].Deger = sysCurve; Sistem.Cizgiler[2].Deger = sysCurveLL; Sistem.Cizgiler[3].Deger = Sistem.GetiriKZ; Sistem.Cizgiler[4].Deger = Sistem.GetiriKZAy;
take, stop, HHV içinde kullandığım 50 barlık değer vs gibi parametrelerle oynayıp test edebilirsiniz. Örnek olarak kullandığım sistem "DEMA5_MAV5" zaten iDeal'in içinde olan bir sistem, dolayısıya kodun direk çalışmasını bekliyorum.
Umarım istediğiniz yaklaşıma örnek olmuştur.



Alıntı yaparak yanıtla

Yer İmleri