çok yerinde hata vardı. özellikle kopyala yapıştır yaptığın yerlerde değişkenlerin.
şu şekil bi görüntü mü istiyorsun?
PHP Code:
var V =Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V , "Kapanis") ;
var O = Sistem.GrafikFiyatOku(V , "Acilis") ;
var BarSayisi = V.Count;
var Rsiperiyot = Convert.ToSingle(Sistem.Parametreler[0]) ;
var Rsialtbolge = Convert.ToSingle(Sistem.Parametreler[1]) ;
var Rsiortabolge= Convert.ToSingle(Sistem.Parametreler[2]) ;
var Rsiustbolge= Convert.ToSingle(Sistem.Parametreler[3]) ;
var RSI = Sistem.RSI(V,Rsiperiyot);
var Rsialtbolgeninaltcizgisi = Sistem.Liste(0);
var Rsialtbolgeninustcizgisi = Sistem.Liste(0);
var Rsiortabolgeninaltcizgisi = Sistem.Liste(0);
var Rsiortabolgeninustcizgisi = Sistem.Liste(0);
var Rsiustbolgeninaltcizgisi = Sistem.Liste(0);
var Rsiustbolgeninustcizgisi = Sistem.Liste(0);
for (int i = 20; i < BarSayisi; i++)
{
Rsialtbolgeninaltcizgisi[i] = Rsialtbolgeninaltcizgisi[i-1];
Rsialtbolgeninustcizgisi[i] = Rsialtbolgeninustcizgisi[i-1];
Rsiortabolgeninaltcizgisi[i] = Rsiortabolgeninaltcizgisi[i-1];
Rsiortabolgeninustcizgisi[i] = Rsiortabolgeninustcizgisi[i-1];
Rsiustbolgeninaltcizgisi[i]= Rsiustbolgeninaltcizgisi[i-1];
Rsiustbolgeninustcizgisi[i]= Rsiustbolgeninustcizgisi[i-1];
if ( RSI[i-1] < Rsialtbolge && RSI[i] > Rsialtbolge ) // Sistem.YukariKestiyse(RSI, Rsialtbolge) )
{
Rsialtbolgeninaltcizgisi[i] = O[i];
Rsialtbolgeninustcizgisi[i] = C[i];
}
if (RSI[i-1] < Rsiortabolge && RSI[i] > Rsiortabolge ) //Sistem.YukariKestiyse(RSI, Rsiortabolge) )
{
Rsiortabolgeninaltcizgisi[i] = O[i];
Rsiortabolgeninustcizgisi[i] = C[i];
}
if (RSI[i-1] < Rsiustbolge && RSI[i] > Rsiustbolge ) //Sistem.YukariKestiyse(RSI, Rsiustbolge) )
{
Rsiustbolgeninaltcizgisi[i]= O[i];
Rsiustbolgeninustcizgisi[i]= C[i];
}
}
Sistem.Cizgiler[0].Deger = Rsiustbolgeninaltcizgisi ;
Sistem.Cizgiler[1].Deger = Rsiustbolgeninustcizgisi ;
Sistem.Cizgiler[2].Deger = Rsiortabolgeninaltcizgisi ;
Sistem.Cizgiler[3].Deger = Rsiortabolgeninustcizgisi ;
Sistem.Cizgiler[4].Deger = Rsialtbolgeninaltcizgisi ;
Sistem.Cizgiler[5].Deger = Rsialtbolgeninustcizgisi ;
eedit : yukardaki grafik senin verdiğin 10 25 50 80 değildi
bu 5 dk lık olan sizin değerlere göre
![]()
sayin keci yanilyorsam duzeltin, orada zaten bir liste olusturuluyor, ve bu kapanislari tutuyor . rsi hesabinda yalnizca kapanis degerleriyle islem yapilabildiginden rahatlikle o listenin rsisi alinabilinir, ancak atr degerinde ise bildigim kadariyla high low open closelarin karsilastirilmasi neticesinde bir liste olusturulmasi lazim ki, benim yazdigim formule adapte edemedim. hani atrnin idealde acik formulu varsa belki adapte etmeyi deneyebilirim.. anladigim kadariyla sizin icin basit birsey bu.
bang bang you shot me down..
ATR ye liste kullanım şekli ile ister fiyat ister RSI değerini hesaplattırıp kullanabilirsin.
AverageTrueRange(Liste, 14)
var V =Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V , "Kapanis") ;
var RSI = Sistem.RSI(V,14);
RSI_ATR=Sistem.AverageTrueRange(RSI, 14);
FYT_ATR=Sistem.AverageTrueRange(C, 14);
abi bu kullanimlari biliyorum. rsi (benim ornegini attigim)tek bir parametre aldigindan dolayi kapanislari for'lamak yetiyor, ancak atrde bildigim kadariyla 4 parametreye bakilip karsilastirilip ona gore hesaplaniyor atr degeri. benim sikinti cektigim yer surasi ;
for (int i = 1; i < V.Count; i++)
{
if (V[i].Date.Day != V[i - 1].Date.Day)
{
PrevGunC.Add(V[i - 1].Close);
GunTarih.Add(V[i].Date.ToString("yyyyMMdd"));
}
}
buralara highli lowlu inside bar filan olursa atrnin hesabini yapacak seyler lazim. grafikverilerinden tum bilgileri cekiyorsa ben soyle bi kullanim denedim ama yemedi ;
PrevGunC.Add(V[i - 1]);
pp
yani komple su sekilde degistirdim, guya grafikverilerinin icinden atryi hesaplaticam ,
var V = Sistem.GrafikVerileri;
var PrevGunV = new List<float>();
var GunTarih = new List<string>();
for (int i = 1; i < V.Count; i++)
{
if (V[i].Date.Day != V[i - 1].Date.Day)
{
PrevGunV.Add(V[i - 1]);
GunTarih.Add(V[i].Date.ToString("yyyyMMdd"));
}
}
var PrevGunATR = Sistem.AverageTrueRange(PrevGunV, 20);
var ATR = Sistem.Liste(0);
var StartPos = 0;
for (int i = 1; i < V.Count; i++)
{
for (int j = StartPos; j < PrevGunATR.Count; j++)
{
if (V[i].Date.ToString("yyyyMMdd") == GunTarih[j])
{
ATR[i] = PrevGunATR[j];
StartPos = j;
break;
}
}
}
// RSI listesi önceki günün değeridir.
//intraday grafiklerde repaint olmadan döngü içinde kullanılabilir.
Sistem.Cizgiler[0].Deger = ATR;
ancak yemedi.
yoksa herhangi bir listenin atrsi rsisi hesaplanabilir idealde, anlamli bulunuyorsa.
bang bang you shot me down..
yanlış anlamadıysam atr kullanmak istiyosunuz ama çılgın açılış barlarının bozmasını istemiyosunuz
öyle ise yukarıda yaptığınız gibi açılış barının H L ve C unu bir önceki bar olarak değiştirebilirsiniz
o başlangıç barını tespit ettiğiniz yerde v[i].Kapanis=v[i-1].Kapanis; vs vs şeklinde
Baboli parmaklarına, o parmakları yöneten beyin kıvrımlarına, ayırdığın zamana, o zamanı ayırma kararı veren beyninin limbik sistemine teşekkür ederim. O sistemden salgılanan dopamin miktarın daha nice nice olsun. ( psikolojik danışman iltifatı böyle oluyor maalesef . özür )
Şimdi benim limbik sistemime takılıp azda olsa kortizon salgılatan şey şu. İncelediğim bütün kod parçaçıklarında parametre değerleri için "convert.tosingle" ihtiyaç duyulmamış.Bu örnekteki kullanım mantığı ne? (niye çok sayıda ondalık basamak içeren reel sayıya döndürüyoruz ) ( beginner seviyesi böyle olur. ÖZÜR )
var V =Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V , "Kapanis") ;
var O = Sistem.GrafikFiyatOku(V , "Acilis") ;
var BarSayisi = V.Count;
var Rsiperiyot = Convert.ToSingle(Sistem.Parametreler[0]) ;
var Rsialtbolge = Convert.ToSingle(Sistem.Parametreler[1]) ;
var Rsiortabolge= Convert.ToSingle(Sistem.Parametreler[2]) ;
var Rsiustbolge= Convert.ToSingle(Sistem.Parametreler[3]) ;
Baboli demişim özür. Bearbull.Yiğidi öldür hakkını yeme.
Yer İmleri