- www.mql5.com
- Espalhamento flutuante ou fixo ?
- Como obter o volume total do melhor preço de compra e do melhor preço de venda
- Porque é que as assinaturas foram proibidas com base no "rendimento demasiado elevado"?
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.
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); } //+------------------------------------------------------------------+
- www.mql5.com
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...
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()?
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.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso