Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 86

 
fyords:
Stampa i risultati di ObjectCreate, forse c'è un errore.

Grazie. Controllerò sicuramente, ma dopo aver risolto il nuovo problema. L'EA ha funzionato per un po' e ora è stato rimosso automaticamente dal grafico. Non posso rimetterlo a posto, dice che l'array è pieno.

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);
  }

Candela=1000. Il compilatore non giura da nessuna parte, non appare nulla nel debugger. Si prega di suggerire una soluzione al problema

 
La prossima build chiederà molto raramente dei segnali se non li usate.

Questo è già stato corretto.
 
Renat:
La prossima build chiederà molto raramente dei segnali se non li usate.

Questo è già stato corretto.
Immagino che questa risposta non sia per me.
 
Ora c'è un errore tecnico quando si cerca di impostare l'EA sul grafico. Dove si devono inviare i dettagli dell'errore?
 
WindSW:

Perché ArrayResize=0?

E sembra che ArrayInitialize debba essere aggiunto prima di esso.

И

double H

Viene inizializzato ogni volta nel ciclo?

Dichiararlo prima della funzione.

Aggiornamento e doppio controllo delle parentesi, mi manca un } in

CreateLevels
 
Silent:

Perché ArrayResize=0?

Azzeramento dell'array High[]
 
WindSW:
Azzeramento dell'array High[]
No, hai impostato la sua dimensione a 0.
 
Silent:
No, hai impostato la sua dimensione a 0.
L'informazione rimane a dimensione 0? Qual è il modo corretto per resettarlo?
 
WindSW:
L'informazione rimane a dimensione 0? Come si esegue correttamente l'azzeramento?

Si imposta la dimensione a zero e poi si copia l'array lì.

Prova questo.

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];
        }
     }
  } // скобки сразу парами ставьте, искать не прийдётся
L'aggiornamento ha corretto il codice, anche int j
 
WindSW:
E con la dimensione 0 l'informazione rimane?

E, se lo uccidete, potreste probabilmente chiamare ArrayResize due volte, con 0, poi con la giusta dimensione dell'array.

Potrebbe anche essere più veloce... Anche se non so come sarebbe in termini di allocazione della memoria.

Motivazione: