#property description "Bu gösterge, birbirine yakın büyüklüğe sağip (toplamları sözkonusu olduğunda," #property description "her hangi birinin toplamı çok fazla etkilemeyeceği) rassal değişkenler için," #property description "yeterince büyük bir sayıya ulaşmaları durumunda, dağılımlarının normal dağılıma" #property description "yakınsayacağını ifade eden Merkezi Limit teoremini gösterir." #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- Grafiksel çizim özellikleri #property indicator_label1 "Label" #property indicator_type1 DRAW_HISTOGRAM #property indicator_color1 clrRoyalBlue #property indicator_style1 STYLE_SOLID #property indicator_width1 5 //--- Bir girdi değişkeni input int sample_number=10; //--- Dağılımın çizilmesi için bir gösterge tamponu double LabelBuffer[]; //--- Tik sayacı double ticks_counter; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //--- Gösterge tamponunun dizi ile bağlanması SetIndexBuffer(0,LabelBuffer,INDICATOR_DATA); //--- göstergenin erişim yönünü şimdiki zamandan geçmişe doğru ayarla ArraySetAsSeries(LabelBuffer,true); //--- rassal sayı üretecini başlat MathSrand(GetTickCount()); //--- Tik sayacını başlat ticks_counter=0; } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- Sıfır sayacı için, gösterge tamponunu sıfırla if(ticks_counter==0) ArrayInitialize(LabelBuffer,0); //--- Sayacı artır ticks_counter++; //--- Periyodik olarak tik sayacını sıfırlamalıyız, bu şekilde dağılımı görebiliriz if(ticks_counter>100) { Print("Gösterge değerleri sıfırlandı, hücrelerin doldurulmasına yeniden başlayalım"); ticks_counter=0; } //--- 0 ile 7 arasındaki üç sayının toplamı şeklinde rassal değerler örneğini al for(int i=0;i<sample_number;i++) { //--- Rassal sayının, başka üç sayının toplamı olarak alınacağı hücrenin indisinin hesaplanması int rand_index=0; //--- 0 ile 7 arasında üç adet rassal sayı seç for(int k=0;k<3;k++) { //--- 7 ile bölümden kalan; 0 ile 6 arası bir değere dönüş yapar rand_index+=MathRand()%7; } //--- rand_index hücre numarası değerini 1 artır LabelBuffer[rand_index]++; } //--- OnCalculate() işleyicisinden çık return(rates_total); } |