Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 244

 
forexman77:
Pode dizer-me se existem outras formas rápidas de obter o preço actual para além de "SymbolInfoTick". Talvez haja uma forma mais rápida de obter a citação actual?

SymbolInfoDouble pode ser usado

com identificadoresSYMBOL_BID eSYMBOL_ASK.

 
Fleder:

SymbolInfoDouble pode ser usado

com identificadoresSYMBOL_BID eSYMBOL_ASK.

Obrigado!

Não é muito claro o que se segue de "SYMBOL_BID" (A licitação é a melhor oferta para venda). Ainda é a cotação actual ou o melhor preço de mercado da taça ESN?

 
forexman77:

Obrigado!

Não é muito claro o que se segue de "SYMBOL_BID" (A licitação é a melhor oferta para vender). Ainda é a cotação actual ou o melhor preço de mercado da taça ESN?

A cotação actual e o melhor preço na taça de mercado ECN são a mesma coisa.

 
Fleder:

A cotação actual e o melhor preço na Doca ECN são a mesma.

Em geral, acontece que se usarmos "SymbolInfoDouble" ao consultarmos, uma troca a este preço pode não acontecer, ou seja, é a oferta actual.

Se usarmos "SymbolInfoTick", então o preço estava exactamente lá, ou seja, este é o preço actual a que o último comércio ocorreu, quando se usa o dobro do último; // Preço actual do último comércio (Último)

 
forexman77:

Em geral, acontece que se usarmos "SymbolInfoDouble" na consulta, uma troca a este preço pode não acontecer, ou seja, é a licitação actual.

Se utilizarmos "SymbolInfoTick", então o preço estava definitivamente lá, ou seja, é o preço actual a que a última transacção ocorreu.

Nota

Se esta função for usada para obter informações sobre o último tick, então é melhor usarSymbolInfoTick(). É bem possível que não tenha havido qualquer cotação para este símbolo desde o momento em que o terminal se ligou à conta de negociação. Neste caso, o valor solicitado será indefinido.

SymbolInfoTick pode devolver um valor indefinido se não tiver havido um único tick desde o terminal ligado ao servidor.

SymbolInfoDouble exclui esta situação.

 
Fleder:

Nota

Se a função for usada para obter informações sobre o último tick, é melhor usarSymbolInfoTick(). É bem possível que não tenha havido qualquer cotação para este símbolo desde que o terminal tenha sido ligado à conta de negociação. Neste caso, o valor solicitado será indefinido.

SymbolInfoTick pode devolver um valor indefinido se não tiver havido um único tick desde que a EA foi ligada ao gráfico.

SymbolInfoDouble exclui tal situação.

Já está. Obrigado! Agora a única coisa a fazer é encontrar um simples exemplo de código para verificar quanto tempo cada função leva quando é chamada?
 
forexman77:
Já está. Obrigado! Agora só falta encontrar um simples exemplo de código para verificar quanto tempo leva a chamar ambas as funções?
uint start=GetTickCount();
// здесь Ваш код вызова 
Print("Вызов прошёл за = ",GetTickCount()-start);
 
barabashkakvn:

Este truque provavelmente não irá funcionar nesta situação.

Haverá sempre um zero abaixo de zero.

As funçõesSymbolInfoTick eSymbolInfoDouble são demasiado rápidas- não mais do que unidades de microssegundos.

 
Fleder:

Este truque provavelmente não irá funcionar nesta situação.

Haverá sempre um zero abaixo de zero.

As funçõesSymbolInfoTick eSymbolInfoDouble são demasiado rápidas- não mais do que unidades de microssegundos.

Tanto mais interessante, existe um código de exemplo. Estamos à espera do resultado.
 
barabashkakvn:
Fleder:

Este truque provavelmente não irá funcionar nesta situação.

Haverá sempre um zero abaixo de zero.

As funçõesSymbolInfoTick eSymbolInfoDouble são demasiado rápidas- não mais do que unidades de microssegundos.

No guião, eu criei esta pequena coisa:

void OnStart()
  {
uint start=GetTickCount();
double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
Alert("ask=",ask);
uint time=GetTickCount()-start;
Alert("time=",time);
   
  }
//+------------------------------------------------------------------+

tempo=0

OSymbolInfoTick será verificado na segunda-feira.