Informações do Book

 

Pessoal,


Estou tentando obter do book de ofertas as informações de preço de venda e preço de compras e suas respectivas quantidades e não estou conseguindo.

Alguem poderia me ajudar? Quais as funções devo usar?

Tentei usar a SymbolInfoDouble("PETR4", SYMBOL_SESSION_SEEL_ORDERS_VOLUME) / SymbolInfoDouble("PETR4", SYMBOL_SESSION_BUY_ORDERS_VOLUME), sem sucesso, e para pegar a quantidade e as

SymbolInfoDouble("PETR4", SYMBOL_SYMBOL_ASK) /SymbolInfoDouble("PETR4", SYMBOL_SYMBOL_BID) .

Para exemplificar, gostaria de obter as informações da primeira linha da imagem do book abaixo

para venda: qtde 1.100 e preço 25.50

para compra: qtde 11.400 e preço 25.55.

PETR4
Qtde Compra Venda Qtde
1100 25,50 25,55 11400
3500 25,45 25,56 1200
2500 25,42 25,57 900
2100 25,41 25,58 500
36300 25,40 25,59 1800


Obrigado!

 
LeandroCD:

Pessoal,


Estou tentando obter do book de ofertas as informações de preço de venda e preço de compras e suas respectivas quantidades e não estou conseguindo.

Alguem poderia me ajudar? Quais as funções devo usar?

Tentei usar a SymbolInfoDouble("PETR4", SYMBOL_SESSION_SEEL_ORDERS_VOLUME) / SymbolInfoDouble("PETR4", SYMBOL_SESSION_BUY_ORDERS_VOLUME), sem sucesso, e para pegar a quantidade e as

SymbolInfoDouble("PETR4", SYMBOL_SYMBOL_ASK) /SymbolInfoDouble("PETR4", SYMBOL_SYMBOL_BID) .

Para exemplificar, gostaria de obter as informações da primeira linha da imagem do book abaixo

para venda: qtde 1.100 e preço 25.50

para compra: qtde 11.400 e preço 25.55.

PETR4
Qtde Compra Venda Qtde
1100 25,50 25,55 11400
3500 25,45 25,56 1200
2500 25,42 25,57 900
2100 25,41 25,58 500
36300 25,40 25,59 1800


Obrigado!

Fala man,


Veja se este artigo te ajuda.

[ ]'s

MQL5 Cookbook: Implementando seu próprio Depth of Market (Book de Ofertas)
MQL5 Cookbook: Implementando seu próprio Depth of Market (Book de Ofertas)
  • www.mql5.com
A linguagem MQL5 está em constante evolução e oferece mais oportunidades para operações com a troca de informações a cada ano. Um desses tipos de dados de troca são informações sobre Depth of Market. É uma tabela especial que mostra os níveis de preços e volumes de ordens limitadas. O terminal MetaTrader 5 tem uma versão do Depth Mercado para a...
 

Joscelino, obrigado pelo artigo.


Estou tentando implementar e não está retornando nenhuma informação nesse trecho:

MqlBookInfo aLongBookInfo[];
MarketBookGet("PETR4", aLongBookInfo);
   
   if(ArraySize(aLongBookInfo) == 0)
   {
      Comment("Não foi possível retornar o book para o ativo de compra");
      return;
   }

Sempre entrando no IF. Estou testando na Modal, em dados reais e no histórico, ocorrendo o mesmo erro em ambos.

Sabe o pq?


Vlw!!!

 
LeandroCD:

Joscelino, obrigado pelo artigo.


Estou tentando implementar e não está retornando nenhuma informação nesse trecho:

Sempre entrando no IF. Estou testando na Modal, em dados reais e no histórico, ocorrendo o mesmo erro em ambos.

Sabe o pq?


Vlw!!!

Fala Leandro,

Não tenho experiência com isso. Busque esclarecer suas dúvidas neste link: https://www.mql5.com/pt/forum/301258/unread#unread

[ ]´s

 
Joscelino Celso de Oliveira:

Fala Leandro,

Não tenho experiência com isso. Busque esclarecer suas dúvidas neste link: https://www.mql5.com/pt/forum/301258/unread#unread

[ ]´s

Postei lá! Obrigado!!!
 

Ola, 

Fiz um codigo de exemplo aqui acho que da pra seguir com esse exemplo



//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   MarketBookAdd(Symbol());
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Desinicialização da função Expert                                |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   MarketBookRelease("USDJPY");
  }
//+------------------------------------------------------------------+
//| Função BookEvent                                                 |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
//---
   //printf("Depth of Market " + symbol +  " changed"); 
   MqlBookInfo book[];
   MarketBookGet(symbol, book);
   if(ArraySize(book) == 0)
   {
      printf("Failed load market book price. Reason: " + (string)GetLastError());
      return;
   }
   string line = "Price: " + DoubleToString(book[0].price, Digits()) + "; ";
   line += "Volume: " + (string)book[0].volume + "; ";
   line += "Type: " + EnumToString(book[0].type);
   printf(line);
 
Jonathan Pereira:

Ola, 

Fiz um codigo de exemplo aqui acho que da pra seguir com esse exemplo



Jonathan, Obrigado pelo exemplo.


Testei seu código aqui e deu o seguinte erro:

Failed load market book price. Reason: 4903


O erro 4903, pelo que eu achei na documentação é:

ERR_BOOKS_CANNOT_GET

4903

Os dados da Profundidade de Mercado não podem ser obtidos


Alguma idéia do que pode ser?


Obrigado!

 
LeandroCD:

Jonathan, Obrigado pelo exemplo.


Testei seu código aqui e deu o seguinte erro:

Failed load market book price. Reason: 4903


O erro 4903, pelo que eu achei na documentação é:

ERR_BOOKS_CANNOT_GET

4903

Os dados da Profundidade de Mercado não podem ser obtidos


Alguma idéia do que pode ser?


Obrigado!

Se você simplesmente copiou e colou o código acima, o código possui um erro: Está inicializando o código corrente do gráfico e desinicializando com o USDJPY. Primeiro os dados do book não estão disponíveis no forex. Segundo, deve inicializar e desinicializar o mesmo simbolo.

 
Samuel Manoel De Souza:

Se você simplesmente copiou e colou o código acima, o código possui um erro: Está inicializando o código corrente do gráfico e desinicializando com o USDJPY. Primeiro os dados do book não estão disponíveis no forex. Segundo, deve inicializar e desinicializar o mesmo simbolo.

Exatamente, eu fiz esse código as pressas e me conectei a uma corretora de Forex usando o par USDJPY por isso pra mim não deu erro em momento algum.
O correto é transformar isso em Classe e delegar as funções de implementação a classe e não no robô em si.

 

Então pessoal eu corrigi o código do ativo, compilei todo código e debuguei sobre dados históricos (que não funcionou) e sobre dados reais (que funcionou).

Acredito que o problema tava porque eu estava tentando fazer o debug sobre dados históricos. Sabem se tem como usar essa função em dados históricos?


Obrigado!

 
LeandroCD:

Então pessoal eu corrigi o código do ativo, compilei todo código e debuguei sobre dados históricos (que não funcionou) e sobre dados reais (que funcionou).

Acredito que o problema tava porque eu estava tentando fazer o debug sobre dados históricos. Sabem se tem como usar essa função em dados históricos?


Obrigado!

Não. O dados do Book só podem ser acessados em tempo real. Você pode gravar os dados em uma tabela csv e rodar o programa com esses dados para testes. Inclusive vou fazer isso também. Porque não pensei nisso antes? kkk

Razão: