Bu durumda kodunuzun mantığında bir hata var. Birşeyler eksik gibi çünkü sıfırlarla dolu bir dizinin ortalamasına bağlı bir hesaplama yapılmıyor olması gerek.
Printable View
Heikin ashi için referans olarak alınan bir adet başlangıç barınızın olması gerek (mecbur bir adet OHLC olacak yani), o barı nereden başlattığınıza bağlı olarak elinizdeki sonuç grafiği farklı olacaktır. Acaba fark buradan kaynaklanıyor olabilir mi? Şu anda deneyemiyorum, bu akşam deneyip buraya yazacağım ama fikir olarak paylaşayım dedim.
Bu arada yanlış hatırlamıyorsam İdeal'in heikin ashi grafiğindeki OHLC verileri -sol üstteki- gerçek veriler, türevlenmiş olanlar değil.
Ben de uluse üzerinden baktım, iDeal ile epey farklı. En başta iDeal'de şöyle barlar var:
https://i.hizliresim.com/AkRLAL.png
Investing ile baktığımda ise son gönderdiğim hesaplama son 3 bar için aynı.
Her halukarda x2 sıfır olduğu için orjinal kodu değiştirip X3 hesabında x2[i] yerine 0 yazdım.
Bu kod ile elde edeceğiniz x3 ün sizdeki x3 ile birebir aynı olacağını düşünüyorum.Kod:var V = Sistem.GrafikVerileri;
var PD = Sistem.BilancoPD();
var NK = Sistem.BilancoNetKar();
var x3 = Sistem.Liste(V.Count, 0);
for (int i = 1; i < V.Count; i++)
x3[i] = (NK[i] / PD[i]);
var x1 = Sistem.Liste(V.Count, 0);
for (int i = 1; i < V.Count; i++)
x1[i] = x3[i] > 0 ? 1 : x3[i] < 0 ? -1 : x1[i - 1];
var x2 = Sistem.MA(x3, "Simple", 10);
// sistem
var SonYon = "";
for (int i = 1; i < V.Count; i++)
{
if (x1[i] == 1 && SonYon != "A") // AL
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
}
else if (x1[i] == -1 && SonYon != "S") // SAT
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
}
else if (x1[i] == 0 && (SonYon == "A" || SonYon == "S")) // FLAT
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}
}
Sistem.Cizgiler[0].Deger = x3; // panel2
Sistem.Cizgiler[1].Deger = x2;
PEKİ BEYLER BUNU SORGU YAPABILIRMISINIZ EN YÜKSEK OLANLARI BULSUN MESELA
0,50 DEN BUYUKLERI BULSUN GIBI
var V = Sistem.GrafikVerileri ;
// hesapla
var PD = Sistem.BilancoPD();
var NK = Sistem.BilancoNetKar();
var x3 = Sistem.Liste(V.Count, 0);
var x2 = Sistem.MA(x3, "Simple", 10);
for (int i = 1; i < V.Count; i++)
x3[i] = (NK[i]/PD[i]);
for (int i = 1; i < V.Count; i++)
if (x1[i-1] !=0) {böyle bir şey eklense çözüm üretir mi?Tamamen acemice..}
x1[i] = x3[i] > 0 ? 1 : x3[i] < 0 ? -1 : x1[i - 1];