Aşağıdaki sistem; günlük MA1, günlük MA2 den büyükse ve baktığınız periyottaki fiyat trendin üzerindeyse alım yapar..Fiyat MA2 yi aşağı kırdığında satar. Trendi ve fiyatı, grafiğe baktığınız periyoda göre kullanır (ortalamalar günlük olduğundan günlük ve tüm alt periyotlarda çalışır). Koddaki trend son 20 barı dikkate almadan 300 bara bakıyor.
Trendi kesişim esnasında çizdirmenize gerek yok; trend her zaman olur ama sistem ma1>ma2 + fiyat>trend olduğunda işleme girer. Ancak trendin otomatik çizilmesi önceki tepelerin durumuna göre sağlıklı çalışmayacaktır. Sistem anlık dediğim gibi çalışsa da, trend şartından dolayı grafik üzerinde geçmişte yaptığı ya da yapmadığı alımları hatalı gösterir.
https://i.hizliresim.com/qdkql3.pngPHP Code:
int p1=5;
int p2=21;
var Veriler = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatOku(Veriler,"Kapanis");
var gn = Sistem.GrafikVerileriniOku(Sistem.Sembol, "G");
var kgn = Sistem.GrafikFiyatOku(gn, "Kapanis");
var m1 = Sistem.MA(kgn, "Simple", p1 );
m1 =Sistem.DonemCevir(Sistem.GrafikVerileri, gn , m1 );
var m2 = Sistem.MA(kgn, "Simple", p2 );
m2 =Sistem.DonemCevir(Sistem.GrafikVerileri, gn , m2 );
var T = Sistem.OtoTrendDusen(Veriler, 300, 20);
//kesişim şartı
//if (m50[i]>m100[i] && m50[i-1]<m100[i-1])
var SonYon = "";
for (int i=2; i < Sistem.BarSayisi; i++)
{
if (SonYon != "A" && m1[i]>m2[i] && C[i]>T[i] )
{
SonYon = Sistem.Yon[i] = "A";
Sistem.Mesaj("Trend Yukarı Kırıldı");
}
else if (SonYon != "S" && C[i]<m2[i] )
{
SonYon = Sistem.Yon[i] = "S";
Sistem.Mesaj("Satıldı..");
}
}
//ekranda çizgi olarak göster
Sistem.Cizgiler[0].Deger = m1;
Sistem.Cizgiler[1].Deger = m2;
Sistem.Cizgiler[2].Deger = T;
https://i.hizliresim.com/DYbXR1.png