Erros, bugs, perguntas - página 3149

 
Vladimir Karputov #:

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

  1. se é um tique de corrente,
  2. se se trata de uma nova abertura de bar,
  3. 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)

 
TheXpert #:
Que diferença faz? Pode ser inferior a zero?

Sim, eu tenho (adicionado ao post anterior)

 
Artyom foi o único que compreendeu o problema.
Mas aparentemente este problema é eterno.
E agora só há "se".
 
Roman #:
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...

 
Vladimir Karputov #:
   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.

 
Artyom Trishkin #:

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
.

 
Roman #:

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.

 
Artyom Trishkin #:

Não percebo outra vez. O que há de errado? Tudo parece ser como era antes.

Com este desenho.

int limit = rates_total-prev_calculated;

for(int i=limit; i>=0; i--)


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
.

 
Roman #:

Com este desenho
, o tampão indicador sai fora dos limites.

sempre se extinguiu.
 
Roman #:

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

Razão: