Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 86

 
fyords:
Imprime los resultados de ObjectCreate, tal vez haya un error allí.

Gracias. Definitivamente lo comprobaré, pero después de arreglar el nuevo problema. El EA funcionó durante un tiempo y ahora se ha eliminado automáticamente del gráfico. No puedo volver a ponerlo, dice que la matriz está llena.

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

Vela=1000. El compilador no jura nada, no aparece nada en el depurador. Por favor, sugiera una solución al problema

 
La siguiente construcción muy raramente pedirá señales si no las usas.

Esto ya se ha corregido.
 
Renat:
La siguiente construcción muy raramente pedirá señales si no las usas.

Esto ya se ha corregido.
Supongo que esa respuesta no es para mí.
 
Ahora hay un error técnico cuando se intenta configurar el EA en el gráfico. ¿Adónde hay que enviar los detalles del error?
 
WindSW:

¿Por qué ArrayResize=0?

Y parece que ArrayInitialize debería añadirse antes.

И

double H

¿Se inicializa cada vez en el bucle?

Decláralo antes de la función.

Actualiza y revisa dos veces los paréntesis, me falta uno } en

CreateLevels
 
Silent:

¿Por qué ArrayResize=0?

Puesta a cero de la matriz High[]
 
WindSW:
Puesta a cero de la matriz High[]
No, se fija su tamaño en 0.
 
Silent:
No, se fija su tamaño en 0.
¿Se mantiene la información a tamaño 0? ¿Cuál es la forma correcta de restablecerlo?
 
WindSW:
¿Se mantiene la información a tamaño 0? ¿Cómo se realiza correctamente la puesta a cero?

Estableces el tamaño a cero y luego copias el array allí.

Inténtalo.

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];
        }
     }
  } // скобки сразу парами ставьте, искать не прийдётся
Actualización corregida del código, también int j
 
WindSW:
¿Y con el tamaño 0 la información se queda?

Y, si lo matas, probablemente podrías llamar a ArrayResize dos veces, con 0 y luego con el tamaño correcto del array.

Incluso podría ser más rápido... Aunque no sé cómo se vería en términos de asignación de memoria.