Erros, bugs, perguntas - página 276

 

Muito obrigado pela sua prontidão)

 

Sobre o tema. Quase o consegui, mas o COUNTER não começa no diário de bordo do terminal diz


retirado

carregado com sucesso


funcionou!!!!
 

tem aqui um erro.

   v161_handle=iCustom(NULL,0,"ErolМТ5");                            
   v162_handle=iCustom(NULL,0,"ErolМТ5");
   Sum_handle=iCustom(NULL,0,"ErolМТ5");
Neste caso, todas as três variáveis terão o mesmo manípulo. como está a chamar três vezes o mesmo indicador.
 
sergey1294:

tem aqui um erro

Neste caso, todas as três variáveis terão o mesmo manípulo, porque está a chamar três vezes o mesmo indicador.

Sim, mas, segundo entendi, os valores das linhas de índice do indicador (os valores das 3 linhas)

conseguimos passar:

CopyBuffer(v161_handle,1,0,3,Spr1Buffer)
CopyBuffer(v162_handle,2,0,3,Spr2Buffer)
CopyBuffer(Sum_handle,4,0,3,SumBuffer)

aqui 1, 2 e 4 são os valores do índice das linhas indicadoras, que são armazenados no buffer,

que depois comparamos uns com os outros.

Mas isso não é um problema, não calcula correctamente com estes índices de linha indicadora

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов - Документация по MQL5
 

Algum conselho sobre para onde ir ou o que fazer aqui?


void OnTick()
{  
   ArraySetAsSeries(Spr1Buffer,true);
   ArraySetAsSeries(Spr2Buffer,true);
   ArraySetAsSeries(SumBuffer,true);

   if(CopyBuffer(v161_handle,1,0,3,Spr1Buffer)<0 || CopyBuffer(v162_handle,2,0,3,Spr2Buffer)<0 || CopyBuffer(Sum_handle,4,0,3,SumBuffer)<0)
      {
      Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
      }
   bool SellSpr1 =(Spr1Buffer[1] > Spr2Buffer[1]);
   bool SellSum1 =(SumBuffer[1]>=Sp);
   if(SellSpr1 && SellSum1 && !PositionSelect(_Symbol))     
      {
        PositionOpenSell1();
      }
   bool BuySpr1 =(Spr1Buffer[1] < Spr2Buffer[1]);
   bool BuySum1 =(SumBuffer[1]>=Sp);
   if(BuySpr1 && BuySum1 && !PositionSelect(_Symbol))     
      {
        PositionOpenBuy1();
      }
 
alexluek:

Sim, mas, segundo entendi, os valores das linhas de índice do indicador (os valores das 3 linhas)

conseguimos passar:

aqui 1, 2 e 4 são os valores do índice das linhas indicadoras, que são armazenados no buffer,

que depois comparamos uns com os outros.

Mas não é um problema, não calcula correctamente de acordo com estes índices de linhas indicadoras

É suficiente carregar uma cópia do indicador e abordar os índices de buffer necessários através do buffer de cópia
 
sergey1294:
Basta carregar uma cópia do indicador, e endereçar o índice tampão desejado através do copybuffer

não é não, não consigo obter os valores da 2ª linha

uma vez que são comparados os valores de 2 índices de linha armazenados em diferentes amortecedores.


   bool SellSpr1 =(Spr1Buffer[1] > Spr2Buffer[1]);
 
alexluek:

Errado, não é possível obter os valores da 2ª linha

uma vez que são comparados os valores de 2 índices de linha armazenados em diferentes amortecedores.


pode haver um erro no próprio indicador
 
sergey1294:
pode haver erros no próprio indicador

o indicador lê correctamente

 

Salvar o afogamento é o trabalho do afogamento.

Pode vir a ser útil para o futuro:

Para chamar 2 ou mais linhas indicadoras num EA para a barra actual

escolher 1 manípulo e chamar o indicador, depois utilizar o copybuffer para guardar os valores do índice

e depois trabalhar com estes amortecedores. sergey1294 obrigado pela ajuda!

int OnInit()
  {
   v161_handle=iCustom(NULL,0,"LeroyMТ5");                            
   if(v161_handle<0)
     {
      Alert("Ошибка при создании индикаторов: ",GetLastError());
      return(-1);
     }
   return(0);
  }


void OnTick()
{  
   ArraySetAsSeries(Sp1Buffer,true);
   ArraySetAsSeries(Sp2Buffer,true);
   ArraySetAsSeries(Sp3Buffer,true);
   if(CopyBuffer(v161_handle,1,0,1,Sp1Buffer)<0 || CopyBuffer(v161_handle,2,0,1,Sp2Buffer)<0 || CopyBuffer(v161_handle,4,0,1,Sp3Buffer)<0)
      {
      Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
      return;
      }    
   bool SellSpr1 =( Sp1Buffer[0]> Sp2Buffer[0] && Sp3Buffer[0]>=Sp );
   if(SellSpr1  && !PositionSelect(_Symbol))     
      {
        PositionOpenSell1();
      }
   bool BuySpr1 =( Sp1Buffer[0]< Sp2Buffer[0] && Sp3Buffer[0]>=Sp );
   if(BuySpr1 && !PositionSelect(_Symbol));   
      {
        PositionOpenBuy1();
      }
}