Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 86

 
fyords:
Drucken Sie die ObjectCreate-Ergebnisse aus, vielleicht liegt dort ein Fehler vor.

Ich danke Ihnen. Ich werde das auf jeden Fall überprüfen, aber erst nachdem ich das neue Problem behoben habe. Der EA hat eine Zeit lang funktioniert und wurde jetzt automatisch aus dem Chart entfernt. Ich kann sie nicht zurücklegen, weil das Feld voll ist.

void CreateLevels()
   {
      double High[];
      ArrayResize(High,0);
      ArraySetAsSeries(High,true);
      CopyHigh(_Symbol,_Period,0,Candle,High);

      for(int j=Nachalo;j<=Candle;j++)
         {
          //--- поиск макс -----------------------------------
          if(iHighest(Symbol(),0,10,MN*2,j-MN)==j)
            {
             double H=High[j];
            }
int iHighest(string symbol,int tf,int type,int count,int start)
  {
   if(start<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(count<=0) count=Bars(symbol,timeframe);
   if(type==10)                                 // MODE_HIGH
     {
      double High[];
      ArraySetAsSeries(High,true);
      CopyHigh(symbol,timeframe,start,count,High);
      return(ArrayMaximum(High,0,count)+start);
     }
   return(0);
  }

Kerze=1000. Der Compiler flucht nicht, im Debugger erscheint nichts. Bitte schlagen Sie eine Lösung für dieses Problem vor

 
Der nächste Build wird sehr selten nach Signalen fragen, wenn Sie sie nicht verwenden.

Dies wurde bereits korrigiert.
 
Renat:
Der nächste Build wird sehr selten nach Signalen fragen, wenn Sie sie nicht verwenden.

Dies wurde bereits korrigiert.
Ich nehme an, diese Antwort ist nicht für mich bestimmt.
 
Es gibt jetzt einen technischen Fehler, wenn man versucht, den EA auf den Chart zu setzen. Wohin sollen die Einzelheiten des Fehlers geschickt werden?
 
WindSW:

Warum ArrayResize=0?

Und es sieht so aus, als ob ArrayInitialize davor hinzugefügt werden sollte.

И

double H

Wird sie jedes Mal in der Schleife initialisiert?

Deklarieren Sie sie vor der Funktion.

Aktualisieren und überprüfen Sie die Klammern, ich vermisse ein } in

CreateLevels
 
Silent:

Warum ArrayResize=0?

Nullstellung Array High[]
 
WindSW:
Nullstellung Array High[]
Nein, Sie setzen seine Größe auf 0.
 
Silent:
Nein, Sie setzen seine Größe auf 0.
Bleibt die Information auf Größe 0? Wie setzt man sie richtig zurück?
 
WindSW:
Bleibt die Information auf Größe 0? Wie wird der Nullabgleich korrekt durchgeführt?

Sie setzen die Größe auf Null und kopieren dann das Array dorthin.

Versuchen Sie das.

void CreateLevels()
  {
   double High[];
   ArrayResize(High,Candle); // размер = Candle
   ArrayInitialize(High,NULL); // инициализация нулем
   ArraySetAsSeries(High,true);
   CopyHigh(_Symbol,_Period,0,Candle,High);

   double H; // вынес
   int j;    // вынес
   for(j=Nachalo;j<=Candle;j++)
     {
      //--- поиск макс -----------------------------------
      if(iHighest(Symbol(),0,10,MN*2,j-MN)==j)
        {
         H=High[j];
        }
     }
  } // скобки сразу парами ставьте, искать не прийдётся
Upd hat den Code korrigiert, auch int j
 
WindSW:
Und bei Größe 0 bleibt die Information erhalten?

Und wenn Sie es töten, könnten Sie wahrscheinlich ArrayResize zweimal aufrufen, mit 0, dann mit der richtigen Array-Größe.

Es könnte sogar schneller sein... Ich weiß allerdings nicht, wie es mit der Speicherzuweisung aussehen würde.