Valor do tick anterior - página 3

 
PreviousTick = CurrentTick;

CurrentTick =   Bid;

if ( CurrentTick < PreviousTick )

       {

difference = PreviousTick - Bid;

TotalDescent = TotalDescent + difference;

descentarray[0]=TotalDescent;

       }


este código faz com que o gráfico mt4 falhe. o que há de errado com ele?

diferença, TotalDescent é declarado como duplo, com um valor inicial de 0. descentarray é declarado como um array 1d sem número máximo de itens. há uma declaração if para filtrar o caso anteriorTick = 0, e a contrapartida TotalAscent funciona bem.

ele corre até que o primeiro tick decrescente chegue, depois cai. há alguma coisa que eu perdi?

 

Favor usar o botão </> para inserir seu código.


 
J.P.Satrio:


este código faz com que o gráfico mt4 falhe. o que há de errado com ele?

diferença, TotalDescent é declarado como duplo, com um valor inicial de 0. descentarray é declarado como um array 1d sem número máximo de itens. há uma declaração if para filtrar o caso anteriorTick = 0, e a contrapartida TotalAscent funciona bem.

ele corre até que o primeiro tick decrescente chegue, depois cai. há alguma coisa que eu perdi?

Você dimensiona a matriz?

 
Keith Watford:

Você dimensiona a matriz?

Não, pois não tenho certeza de qual seria o tamanho necessário. Como eu disse, o lado da ascensão funciona bem com a matriz sem um conjunto de tamanhos fixos.
 
J.P.Satrio:
Não, pois não tenho certeza de qual tamanho seria necessário. Como eu disse, o lado da ascensão funciona bem com a matriz sem um conjunto de tamanhos fixos.

Você tem que dimensionar a matriz. Se você não tiver certeza do tamanho necessário, toda vez que quiser dar um elemento extra, aumente o tamanho em um.

 
Keith Watford:

Você tem que dimensionar a matriz. Se você não tiver certeza do tamanho necessário, toda vez que quiser dar um elemento extra, aumente o tamanho em um.

Tentarei fazer shure, obrigado. No entanto, vi muitos casos em que os codificadores não fixaram um tamanho para as arrays. Ainda não sei porque este caso é diferente.
Se o id tiver que verificar se há uma necessidade de aumentar e redimensionar minha matriz em cada tick que a tornaria muito mais complexa, então eu acho que vou definir um tamanho enorme o suficiente para gerenciar a quantidade de dados. O que acontece se um array ficar cheio? (Nunca me aconteceu) cair novamente?
 
J.P.Satrio:
Eu vou tentar o shure, obrigado. No entanto, vi muitos casos em que os codificadores não fixaram um tamanho para as matrizes. Ainda não sei porque este caso é diferente.
Se o id tiver que verificar se há uma necessidade de aumentar e redimensionar minha matriz em cada tick que a tornaria muito mais complexa, então eu acho que vou definir um tamanho enorme o suficiente para gerenciar a quantidade de dados. O que acontece se um array ficar cheio? (Nunca me aconteceu) cair novamente?

Acho que você nunca verá um caso em que um array não seja dimensionado. Se você tentar colocar um valor em um elemento que não existe, o código irá falhar.

 
Keith Watford:

Não creio que você alguma vez verá um caso em que uma matriz não seja dimensionada. Se você tentar colocar um valor em um elemento que não existe, o código irá falhar.

E pronto. Obrigado!
 

Esta linha me ajudou a desenvolver um código que me dirá a diferença entre o Ask anterior e o Ask atual. Se a diferença é zero então imprime 0,0, mas se a diferença não é zero então há muitos dígitos, como 1,000000000006551e-05. Há algo errado com meu código ou há uma maneira de corrigir isto? O símbolo é EURUSD, se isso importar. Este é o meu primeiro código mql, portanto, peço desculpas antecipadamente pelas falhas. Obrigado!

/* Global Variables */
double ask_prev;
double ask_curr;
double ask_diff;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   MqlTick tick_curr;
//---
   if(SymbolInfoTick(Symbol(),tick_curr))
     {
      ask_curr = tick_curr.ask;
      ask_diff = ask_curr - ask_prev;
      Print(ask_diff);
      ask_prev = tick_curr.ask;
     }
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
  }
//+------------------------------------------------------------------+
 
rdone:

Esta linha me ajudou a desenvolver um código que me dirá a diferença entre o Ask anterior e o Ask atual. Se a diferença é zero então imprime 0,0, mas se a diferença não é zero então há muitos dígitos, como 1,000000000006551e-05. Há algo errado com meu código ou há uma maneira de corrigir isto? O símbolo é EURUSD, se isso importar. Este é o meu primeiro código mql, portanto, peço desculpas antecipadamente pelas falhas. Obrigado!

Por que não apenas...

MqlTick tick_curr, tick_last;

void OnTick()
{
   tick_last = tick_curr;
   SymbolInfoTick(Symbol(),tick_curr);
}
Razão: