MathSrand

Bir dizi (psuedo) rassal sayı oluşturmak için başlangıç değeri ayarlar.

void  MathSrand(
   int  seed      // başlangıç sayısı
   );

Parametreler

seed

[in]  Rassal sayı dizisi için başlangıç değeri.

Dönüş değeri

Dönüş değeri yok.

Not

MathRand() fonksiyonu bir dizi (psuedo) rassal sayı oluşturmak için kullanılır. MathSrand() fonksiyonunun belli bir değerle başlatılmasının sonucunda her zaman aynı (pseudo) rassal sayı dizisi elde edilir.

Tekrarlayan dizilerden kaçınmak için MathSrand(GetTickCount()) çağrısını kullanın; GetTickCount() değeri işletim sisteminin başlatılması anından itibaren artmaya başlar ve 49 gün boyunca, sisteme gömülü milisaniye sayacının sınırları aşılana kadar tekrar etmez. MathSrand(TimeCurrent()) çağrısı ise uygun bir çözüm değildir, çünkü TimeCurrent() son tik zamanını verir - ki bu değer, bir hafta gibi daha kısa bir süre içinde tekrar edebilir.

Rassal sayı üretecinin, göstergeler ve Uzman Danışmanlar için MathSrand() fonksiyonu ile OnInit() işleyicisi içinde başlatılması önerilir, böylece OnTick() veya OnCalculate() içinde gerçekleşecek tekrar-başlatma durumu önlenebilir.

MathSrand() fonksiyonunun yerine srand() fonksiyonunu da kullanabilirsiniz.

Örnek:

#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);
  }