Volume do Ask e do Bid

 
Existe alguma forma simples de pegar o volume da melhor oferta de venda e de compra ou só analisando o book? Pelo que vi pelas funções SymbolInfoDouble ou SymbolInfoInteger não é possível.
Documentação sobre MQL5: Informações de Mercado / SymbolInfoInteger
Documentação sobre MQL5: Informações de Mercado / SymbolInfoInteger
  • www.mql5.com
SymbolInfoInteger - Informações de Mercado - Referência MQL5 - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
 
vc pode pegar o volume pelo MQLRates, mas se quiser fazer igual o volume at price então será somente olhando o book
 
MQLRates só tem o volume do último tick, preciso do volume do ask e bid e não do último negócio. Como eu consigo pegar o ask e bid pela função SymbolInfoDouble acho que faria sentido conseguir pela mesma função, mas não existe propriedade para pegar o volume do ask e bid, através dessa função. Acho que o jeito vai ser pelo book mesmo.
 

Implementei da seguinte forma:


   //Carrega Ask e Bid e volume da on
   MarketBookAdd(on);
   MqlBookInfo       BookInfo[];
   MarketBookGet(on,BookInfo);
   for(int i=0;i<ArraySize(BookInfo)-1;i++)
       {
       if(BookInfo[i].type != BookInfo[i+1].type)
         {
         volume_ask_on = BookInfo[i].volume;
         ask_on = BookInfo[i].price;
         volume_bid_on = BookInfo[i+1].volume;
         bid_on = BookInfo[i+1].price;
         }
       }
    MarketBookRelease(on);


Aceito sugestões.

 
Apesar do código acima funcionar, ele só funciona se o EA estiver anexado ao ativo que se quer as informações do Book. No meu caso, o EA monitora diversos ativos, não sendo viável anexa-los a todos. Alguma sugestão de como posso implementar? Lembrando que eu não preciso necessariamente do Book. O que preciso é o ask, bid e seus respectivos volume.
 
Otavio Konmin Clemente:
Apesar do código acima funcionar, ele só funciona se o EA estiver anexado ao ativo que se quer as informações do Book. No meu caso, o EA monitora diversos ativos, não sendo viável anexa-los a todos. Alguma sugestão de como posso implementar? Lembrando que eu não preciso necessariamente do Book. O que preciso é o ask, bid e seus respectivos volume.

Olá

no seu post você está querendo saber a melhor oferta de um determinado ativo,  o MT5 dispõe para o livro de ofertas na formato DOM com 8 a 20 melhores ofertas, essa qtd. depende da corretora e ponto final.

Outra coisa, você não precisa abrir uma janela para cada ativo que quer monitorar, veja só quase todas as funções do MQL5 tem como parâmetro o código do ativo, ou seja um EA pode ser "multi-moeda", 

Bom, disto isso, vem as implicações de um monitor  "multi-moeda".

1) Verificar permanentemente o sincronismo dos ativos.

2) Executar o monitoramento no OnTimer() com timer de milisegundos e aceitar alguma perda de informação.

Uma última obs. a lentidão aumenta de forma exponencial a medida que aumenta a qtd. de ativos monitorados.

 

Rogério,

Obrigado pelo seu comentário. O meu EA monitora diversos ativos, a principio estava tentando buscar as informações de um ativo pra agora buscar de vários. Nos testes que eu fiz usando o código acima, mesmo carregando outro ativo na variável "on", só funcionou se o EA estivesse rodando no ativo que eu estou consultando o book. Vou fazer mais alguns teste, mas você tem certeza que os comandos de book funcionam mesmo que o EA não esteja rodando no ativo que se está buscando o book? Sei que comandos como SymbolInfoDouble funcionam com ativos diferentes do anexado, mas no caso do book não está funcionando. Eu até nem preciso de todo o book, apenas do volume do ask e do bid, então também se tiver outra maneira de conseguir essa informação, por favor me diga.

 

Fiz um EA só pra testar se as funções do Book funcionam se o EA não estiver anexado no ativo que está se buscando. E o resultado é negativa.

Estou cometendo algum erro ou é uma limitação o MT5? Alguma forma de contornar o problema?


//+------------------------------------------------------------------+
//|                                                    testebook.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
   double      ask_unit;
   double      volume_ask_unit;
   double      bid_unit;
   double      volume_bid_unit;
   string      units = "ALUP11";


int OnInit()
  {
   MarketBookAdd(units);
   EventSetTimer(1);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EventKillTimer();
   MarketBookRelease(units);   
  }
  
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
      //Carrega Ask e Bid e volume da units
   MqlBookInfo       BookInfo_unit[];
   MarketBookGet(units,BookInfo_unit);
   for(int i=0;i<ArraySize(BookInfo_unit)-1;i++)
       {
       if(BookInfo_unit[i].type != BookInfo_unit[i+1].type)
         {
         volume_ask_unit = BookInfo_unit[i].volume;
         ask_unit = BookInfo_unit[i].price;
         volume_bid_unit = BookInfo_unit[i+1].volume;
         bid_unit = BookInfo_unit[i+1].price;
         }
       }

    // Imprime
   Print("Ativo: "+units+". Bid unit: "+bid_unit+". Volume: "+volume_bid_unit);
   Print("Ativo: "+units+". Ask unit: "+ask_unit+". Volume: "+volume_ask_unit);
  
   
  }
//+------------------------------------------------------------------+
Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
  • www.mql5.com
MQL5: linguagem de estratégias de negociação inseridas no Terminal do Cliente MetaTrader 5. A linguagem permite escrever seus próprios sistemas automáticos de negócios, indicadores técnicos, scripts e bibliotecas de funções
 
Otavio Konmin Clemente:

Fiz um EA só pra testar se as funções do Boof funcionam se o EA não estiver anexado no ativo que está se buscando. E o resultado é negativa.

Estou cometendo algum erro ou é uma limitação o MT5? Alguma forma de contornar?


Otávio,

funciona sim e seu programa está OK, tá lendo o book perfeitamente... 

 
Rogerio Giannetti Torres:

Otávio,

funciona sim e seu programa está OK, tá lendo o book perfeitamente... 

Olá

Gostaria de saber se esta lógica funciona também no OnTick() ou funciona somente no OnTimer()?

 
paulosouzavr:

Olá

Gostaria de saber se esta lógica funciona também no OnTick() ou funciona somente no OnTimer()?

Olá Paulo,

sim funciona, mas lembre-se que o OnTick() é ativado pelo evento newTick do ativo que para o qual EA está rodando.  

Razão: