Alıntı Originally Posted by Bear_Bull Yazıyı Oku
yazınızda for döngüsü için resimde açıklaması yazılmış orası işinize yaramaz.

5000 bar varsa toplamda.

oraya 4500 dersiniz sistem son 500 bar için sinyal arar çok eski datalar ile uğraşmaz.

if (MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i] && SonYon != "A") // AL

bu yukarıdakini ise aşağıdaki gibi değiştirirseniz 1 bar geriye değil üstüne 1 bar daha sinyali geciktirmiş olursunuz.
MA1[i-2] < MA2[i-2] && MA1[i] >= MA2[i]
evet ben sinyali erkene almak istediğimden imkansızı istemiş oluyorum ozaman.

çok uzuldum


şunları denedim belki yaparım diye yine olmadı...

// parametreleri al
var Yontem = Sistem.Parametreler[0];
var Periyot1 = Sistem.Parametreler[1];
var Periyot2 = Sistem.Parametreler[2];


// kapanış fiyatlarını oku
var Veriler = Sistem.GrafikFiyatSec("Kapanis");
var Prev1 = Sistem.OncekiKapanisGun("MA1");
var Prev2 = Sistem.OncekiKapanisGun("MA2");

// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(Veriler, Yontem, Periyot1);
var MA2 = Sistem.MA(Veriler, Yontem, Periyot2);


// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[0].Aciklama = "MA " + Periyot1;
Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[1].Aciklama = "MA " + Periyot2;

// strateji
for (int i = 2; i<Sistem.BarSayisi; i++)

{
Prev1 = MA1[i-1];
Prev2 = MA2[i-1];


if (MA1[i-1] < MA2[i-1] && MA1[i] > MA2[i])
Sistem.Yon[i] = "A"; // alış

if (MA1[i-1] > MA2[i-1] && MA1[i] < MA2[i]) // 1.ortalama 2.ortalamanın altına inerse
Sistem.Yon[i] = "F"; // satış
}


oysaki sinyali bir bar one ceksem çok harika olacaktı ya