MathSrand

Établit l'état initial de la génération des nombres entiers quasi-aléatoires.

void  MathSrand(
   int  seed      // nombre initialisant
   );

Paramètres

seed

[in]  Le nombre initial pour une série de nombres accidentels.

La valeur rendue

Il n'y a pas de valeur rendue.

Note

La fonction MathRand() est destinée à la génération de la succession des nombres quasi-aléatoires. L' appel MathSrand() avec le nombre défini initialisant permet de recevoir toujours la même succession des nombres quasi-aléatoires.

Pour la réception garantie de la succession qui ne se répéte pas utilisez l'appel MathSrand(GetTickCount()), puisque la valeurGetTickCount()augmente dès le moment du lancement du système d'exploitation et ne se répète pas pendant 49 jours, jusqu'au le moment quand le compteur inséré des millisecondes ne débordera pas. L'utilisation MathSrand(TimeCurrent()) ne convient pas patce que la fonctionTimeCurrent()rend le temps de l'arrivée du dernier tick, qui ne peut ne pas être changé longtemps, par exemple, aux jours fériés.

Il est mieux de faire l'initialisation du générateur des nombres quasi-aléatoires à l'aide de MathSrand () pour les indicateurs et les experts dans le gestionnaire OnInit (), cela délivrera des lancements suivants multiples du générateur dans OnTick() et OnCalculate().

Au lieu de la fonction MathSrand() on peut utiliser la fonctionsrand().

Exemple:

#property description "L'indicateur présente le théorème central limite, qui déclare:"
#property description "La somme du nombre assez grand de variables aléatoires faiblement dépendantes, "
#property description "ayant approximativement les mêmes échelles (ou nul opérande de somme n'est pas dominante,"
#property description "ne contribue pas le dépôt définissant à la somme), a la distribution proche du normal."
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- les propriétés de la construction graphique
#property indicator_label1  "Label"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRoyalBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  5
//--- variable input
input int      sample_number=10;
//--- le tampon d'indicateur pour le dessin de la distribution
double         LabelBuffer[];
//--- le compteur des ticks
double         ticks_counter;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- le liage du tableau et du tampon d'indicateur
   SetIndexBuffer(0,LabelBuffer,INDICATOR_DATA);
//--- déploierons le tampon d'indicateur du présent au passé
   ArraySetAsSeries(LabelBuffer,true);
//--- initialisons le générateur des nombres aléatoires
   MathSrand(GetTickCount());
//--- initialisons le compteur des ticks
   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[])
  {
//--- le tampon d'indicateur sera remis à zéro au compteur nul
   if(ticks_counter==0) ArrayInitialize(LabelBuffer,0);
//--- augmentons le compteur
   ticks_counter++;
//--- il faut périodiquement enlever le compteur des ticks pour ranimer la distribution
   if(ticks_counter>100)
     {
      Print("on a remit à zéro les valeurs de l'indicateur, commencerons à remplir les cellules de nouveau");
      ticks_counter=0;
     }
//--- recevrons un échantillon de valeurs aléatoires en tant que la somme de trois nombres de 0 à 7
   for(int i=0;i<sample_number;i++)
     {
      //---le calcul de l'index de la cellule, où tombera un nombre aléatoire comme la somme des trois autres
      int rand_index=0;
      //--- recevrons trois nombres aléatoires de 0 jusqu'à 7
      for(int k=0;k<3;k++)
        {
         //--- le reste de la division sur 7 rendra la valeur de 0 jusqu'à 6
         rand_index+=MathRand()%7;
        }
      //--- augmentons sur une unité la valeur dans la cellule avec le numéro rand_index
      LabelBuffer[rand_index]++;
     }
//--- la sortie du gestionnaire OnCalculate()
   return(rates_total);
  }