
Originally Posted by
umit_ykoc
Donemcevirden olsa gerek ( tam emin degilim ama başka bir sebebi de olmamali ) robotta flate dönüş yapiyor flatli sistem kullanmamama ragmen. Ha birde ust periyotlarin da devamli güncel olmasi gerekiyor donemcevirde. 1 dklik grafikten ilgili üst periyotlarin kapanislarini elde ediyorum oraya kadar sorun yok. Ama iş ortalamayi hesaplamaya gelince verdigimiz 100 birimlik degeri 1 dklik grafige gore aliyor ve iş tikaniyor

, cizmesinin önemi yok yeterki hesabi yapsin.
Sn Keçi'nin yorumlarına katılmak ile birlikte dönem çevir kullanmadan her 5 dakikada bir barın kapanış değerini alıp onları bir listeye atan ve bu listenin ortalamasını belli periyotlarda hesaplayan bir sistem yazdım:
Kod:
try
{
var P = Sistem.GrafikVerileri;
var C = Sistem.GrafikFiyatSec("Kapanis");
var C5 = new List<float>();
var C5MA = Sistem.Liste(0);
var ma5Period = 200;
Sistem.Yon = User.List("", Sistem.BarSayisi);
var pos = "F";
var c5ma = 0f;
for (int i = 0; i < P.Count; i++)
{
if (P[i].Date.Minute % 5 == 0)
C5.Add(P[i].Close);
if (C5.Count == ma5Period)
{
c5ma = C5.Average();
C5.Clear();
}
C5MA[i] = c5ma;
var buy = C[i] > C5MA[i];
var sell = C[i] < C5MA[i];
var flat = false;
if ((pos == "A" || pos == "S") && flat) { Sistem.Yon[i] = pos = "F"; }
else if (pos != "A" && buy) { Sistem.Yon[i] = pos = "A"; }
else if (pos != "S" && sell) { Sistem.Yon[i] = pos = "S"; }
}
Sistem.GetiriHesapla("01/01/2010", 0.000);
Sistem.Cizgiler[0].Deger = Sistem.GetiriKZ;
Sistem.Cizgiler[1].Deger = Sistem.GetiriKZAy;
Sistem.Cizgiler[2].Deger = C5MA;
}
catch (Exception ex)
{
Sistem.Mesaj(ex.ToString());
}
Kodla ile ilgili önemli noktalar şunlar
- 5 dakikada bir kapanış değeri alıp 200 bar beklediği için toplamda 1000 bar beklemiş oluyor 1 dakikalık grafiklerde.
- Ben hesaplamaya i = 0'da başladım yanı geriden bar toplayıp hesaplıyor. Dolayısıyla son barlardan geriye doğru hesaplasın derseniz algoritmayı değiştirmeniz gerekiyor.
Hızlı bir şekilde yazıp test etmediğim için hatalar olabilir, kontrol etmenizi tavsiye ederim.
Yer İmleri