Alıntı Originally Posted by muminozturk Yazıyı Oku
Hocam bilgisizliğimi bağışlayın.
C.de bir değişkeni bar numarasına göre hesaplayamamak kötüymüş.
Şu yapılamaz mı hocam.

x değişkenini 1-20 barlar arasında değer ata. (belki bar no ile)
y değişkenine 20 nolu barı ata.
z değişkenine 21-1000 nolu barlarda şu değişkeni ata
(atanmayan değerler sıfır ise)

zz= x+y+z
Yapılamaz demedim işe yaramayacağını düşündüğüm için yazmak istemedim. Sanırım siz metastock diline aşınasınız. Metastock scripttir, C# ise programlama dilidir yazıyla ifade edilebilen her hesaplama yaptırabilir. Örneğin yapmak istediğiniz şeyi kodladım.
Bu kod 20.bardan sonra sadece bir sonraki barın fiyatı alıp indikator gibi çizer, yani repaint yapar.

PHP Code:
      var Sistem.GrafikVerileri;
      var 
Sistem.GrafikFiyatOku(V"Kapanis");


      var 
periyot 20;
      var 
es Sistem.Liste(0);



      for (
int j 0V.Count-2j++)
      {
         if (
periyot)
         {
            
// bar sayısı periyottan küçükse yapılacak hesaplamalar

            
es[j] = C[j+2];  // bu satır repaint yapar, gelecekteki iki bara bakar.
         
}
         else if (
== periyot)
         {
            
// bar sayısı periyota eşitken yapılacak hesaplama
            
es[j] = C[j];

         }
         else
         {
            
// bar sayısı periyottan büyükken yapılacak hesaplama
            
es[j] = C[1]; // bu satır da gelecekteki bir bardan bilgi çalar.
         
}
         
      }
      
Sistem.Cizgiler[0].Deger es
Eğer her 20 barda, bar sayımının başa dönmesini istiyorsanız şu şekilde ifade edebiliriz.

PHP Code:

      
var Sistem.GrafikVerileri;
      var 
Sistem.GrafikFiyatOku(V"Kapanis");


      var 
periyot 20;
      var 
es Sistem.Liste(0);



      for (
int j 0V.Count-2j++)
      {
         if (
periyot)
         {
            
// bar sayısı periyottan küçükse yapılacak hesaplamalar

            
es[j] = C[j+2];  // bu satır repaint yapar, gelecekteki iki bara bakar.
         
}
         else if (
== periyot)
         {
            
// bar sayısı periyota eşitken yapılacak hesaplama
            
es[j] = C[j];

         }
         else
         {
            
// bar sayısı periyottan büyükken yapılacak hesaplama
            
es[j] = C[1]; // bu satır da gelecekteki bir bardan bilgi çalar.
         
}

         if (
periyot == 0)
            
periyot 20;
         
      }
      
Sistem.Cizgiler[0].Deger es
Yanlış anlamış olabilirim. Yapmak istediğiniz bu değilse de kod üzerinde değişiklik yaparak istediğiniz şeyi elde etmeye çalışın.

for döngüsünün son değerinin "V.Count - 2" olmasına dikkat edin, çünkü gelecekten bilgi almak için 2 bar geçmişte olmak gerek aksi halde hata verir çizgi görünmez.