MT5 construir 1455
Indicador para o teste:
#property indicator_buffers 0
#property indicator_plots 0
int OnInit(void) {return(INIT_SUCCEEDED);}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &Time[],
const double &Open[],
const double &High[],
const double &Low[],
const double &Close[],
const long &TickVolume[],
const long &Volume[],
const int &Spread[]
) {
static int si_Tick = 0;
Print(++si_Tick, ": prev_calculated = ", prev_calculated);
return(rates_total);
}
1. Colocação do indicador na tabela
2. Feche o terminal
3. Terminal aberto
Diário de bordo:
2016.10.17 08:04:38.757 Test (USDJPY,M15) 2: prev_calculated = 100322
2016.10.17 08:04:39.060 Test (USDJPY,M15) 3: prev_calculated = 0
2016.10.17 08:04:39.837 Test (USDJPY,M15) 4: prev_calculated = 100322
2016.10.17 08:04:39.837 Test (USDJPY,M15) 5: prev_calculated = 100322
...
Estou perdendo algo ou é impossível confiar na variável pré-calculada, tenho que esmagar a muleta?
MT5 construir 1455
Indicador para o teste:
#property indicator_buffers 0
#property indicator_plots 0
int OnInit(void) {return(INIT_SUCCEEDED);}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &Time[],
const double &Open[],
const double &High[],
const double &Low[],
const double &Close[],
const long &TickVolume[],
const long &Volume[],
const int &Spread[]
) {
static int si_Tick = 0;
Print(++si_Tick, ": prev_calculated = ", prev_calculated);
return(rates_total);
}
1. Colocação do indicador na tabela
2. Feche o terminal
3. Terminal aberto
Diário de bordo:
2016.10.17 08:04:38.757 Test (USDJPY,M15) 2: prev_calculated = 100322
2016.10.17 08:04:39.060 Test (USDJPY,M15) 3: prev_calculated = 0
2016.10.17 08:04:39.837 Test (USDJPY,M15) 4: prev_calculated = 100322
2016.10.17 08:04:39.837 Test (USDJPY,M15) 5: prev_calculated = 100322
...
Estou perdendo algo ou é impossível confiar na variável pré-calculada, tenho que esmagar a muleta?
A variável pré_calculada pode ser redefinida para 0 mesmo sem histórico de paginação se o checksum mudou (esta é uma resposta aproximada do servicedesk).
Estou vendo. Obrigado. Por isso, ao carpinteiro...
Adicionados operadores *(Dereferência/Informação) e &(Endereço de), nenhuma mudança adicional de idioma será feita/planejada.
Por favor, esclareça o seguinte:
* obter uma variável por referência - só se aplica a:
2. objetos de estrutura
3. Tipos fundamentais
Neste contexto, é apenas rlvalue ou lvalue também?
A tarefa do programador é pegar um evento desse tipo
Portanto, eu não sou um programador - minhas tarefas são diferentes. Carpinteiro, eu acho - vou 'mutilar a muleta' e pensar que estou 'pegando o evento'.
E não estou exagerando, porque o objetivo declarado desta variável:
Além desse propósito, também é suposto ser uma bandeira de mudança na história, além de ser suposto rastrear algumas outras mudanças. Tudo isso é útil, mas não podemos usá-lo para seu propósito direto - mostrar quantas "barras foram processadas na chamada anterior" - pré_calculadas.
Portanto, eu não sou um programador - minhas tarefas são diferentes. Carpinteiro, eu acho - vou 'mutilar a muleta' e pensar que estou 'pegando o evento'.
E não estou exagerando, porque o objetivo declarado desta variável:
Além desse propósito, também é suposto ser uma bandeira de mudança na história, além de ser suposto rastrear algumas outras mudanças. Tudo isso é útil, mas você não pode usá-lo para seu propósito direto - para mostrar quantas "barras foram processadas na chamada anterior" - pré_calculadas
Portanto, eu não sou um programador - minhas tarefas são diferentes. Carpinteiro, eu acho - vou 'mutilar a muleta' e pensar que estou 'pegando o evento'.
E não estou exagerando, porque o objetivo declarado desta variável:
Além desse propósito, também é suposto ser uma bandeira de mudança na história, além de algumas outras mudanças a serem acompanhadas. Tudo isso é útil, mas não podemos usá-lo para seu propósito direto - mostrar quantas barras foram "processadas na chamada anterior" - pré_calculadas
Se pré_calculado=0, significa que um recálculo completo deve ser realizado. Neste caso, todos os indicadores padrão são completamente recalculados.
O que não está claro?
Diz-se que o checksum mudou na história. Seria mais barato recalcular o indicador do que descobrir por que o checksum mudou.
A documentação menciona explicitamente que
Observe a conexão entre o valor de retorno de OnCalculate() e o segundo parâmetro de entrada pré_calculado. O parâmetro pré_calculado na chamada de função contém um valor retornado pela OnCalculate() na chamada anterior.Isto permite algoritmos econômicos para calcular o indicador personalizado a fim de evitar cálculos repetidos para aquelas barras que não mudaram desde a chamada anterior desta função.
Para isso, geralmente é suficiente retornar o valor do parâmetro rate_total, que contém o número de barras na chamada de função atual. Se desde a última chamada do OnCalculate() os dados de preço mudaram (um histórico mais profundo foi bombeado ou o histórico foi preenchido), então o valor do parâmetro de entrada pré_calculado será ajustado a zero pelo terminal.
Que tal apenas recalcular o indicador inteiro quando 0? Na minha opinião, a melhor solução.
Isto é exatamente o que você deve fazer: quando prev_calculate==0 for recebido, você deve recalcular o indicador INTEGRAL. Uma vez que rev_calculate==0 é normalmente uma troca de história. E se o histórico for trocado, isso significa que pode haver novas barras que não foram percebidas ou que não foram calculadas antes - ou seja, as leituras dos indicadores estarão incorretas.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso