Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1529

 
Alexey Viktorov:

Sim, e eu procurei para responder a você também.

Eu não podia - eu estava escrevendo do meu telefone e é mais rápido apenas escrever a pergunta :)

 
Alexey Viktorov:

Não é imposta pelos desenvolvedores, mas por um moderador. Quanto aos valores BB, então Artem lhe disse que é mais fácil obter tudo diretamente... a seqüência é assim...

  1. Variáveis e arrays declarados para obter valores indicadores. Se necessário, 3 no máximo. Se não precisarmos de uma média, duas matrizes serão suficientes.
  2. No OnInit() recebemos o cabo indicador.
  3. Em OnTick() ou em alguma outra função CopyBuffer() para cada linha separadamente, tantos quantos forem necessários.
  4. Dessas matrizes você obtém os valores das linhas indicadoras nas barras que são interessantes.

É ISTO. Por que se preocupar com OOP¿¿¿¿¿? Infelizmente, não posso responder diretamente à sua pergunta, porque não estou usando-o. É mais fácil para mim como eu descrevi. Há apenas 4 ações.

Por favor, diga-me por que não funciona na Inite? E como faço para que funcione?


#property strict

//--- индикаторные буферы
double         UpperBuffer[];
double         LowerBuffer[];
double         MiddleBuffer[];
//--- переменная для хранения хэндла индикатора iBands
int    bb_handle;

int OnInit(){//////////////***OnInit()****///*************OnInit()*******/////////***/////////////////////////OnInit()

bb_handle=iBands(NULL, 0, 20, 0, 2.0, PRICE_CLOSE);

Print("bb_handle ", bb_handle);

Print("OnInit()  ", BB_up(0), "  ", BB_mi(0), "  ", BB_lo(0));

return(INIT_SUCCEEDED);
}
void OnTick(){




Print("OnTick()  ", BB_up(0), "  ", BB_mi(0), "  ", BB_lo(0));

}
//-------------------------------------------------------1
double BB_up(int in_shift){
   CopyBuffer(bb_handle, 1, in_shift, 1, UpperBuffer);
   return UpperBuffer[0];
}
double BB_mi(int in_shift){
   CopyBuffer(bb_handle, 0, in_shift, 1, MiddleBuffer);
   return MiddleBuffer[0];
}
double BB_lo(int in_shift){
   CopyBuffer(bb_handle, 2, in_shift, 1, LowerBuffer);
   return LowerBuffer[0];
}
 
Andrey Sokolov:

Você pode me dizer por que isso não funciona na Inite? E como faço para que funcione?


iBands - Indicadores técnicos - Referência MQL5 - Algoritmo/Automatic Trading Language Reference for MetaTrader 5
Документация по MQL5: Технические индикаторы / iBands
Документация по MQL5: Технические индикаторы / iBands
  • www.mql5.com
iBands - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Andrey Sokolov:

então por que não está funcionando?

Você quer conversar? - Ou você quer trabalhar em si mesmo?

 
SanAlex:

Você quer conversar? - Ou você gostaria de trabalhar em si mesmo?

Estou vendo. Obrigado. Alguém mais pode sugerir algo?

 
Andrey Sokolov:

Você pode me dizer por que isso não funciona na Inite? E como faço para que funcione?


Porque o indicador ainda não foi calculado.

https://www.mql5.com/ru/docs/series/barscalculated


a seção OnInit() não é o melhor lugar para obter o ambiente do terminal, eu acho que funciona de forma lógica e correta
 
Igor Makanu:

porque o indicador ainda não foi calculado

https://www.mql5.com/ru/docs/series/barscalculated

👍

 
Igor Makanu:


a seção OnInit() não é o melhor lugar para obter o ambiente do terminal, eu acho que funciona de forma lógica e correta

Inicia porque você precisa fazer cálculos sobre a história na inicialização, acrescentou uma espera como no exemplo, tudo está bem, obrigado

 
Andrey Sokolov:

acrescentou uma espera, como no exemplo, tudo está bem.

Só não se surpreenda quando ele parar de funcionarou funcionarintermitentemente.

Razão: