Passo 2: Soletra 'limite' correctamente e UTILIZE a matriz fechada - NÃO a chamada iClose!!!
Resultado:
e não há erros.
Quem disse que este é o único cálculo correcto de limite e indicador?
Estamos a discutir outro cálculo de limite e o próprio indicador - da esquerda para a direita - desde o início da história até ao tempo actual. É mais simples e mais evidente.
Num tal limite calculado (limite int = taxas_total - pré_calculado; if(limit>1) limit=taxas_total-1;) todos os dados sobre
se é um tique de corrente,
se se trata de uma nova abertura de bar,
se se trata de uma alteração dos dados históricos.
Se o tick actual (limit==0), então for(int i=limit; i>=0; i--) { // . } calculará o indicador em cada novo tick, e apenas a barra zero será recalculada.
Se abrirmos uma nova barra (limit===1), então para(int i=limit; i>=0; i--) { // ... } realizará o cálculo da primeira e da barra zero - a barra anterior e a barra recém-aberta.
Se esta história mudar (limite>1), então para(int i=limite; i>=0; i--) { // ... } fará um recálculo completo do indicador para todo o histórico disponível (o histórico foi alterado em algum lugar)
int limit=prev_calculated-1;
if(prev_calculated==0)
limit=0;for(int i=limit; i<rates_total; i++)
{
CloseBuffer[i]=close[i];
}
operador ternário parece mais lacónico (IMHO)
int limit = prev_calculated==0 ? 0: prev_calculated-1;
Além disso, como disse antes, e se alguma coisa correr mal e se o cálculo prévio se revelar mais elevado do que o total das taxas? Encontrei tal situação, quando as barras máximas na janela são != ilimitadas, mas por exemplo, 50000. Nesse caso, o tamanho do conjunto de barras aumentaria em 1 a cada nova barra, mas em algum momento voltaria a ser 50000. Não sigo a lógica. Apanhei-a há uns anos atrás. Precisa de ser verificado agora. Vou preparar um desbloqueio no meu VPS.
Escreveu tudo correctamente acima, apenas para bar novo mal impressopara(int i=limit; i>=0; i--) o operador = não é necessário aqui, mas provavelmente está no passado, a menos que devolvam o comportamento anterior.
Escreveu tudo correctamente acima, apenas para o novo bar está mal impressopara(int i=limit; i>=0; i--) aqui operador = não é necessário, mas já deve estar no passado, se não devolver o comportamento anterior.
Mais uma vez não compreendo nada. O que há de errado? Tudo parece ser como era antes.
Por favor mostre-me um exemplo decarraças com o ciclo i>=0 talvez me tenha esquecido do que estou a fazer mal.
Já escrevi que com esta construção está a aceder ao índice tampão com taxas_total (quando pré_calculado == 0 ). E isto é um transbordamento porque taxas_total é o tamanho do tampão cujo último elemento taxas_total-1
Passo 1: Criar um modelo usando o 'MQL5 Wizard':
Passo 2: Soletra 'limite' correctamente e UTILIZE a matriz fechada - NÃO a chamada iClose!!!
Resultado:
e não há erros.
Quem disse que este é o único cálculo correcto de limite e indicador?
Estamos a discutir outro cálculo de limite e o próprio indicador - da esquerda para a direita - desde o início da história até ao tempo actual. É mais simples e mais evidente.
Num tal limite calculado (limite int = taxas_total - pré_calculado; if(limit>1) limit=taxas_total-1;) todos os dados sobre
Se o tick actual (limit==0), então for(int i=limit; i>=0; i--) { // . } calculará o indicador em cada novo tick, e apenas a barra zero será recalculada.
Se abrirmos uma nova barra (limit===1), então para(int i=limit; i>=0; i--) { // ... } realizará o cálculo da primeira e da barra zero - a barra anterior e a barra recém-aberta.
Se esta história mudar (limite>1), então para(int i=limite; i>=0; i--) { // ... } fará um recálculo completo do indicador para todo o histórico disponível (o histórico foi alterado em algum lugar)
Que diferença faz? Pode ser inferior a zero?
Sim, eu tenho (adicionado ao post anterior)
Mas aparentemente este problema é eterno.
E agora só há "se".
Apenas Artyom compreendeu o problema.
Mas aparentemente este problema é eterno.
E agora só há "se".
Não, eu não percebi. Esclarecer o que entendi...
operador ternário parece mais lacónico (IMHO)
Além disso, como disse antes, e se alguma coisa correr mal e se o cálculo prévio se revelar mais elevado do que o total das taxas?
Encontrei tal situação, quando as barras máximas na janela são != ilimitadas, mas por exemplo, 50000. Nesse caso, o tamanho do conjunto de barras aumentaria em 1 a cada nova barra, mas em algum momento voltaria a ser 50000. Não sigo a lógica. Apanhei-a há uns anos atrás. Precisa de ser verificado agora. Vou preparar um desbloqueio no meu VPS.
Não, eu não percebi. Esclarecer o que entendi...
O que por agora não funciona como antes
limit==0
para carraças i>=0
para barras i>0
Escreveu tudo correctamente acima,
apenas para bar novo mal impressopara(int i=limit; i>=0; i--)
o operador = não é necessário aqui, mas provavelmente está no passado,
a menos que devolvam o comportamento anterior.
O que por agora não funciona como antes
limit==0
para carraças i>=0
para barras i>0
Escreveu tudo correctamente acima,
apenas para o novo bar está mal impressopara(int i=limit; i>=0; i--)
aqui operador = não é necessário, mas já deve estar no passado,
se não devolver o comportamento anterior.
Mais uma vez não compreendo nada. O que há de errado? Tudo parece ser como era antes.
Não percebo outra vez. O que há de errado? Tudo parece ser como era antes.
Com este desenho.
O tampão indicador está fora dos limites.
Por favor mostre-me um exemplo decarraças com o ciclo i>=0
talvez me tenha esquecido de algo e esteja a fazê-lo mal.
Com este desenho
, o tampão indicador sai fora dos limites.
Com este desenho.
O tampão indicador está fora dos limites.
Por favor mostre-me um exemplo decarraças com o ciclo i>=0
talvez me tenha esquecido do que estou a fazer mal.
Já escrevi que com esta construção está a aceder ao índice tampão com taxas_total (quando pré_calculado == 0 ).
E isto é um transbordamento porque taxas_total é o tamanho do tampão cujo último elemento taxas_total-1