Erro ao copiar DIDI index em um EA.

 

Boa noite pessoal, estou criando um EA a partir do Indicador DIDI index, porem ao capiar o indicador para o robô e tentar fazer backtest tenho vários erros, a copia esta sendo feita assim, se puderem me ajudar a encontrar o erro.

// Copiando Indicador DIDI

    double FAST[],MEAN[],SLOW[];

   int IndHandle3=iCustom(_Symbol,_Period,"Universal\\DIDI_INDEX");

   CopyBuffer(IndHandle3,0,0,4,FAST);

   CopyBuffer(IndHandle3,1,0,4,MEAN);

   CopyBuffer(IndHandle3,2,0,4,SLOW);


Obrigado,

 
NFONSECA:

Boa noite pessoal, estou criando um EA a partir do Indicador DIDI index, porem ao capiar o indicador para o robô e tentar fazer backtest tenho vários erros, a copia esta sendo feita assim, se puderem me ajudar a encontrar o erro.

// Copiando Indicador DIDI

    double FAST[],MEAN[],SLOW[];

   int IndHandle3=iCustom(_Symbol,_Period,"Universal\\DIDI_INDEX");

   CopyBuffer(IndHandle3,0,0,4,FAST);

   CopyBuffer(IndHandle3,1,0,4,MEAN);

   CopyBuffer(IndHandle3,2,0,4,SLOW);


Obrigado,


double FAST[],MEAN[],SLOW[];

int OnInit()
{
   int IndHandle3=iCustom(_Symbol,_Period,"Universal\\DIDI_INDEX");

   if(IndHandle3==INVALID_HANDLE)
     {
      PrintFormat("Falha ao criar IndHandle3 para o símbolo %s/%s, código de erro %d",
                  _Symbol,
                  EnumToString(_Period),
                  GetLastError());
      return(INIT_FAILED);
     }
  return(INIT_SUCCEEDED);
}

OnTick()
{
   CopyBuffer(IndHandle3,0,0,4,FAST);
   CopyBuffer(IndHandle3,1,0,4,MEAN);
   CopyBuffer(IndHandle3,2,0,4,SLOW);


}
 
NFONSECA:

Boa noite pessoal, estou criando um EA a partir do Indicador DIDI index, porem ao capiar o indicador para o robô e tentar fazer backtest tenho vários erros, a copia esta sendo feita assim, se puderem me ajudar a encontrar o erro.

// Copiando Indicador DIDI

    double FAST[],MEAN[],SLOW[];

   int IndHandle3=iCustom(_Symbol,_Period,"Universal\\DIDI_INDEX");

   CopyBuffer(IndHandle3,0,0,4,FAST);

   CopyBuffer(IndHandle3,1,0,4,MEAN);

   CopyBuffer(IndHandle3,2,0,4,SLOW);


Obrigado,

Bom dia Rogerio, obrigado pela ajuda, mas ainda ha algo errado, me parece ser algo relacionado a inserção do indicador DIDI e a janela de visualização.

O código ficou assim:

double FAST[],MEAN[],SLOW[];

int OnInit()

  {

   int IndHandle1=iCustom(_Symbol,_Period,"Universal\\IND_ROMPIMENTO_BARRA1");

   ChartIndicatorAdd(0,0,IndHandle1);


   int IndHandle2=iCustom(_Symbol,_Period,"Universal\\ATR_STOP4");

   ChartIndicatorAdd(0,0,IndHandle2);


   int IndHandle3=iCustom(_Symbol,_Period,"Universal\\DIDI_INDEX");

   if(IndHandle3==INVALID_HANDLE)

     {

      PrintFormat("Falha ao criar IndHandle3 para o símbolo %s/%s, código de erro %d",

                  _Symbol,

                  EnumToString(_Period),

                  GetLastError());

      return(INIT_FAILED);

     }

   return(INIT_SUCCEEDED);

  }

void OnTick()

  {

//------------------------------------------------------------------

// Copiando Indicador de Maxima e Minima da primeira barra

   double Up[],Down[];

   ArraySetAsSeries(Up,true);

   ArraySetAsSeries(Down,true);


   int IndHandle1=iCustom(_Symbol,_Period,"Universal\\IND_ROMPIMENTO_BARRA1");


   CopyBuffer(IndHandle1,0,0,4,Up);

   CopyBuffer(IndHandle1,1,0,4,Down);

//------------------------------------------------------------------   

// Copiando Indicador ATR_STOP4

   double UP_ATR[],DOWN_ATR[];

   int IndHandle2=iCustom(_Symbol,_Period,"Universal\\ATR_STOP4");

   CopyBuffer(IndHandle2,0,0,4,UP_ATR);

   CopyBuffer(IndHandle2,1,0,4,DOWN_ATR);

//------------------------------------------------------------------

// Copiando Indicador DIDI

   CopyBuffer(IndHandle3,0,0,4,FAST);

   CopyBuffer(IndHandle3,1,0,4,MEAN);

   CopyBuffer(IndHandle3,2,0,4,SLOW);


Mas esta com erro

 

Boa tarde,

1) Use o ALT-S para postar códigos.

2) Você copiou sem procurar entender minha sugestão, entao:

2.1) O HANDLE dos indicadores  devem ser criados somente uma vez de prefêrencia no OnInit(), então retire a criação do HANDLE dentro do OnTick().  (*)

2.2) Teste o retorno da criação do HANDLE dos três.


3) Bom dia Rogerio, obrigado pela ajuda, mas ainda ha algo errado, me parece ser algo relacionado a inserção do indicador DIDI e a janela de visualização.

Se você acha que é isso por que não testou, ainda?

  if(!ChartIndicatorAdd(0,subwindow,indicator_handle))
     {
      PrintFormat("Falha para adicionar indicador MACD na janela do gráfico %d. Código de erro %d",
                  subwindow,GetLastError());
     }


3) Feito as alterações, compile e plugue o programa na janela gráfica e veja o resultado na aba EXPERTS.


(*) Nas situações que precisar criar o mesmo handle com novos operadores o handle corrente deve ser liberado usando o comando IndicatorRelease( handle );

Razão: