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:
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;
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ı.
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.
Yer İmleri