
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