Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1693

 
Taras Slobodyanik #:

il est préférable d'utiliser IsVisualMode au lieu de IsTesting

Vous pouvez le faire sans IsVisualMode et sans IsTesting.

La question portait sur autre chose.

 

à propos de magic=rand()

C'est étrange que les tervuriers locaux ne se soient pas exclamés "Yobtv"...

Puisque vous étudiez la programmation ici, vérifiez combien de temps il faut pour faire un fackup. Quelles sont les chances d'obtenir un double magique dans des conditions plus ou moins réelles ? et cela vaut-il la peine de se lancer dans une telle aventure ?

 
Valeriy Yastremskiy #:

C'est également possible. Les chances de correspondance sont minces.

Il y a aussi un contrôle supplémentaire pour une correspondance, donc c'est bon pour les quais.

 
Maxim Kuznetsov #:

à propos de magic=rand()

C'est étrange que les tervuriers locaux ne se soient pas exclamés "Yobtv"...

Puisque vous étudiez la programmation ici, vérifiez combien de temps il faut pour la simuler. Quelles sont les chances d'obtenir un double magique dans des conditions plus ou moins réelles ? et cela vaut-il la peine de se lancer dans une telle aventure ?

De la référence :
"Pour s'assurer que vous obtenez une séquence non répétitive, utilisez MathSrand(GetTickCount()), puisque GetTickCount() s'est incrémenté depuis le démarrage du système d'exploitation et ne sera pas répété avant 49 jours".

 
MakarFX #:
oh, ça marche, merci... ahahh, seulement maintenant le bouton ouvre 150 ordres chaque tick sans s'arrêter....

a fait ainsi

if (IsTesting()) 
     {
      if(ObjectGetInteger(0,"button1",OBJPROP_STATE)==true)
        {
          ...
          ObjectSetInteger(0,"button1",OBJPROP_STATE,false);
        }
     }
 
Maxim Kuznetsov #:

c'est étrange que les experts terverains locaux n'aient pas crié en chœur "Yobtv"...

personne ne veut persuader, personne ne veut discuter, laissez l'homme apprendre... il se débrouillera tout seul

 
Maxim Kuznetsov #:

à propos de magic=rand()

il est étrange que les tervers locaux ne se soient pas exclamés en chœur "Yobtv"...

///

Duck, combien de fois ?

 
Nerd Trader #:
Oh, ça marche, merci... ahahh, seulement maintenant le bouton me fait ouvrir 150 ordres chaque tick sans s'arrêter...

a fait ainsi

Faites ceci

if (IsTesting()) 
     {
      if(ObjectGetInteger(0,"button1",OBJPROP_STATE)==true)
        {
          ObjectSetInteger(0,"button1",OBJPROP_STATE,false);
          ...
        }
     }
 

Le script provient de ce fil de discussion.

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
enum EResult {Ok,AllocError};

template<typename T>
EResult GetRepeat(const T &arr[],T &ret[],uint count)
  {
   int size=ArraySize(arr);   // Присваиваем переменной количество элементов массива arr
   if(ArrayResize(ret,size)!=size)
      return AllocError;// Устанавливаем новый размер массиву ret, равный size
   int ii=0;
   for(int i=0; i<size;)
     {
      T tmp=arr[i];        // переменная перегруженной функции с значениями массива arr
      uint repeatCount=1;  // будем считать одинаковые подряд значения массива arr
      while(++i<size&&arr[i]==tmp) // если следующее значение то же
         ++repeatCount;              // плюсуем repeatCount
      if(repeatCount>=count)
         ret[ii++]=tmp;
     }
   return ArrayResize(ret,ii)==ii?Ok:AllocError;// новый размер массива ret
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   int si=0;
   int arr[]= {1,2,4,4,4,4,4,4,7,55,55,7,7,7,7,79,77,66,66,2,2,2,2,2};
   int ret[];
   if(!GetRepeat(arr,ret,cou))
      si=ArraySize(ret);
   for(int i=0; i<si; i++)
      Print(si," ret[i] =",ret[i]);
  }    
//+------------------------------------------------------------------+

Je ne comprends pas cette ligne.

if(!GetRepeat(arr,ret,cou))

Pourquoi avec " !"? Pourquoi le type énuméré est-il sélectionné ?

 

Je ne sais pas pourquoi cela est fait, mais il s'agit essentiellement d'une fonction booléenne.


L'auteur a dû penser à quelque chose comme ça :

Dans un enum, les éléments commencent par zéro : Ok=0, AllocError=1

c'est-à-dire que GetRepeat renvoie soit 0 soit 1,

et dans cp : 0 est faux, 1 est vrai,

respectivement ! GetRepeat est la négation de la valeur de retour.


C'est un casse-tête, car il est si facile de ne pas se prendre la tête et de ne pas prendre la tête des gens :

bool GetRepeat(...)
   {
   ...
   return ArrayResize(ret,ii)==ii;
   }
Raison: