Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1693

 
Taras Slobodyanik #:

è meglio usare IsVisualMode invece di IsTesting

Potete farlo senza IsVisualMode e senza IsTesting

La domanda riguardava qualcos'altro

 

su magic=rand()

È strano che i terrier locali non abbiano esclamato "Yobtv"...

Visto che qui si studia la programmazione, controllate quanto tempo ci vuole per il fackup. Quali sono le possibilità di ottenere un duplicato magico in condizioni più o meno reali ? e vale la pena di calpestare un tale rastrello

 
Valeriy Yastremskiy #:

Anche questo è possibile. Le possibilità di una corrispondenza sono scarse.

C'è anche un controllo extra per una partita, quindi è OK docks.

 
Maxim Kuznetsov #:

su magic=rand()

È strano che i terrier locali non abbiano esclamato "Yobtv"...

Visto che qui si studia la programmazione, controllate quanto tempo ci vuole per il fackup. Quali sono le possibilità di ottenere un duplicato magico in condizioni più o meno reali ? e vale la pena di calpestare un tale rastrello

Dal riferimento:
"Per assicurarvi di ottenere una sequenza non ripetitiva, usate MathSrand(GetTickCount()), poiché GetTickCount() è stato incrementato dall'avvio del sistema operativo e non sarà ripetuto per 49 giorni".

 
MakarFX #:
Oh, questo funziona, grazie... ahahh, solo che ora il pulsante apre 150 ordini ogni tick senza fermarsi...

ha fatto così

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

è strano che gli esperti locali di terver non abbiano esclamato in coro "Yobtv"...

nessuno vuole persuadere, nessuno vuole discutere, lasciate che l'uomo impari... lo capirà da solo

 
Maxim Kuznetsov #:

su magic=rand()

è strano che i terrier locali non abbiano esclamato con un coro "Yobtv"...

///

Anatra, quante volte?

 
Nerd Trader #:
oh questo funziona, grazie... ahahh, solo che ora il pulsante mi fa aprire 150 ordini ogni tick senza fermarsi...

ha fatto così

Fare questo

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

Lo script è da questo thread.

//+------------------------------------------------------------------+
//| 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]);
  }    
//+------------------------------------------------------------------+

Non capisco questa linea.

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

Perché con "!"? Perché viene selezionato il tipo enumerato?

 

Non so perché questo viene fatto, ma è essenzialmente una funzione booleana.


L'autore deve aver pensato a qualcosa del genere:

In enum, gli elementi iniziano con zero: Ok=0, AllocError=1

cioè GetRepeat restituisce o 0 o 1,

e in cp: 0 è falso, 1 è vero,

rispettivamente ! GetRepeat è una negazione del valore di ritorno


È un grattacapo, perché è così facile non incasinare la tua testa e quella della gente:

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