Possível atraso de dados com SYMBOL_BID / SYMBOL_ASK - página 2

 
Fabio Bissolotti:

Quando eu disse que as funções retornam resultados diferentes eu me referia à estrutura da resposta. Claro que o conteúdo do topo do book em todas elas deveria ser idêntico em um dado momento. Meu ponto foi no sentido de que, por exemplo, se você não pretende usar todos os níveis do book no EA então, provavelmente MarketBookGet() não deveria ser cogitado já que trará um overhead maior. Desculpe se o texto não foi claro o suficiente. De qualquer forma, fiquei curioso para saber se essa diferença também estaria presente no meu ambiente e executei o script abaixo contra o DOL:

 No meu caso os resultados foram idênticos para SymbolInfoDouble e SymbolInfoTick:

 Deixei de fora o teste com o MarketBookGet() porque esse método não funciona com scripts. Quando sobrar um tempo pretendo fazer uma nova comparação em um EA de testes. Valeria a pena deixar o EA executando por um tempo, comparando os resultados e buscando por diferença de valores. Talvez uma carga maior de CPU ou de rede interfira no resultado.

Olá Fábio:

Obrigado por esclarecer melhor sua colocação anterior.  O problema da diferença acontece em momentos de alta volatilidade, aconselho a armazenar em um vetor, pois o tempo de colocar no log pode interferir. Eu registrei no WINQ15.

Concordo com você que se todas as formas funcionassem iguais para se obter Bid e Ask a mais vantajosa com menor overhead seria a SymbolInfoTick(), uma única chamada e teríamos os dois valores.

Abs,

MT 

 
Fabio Bissolotti:

Olá Rodrigo,

Claro que pode perguntar...

Primeiro foi testando, usando o exemplo da própria documentação:

No meu caso esse código em script sempre retorna a msg "Could not get contents of the symbol DOM".

Ao mesmo tempo,  a página de documentação para o método MarketBookGet traz a seguinte nota:

Note

The Depth of Market must be pre-opened by the MarketBookAdd() function. 

 Resumindo um pouco, pressupõe-se que o MarketBookGet() deva ser chamado de OnBookEvent(), que também conforme a doc, só está disponível em indicadores e experts (não em scripts).

Se a conclusão estiver errada e houver uma forma de chamar o método de scripts, então agradeço se você puder esclarecer.

Abs.,
Fábio 

Olá Fabio Bissolotti,

Vejo algumas confusões no que você escreveu... Dados de book podem ser acessados em QUALQUER função da manipulação de eventos, e não apenas dentro de OnBookEvent !!!!

Além disso, como já dito, scripts podem PERFEITAMENTE obter dados de book.

Por favor tente verificar ANTES de solicitar a informação do book, se a corretora que você está utilizando disponibiliza dados de book para aquele ativo. Apenas para constar, algumas corretoras de Forex não disponibilizam book de ativos.

Caso você esteja utilizando alguma corretora brasileira, sugiro que siga o passo-a-passo básico, e, ao invés de utilizar um for-loop para obter vários dados ao mesmo tempo, tente fazer o simples para depois tentar algo mais complexo.

Logo, tente rodar o script abaixo:

void OnStart()
  {
   MqlBookInfo book[];
   MarketBookAdd(_Symbol);
   MarketBookGet(_Symbol,book);
   Print("book = ",book[16].price);
   MarketBookRelease(_Symbol);
  }

E não esqueça de reportar o resultado.

Abraços,
Malacarne 

 
Rodrigo Malacarne:

Olá Fabio Bissolotti,

Vejo algumas confusões no que você escreveu... Dados de book podem ser acessados em QUALQUER função da manipulação de eventos, e não apenas dentro de OnBookEvent !!!!

Além disso, como já dito, scripts podem PERFEITAMENTE obter dados de book.

Por favor tente verificar ANTES de solicitar a informação do book, se a corretora que você está utilizando disponibiliza dados de book para aquele ativo. Apenas para constar, algumas corretoras de Forex não disponibilizam book de ativos.

Caso você esteja utilizando alguma corretora brasileira, sugiro que siga o passo-a-passo básico, e, ao invés de utilizar um for-loop para obter vários dados ao mesmo tempo, tente fazer o simples para depois tentar algo mais complexo.

Logo, tente rodar o script abaixo:

E não esqueça de reportar o resultado.

Abraços,
Malacarne 

Rodrigo,

Realmente interpretei errado a documentação. O código funciona normalmente com script. Obrigado pelo esclarecimento.

Abs.,
Fábio 

Razão: