Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1693

 
Taras Slobodyanik #:

Es ist besser, IsVisualMode anstelle von IsTesting zu verwenden.

Sie können es ohne IsVisualMode und ohne IsTesting tun

Die Frage bezog sich auf etwas anderes

 

über magic=rand()

Es ist merkwürdig, dass die lokalen Terversen nicht "Yobtv" gerufen haben...

Da Sie hier das Programmieren lernen, sollten Sie prüfen, wie lange es dauert, es nachzumachen. Wie hoch sind die Chancen, ein magisches Duplikat unter mehr oder weniger realen Bedingungen zu erhalten, und lohnt es sich, auf eine solche Harke zu treten?

 
Valeriy Yastremskiy #:

Auch das ist möglich. Die Chancen auf eine Übereinstimmung sind gering.

Es gibt auch eine zusätzliche Prüfung für eine Übereinstimmung, also ist es OK Docks.

 
Maxim Kuznetsov #:

über magic=rand()

Es ist merkwürdig, dass die lokalen Terversen nicht "Yobtv" gerufen haben...

Da Sie hier Programmieren studieren, sollten Sie prüfen, wie lange es dauert, bis ein Fehler auftritt. Wie hoch sind die Chancen, unter mehr oder weniger realen Bedingungen ein magisches Duplikat zu erhalten, und lohnt es sich, auf eine solche Harke zu treten?

Aus der Referenz:
"Um sicherzustellen, dass Sie eine sich nicht wiederholende Sequenz erhalten, verwenden Sie MathSrand(GetTickCount()), da GetTickCount() seit dem Start des Betriebssystems inkrementiert wird und seit 49 Tagen nicht mehr wiederholt wird"

 
MakarFX #:
Oh, das funktioniert, danke... ahahh, nur jetzt öffnet die Schaltfläche 150 Aufträge pro Tick ohne Unterbrechung...

tat dies

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

Es ist merkwürdig, dass die lokalen Terver-Experten nicht im Chor "Yobtv" gerufen haben...

niemand will überreden, niemand will streiten, lass den Mann lernen... er wird es selbst herausfinden

 
Maxim Kuznetsov #:

über magic=rand()

Es ist seltsam, dass die lokalen Tervers nicht im Chor "Yobtv" gerufen haben...

///

Duck, wie viele Male?

 
Nerd Trader #:
Oh, das funktioniert, danke... ahahh, nur jetzt hat mich die Schaltfläche dazu gebracht, jeden Tick 150 Aufträge ohne Unterbrechung zu öffnen...

tat dies

Tun Sie dies

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

Das Skript stammt aus diesem 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]);
  }    
//+------------------------------------------------------------------+

Ich verstehe diesen Satz nicht.

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

Warum mit "!" ? Warum wird der Aufzählungstyp ausgewählt?

 

Ich weiß nicht, warum das so ist, aber es ist im Wesentlichen eine boolesche Funktion.


So etwas muss sich der Autor ausgedacht haben:

Die Aufzählungselemente beginnen mit Null: Ok=0, AllocError=1

das heißt, GetRepeat gibt entweder 0 oder 1 zurück,

und in cp: 0 ist falsch, 1 ist wahr,

bzw. ! GetRepeat ist eine Negation des Rückgabewerts


Es ist sehr verwirrend, weil es so einfach ist, nicht mit dem eigenen Kopf und dem der anderen zu spielen:

bool GetRepeat(...)
   {
   ...
   return ArrayResize(ret,ii)==ii;
   }
Grund der Beschwerde: