Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 86

 
fyords:
Imprimir os resultados do ObjectCreate, talvez haja aí um erro.

Obrigado. Irei definitivamente verificar, mas depois de resolver o novo problema. A EA trabalhou durante algum tempo e foi agora automaticamente removida do gráfico. Não posso pô-lo de volta, diz que o conjunto está cheio.

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. O compilador não jura em lado nenhum, não ocorre nada no depurador. Por favor, sugira uma solução para o problema

 
A próxima construção muito raramente pedirá sinais se não os utilizar.

Isto já foi corrigido.
 
Renat:
A próxima construção muito raramente pedirá sinais se não os utilizar.

Isto já foi corrigido.
Presumo que essa resposta não seja para mim.
 
Existe agora um erro técnico quando se tenta definir a EA no gráfico. Para onde devem ser enviados os detalhes do erro?
 
WindSW:

Porquê ArrayResize=0?

E parece que o ArrayInitialize deve ser acrescentado antes dele.

И

double H

É inicializada cada vez em loop?

Declare antes da função.

Actualização e verificação dupla de parênteses, falta-me um } em

CreateLevels
 
Silent:

Porquê ArrayResize=0?

Zeroing array Alto[]
 
WindSW:
Zeroing array Alto[]
Não, o seu tamanho é fixado em 0.
 
Silent:
Não, o seu tamanho é fixado em 0.
A informação mantém-se no tamanho 0? Qual é a forma correcta de o reiniciar?
 
WindSW:
A informação mantém-se no tamanho 0? Como é efectuada a zeragem correctamente?

O tamanho é fixado em zero e depois copia-se a matriz ali.

Tente isso.

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];
        }
     }
  } // скобки сразу парами ставьте, искать не прийдётся
Actualização corrigida do código, também int j
 
WindSW:
E com o tamanho 0 a informação fica?

E, se o matar, provavelmente poderia chamar a ArrayResize duas vezes, com 0, depois com o tamanho correcto da matriz.

Pode até ser mais rápido... Embora eu não saiba como seria em termos de alocação de memória.

Razão: