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

 
MakarFX #:

Und wenn ja

Ich habe lange gebraucht, um herauszufinden, warum Ihre Lösung nicht zu einer Endlosschleife führt. Allerdings führt er sich auch 1 Mal selbst aus. Aber die obige Lösung hat mich dazu gebracht, einen booleschen Schalter zu erstellen.
ulong ms=0;
bool msFlag=0;

void OnTimer(){
  if(msFlag!=0 && GetMicrosecondCount()-ms > 100000){
    ObjectSetInteger(0,"button1",OBJPROP_STATE,false);
    msFlag=0;
  }
}

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
  {
    if(id==CHARTEVENT_OBJECT_CLICK && sparam=="button1"){
      ms=GetMicrosecondCount();
      msFlag=1;
      } 
  }
Jetzt wird der Code nur ausgeführt, wenn die Schaltfläche gedrückt wird. Aber was passiert, wenn das Terminal mehrere Tage lang läuft? In der Hilfe zu einer anderen Methode, die die Zeit zurückgibt, heißt es, dass es zu einem Überlauf kommen wird.

ulong ms=0;
bool msFlag=0;

int OnInit()
{
    EventSetMillisecondTimer(1);
    ...
}

void OnTimer(){
  if(msFlag!=0 && Seconds() > 20){
    ObjectSetInteger(0,"button1",OBJPROP_STATE,false);
    msFlag=0;
  }
}

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
  {
    if(id==CHARTEVENT_OBJECT_CLICK && sparam=="button1"){
      msFlag=1;
      }
  }
Derselbe Code, jedoch mit Seconds() anstelle von GetMicrosecondCount, funktioniert nicht. "Seconds() > 20" wenn höher - Taste bleibt im Zustand "gedrückt" stehen. Wenn niedriger - es funktioniert, aber so schnell, dass es fast unsichtbar ist (blinkt).
 
Nerd Trader #:
Ich konnte lange Zeit nicht verstehen, warum Ihre Lösung nicht zu einer Endlosschleife führt. Es wird jedoch auch 1 Mal alleine ausgeführt. Aber die obige Lösung hat mich dazu gebracht, einen booleschen Schalter zu erstellen.
Jetzt wird der Code nur ausgeführt, wenn die Schaltfläche gedrückt wird. Aber was passiert, wenn das Terminal mehrere Tage lang läuft? Die Hilfe für eine andere Methode, die Zeit zurückgibt, sagt, dass ein Überlauf auftreten wird.

Derselbe Code, jedoch mit Seconds() anstelle von GetMicrosecondCount, funktioniert nicht. "Seconds() > 20" wenn höher - Taste bleibt im Zustand "gedrückt" stehen. Wenn es niedriger ist, funktioniert es, aber so schnell, dass es fast unbemerkt ist (blinkt).

Dann sieht es so aus

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
      if(id==CHARTEVENT_OBJECT_CLICK && sparam=="button1")
         {ms=TimeCurrent();}
  }
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(ms!=0&&TimeCurrent()>ms)
     {
      ObjectSetInteger(0,"button1",OBJPROP_STATE,false);
      ms=0;
     }
  }
//+------------------------------------------------------------------+
 
MakarFX #:

Dann sieht es so aus

Nein, so funktioniert es nicht, und wenn Sekunden nicht funktionieren, TimeCurrent() erst recht nicht. Mileseconds ist bisher die einzige praktikable Variante, die allerdings einen Überlauf verursachen kann.
 
Nerd Trader #:
Nein, so funktioniert es nicht, wenn Sekunden nicht funktionieren, dann erst recht TimeCurrent(). Mileseconds ist bisher die einzige praktikable Variante, die allerdings einen Überlauf verursachen kann.
Es funktioniert!
 
MakarFX #:
Es funktioniert!
mmm funktioniert bei mir nicht: Die Taste löst sich nicht von selbst.
 
Nerd Trader #:
mmm funktioniert bei mir nicht: Die Taste löst sich nicht von selbst.
Der Markt ist jetzt geschlossen, TimeCurrent() ändert sich nicht. Prüfen Sie Krypto, es funktioniert an Wochenenden
 
MakarFX #:
Der Markt ist jetzt geschlossen, TimeCurrent() ändert sich nicht. Überprüfen Sie Krypto, es funktioniert an Wochenenden
Krypto wird bei meinem Broker am Wochenende nicht gehandelt. Ich habe es im Testgerät ausprobiert - es funktioniert nicht.
 
Nerd Trader #:
Krypto wird bei meinem Broker am Wochenende nicht gehandelt. Ich habe es im Testgerät ausprobiert - es funktioniert nicht.
Öffnen Sie die A-Markets Demo. Die Zeitschaltuhr funktioniert im Testgerät nicht.
 

Grüße, ich erhalte ein Array.

int arr[]={6,4,6,7,55,55,7,6,77,66,66,2,2};

Wie kann ich das ändern, so dass alle Zahlen vorhanden sind, aber ohne Wiederholungen?

int re[]={6,4,7,55,77,66,2};
 
Galim_V #:

Grüße, es gibt ein Array

Wie ändere ich es so, dass alle Zahlen vorhanden sind, aber ohne Wiederholung?

Sie können dies auch ohne Bibliotheken tun

int arr[]= {6,4,6,7,55,55,7,6,77,66,66,2,2};
int re[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
  int AS=ArraySize(arr);
  int n=0;
  for(int i=0; i<AS; i++) {
    if(ArraySearch(re, arr[i])==-1) {
      n++;
      ArrayResize(re,n);
      re[n-1]=arr[i];
    }
  }
  ArrayPrint(re);
}
//===============================================================================================
//------------------------------ Функция удаляет копии с массива -------------------------------+
//===============================================================================================
int ArraySearch(int& m[], int e)
{
  for(int i=0; i<ArraySize(m); i++) {
    if(m[i]==e) return(i);
  }
  return(-1);
}
//+------------------------------------------------------------------+