Olá a todos,
Grande abraço,
Romeu.
Prezado Romeu,
Suspeito que seu problema seja muito mais simples do que parece... Você tem certeza que os ativos que você está testando POSSUEM livro de ofertas??? Alguns servidores simplesmente não disponibilizam livro de ofertas... É o caso do servidor MetaBrazil-Demo...
A propósito, as informações do DOM para backstests não são nada confiáveis, mesmo em servidores que fornecem dados em tempo real do livro de ofertas. Logo, vale a pena você diferenciar entre obter informações em tempo real do servidor e obter essas mesmas informações ao fazer backtests de ativos.
Prezado Romeu,
Suspeito que seu problema seja muito mais simples do que parece... Você tem certeza que os ativos que você está testando POSSUEM livro de ofertas??? Alguns servidores simplesmente não disponibilizam livro de ofertas... É o caso do servidor MetaBrazil-Demo...
A propósito, as informações do DOM para backstests não são nada confiáveis, mesmo em servidores que fornecem dados em tempo real do livro de ofertas. Logo, vale a pena você diferenciar entre obter informações em tempo real do servidor e obter essas mesmas informações ao fazer backtests de ativos.
Olá Malacarne,
eu sei que o DOM não funciona no strategy tester (pelo menos no metaBrazil e na Alpari), mas se vc deixar rodar em sua conta normalmente, funciona sim.
vou deixar as imagens de exemplo do EA que foi compilado com uma build do mt5 mais antiga :
Agora vou deixar com o EA simples que eu montei:
Isso esta me matando hahaha pq eu não consegui encontrar nada de errado no EA de código simples "DOM-EA"
já no "MACD-Analyser" a porção de código responsável pela exibição do book no log é idêntica a do "DOM-EA" e funciona.
Mas foi o que eu disse anteriormente, se eu modifico alguma coisinha no "MACD-Analyser", por exemplo, adiciono uma variável a mais e compilo, da erro.
Se eu crio um novo EA com o mesmo código do "MACD-Analyser" tbm da erro.
Por isso que eu estou com essa ideia maluca de que possa haver algo de errado com a nova build do mt5.
Alguma sugestão?
Abraço,
Romeu.
Olá Malacarne,
eu sei que o DOM não funciona no strategy tester (pelo menos no metaBrazil e na Alpari), mas se vc deixar rodar em sua conta normalmente, funciona sim.
vou deixar as imagens de exemplo do EA que foi compilado com uma build do mt5 mais antiga :
Agora vou deixar com o EA simples que eu montei:
Isso esta me matando hahaha pq eu não consegui encontrar nada de errado no EA de código simples "DOM-EA"
já no "MACD-Analyser" a porção de código responsável pela exibição do book no log é idêntica a do "DOM-EA" e funciona.
Mas foi o que eu disse anteriormente, se eu modifico alguma coisinha no "MACD-Analyser", por exemplo, adiciono uma variável a mais e compilo, da erro.
Se eu crio um novo EA com o mesmo código do "MACD-Analyser" tbm da erro.
Por isso que eu estou com essa ideia maluca de que possa haver algo de errado com a nova build do mt5.
Alguma sugestão?
Abraço,
Romeu.
Olá Romeu, a meu ver os dois códigos possuem uma falha que é não testarem o retorno da função MarketBookAdd().
Eu comecaria corrigindo isso e depois repetindo tua bateria de testes.
Olá Romeu, a meu ver os dois códigos possuem uma falha que é não testarem o retorno da função MarketBookAdd().
Eu comecaria corrigindo isso e depois repetindo tua bateria de testes.
Olá Figurelli,
agora na OnInit() eu coloquei "if(!MarketBookAdd(Symbol())) return -1;", eu repeti os testes e apareceu o mesmo erro "Could not get contents of the symbol DOM EURUSD"
Lembrando que eu nunca testei no strategy tester, eu sempre estou testando na conta live da Alpari ou da MetaBrazil....
se não for pedir muito, teria como vocês compilarem um EA de captura do book no compilador de vocês e rodar pra ver o que acontece?
Abraço,
Romeu.
Olá Figurelli,
agora na OnInit() eu coloquei "if(!MarketBookAdd(Symbol())) return -1;", eu repeti os testes e apareceu o mesmo erro "Could not get contents of the symbol DOM EURUSD"
Lembrando que eu nunca testei no strategy tester, eu sempre estou testando na conta live da Alpari ou da MetaBrazil....
se não for pedir muito, teria como vocês compilarem um EA de captura do book no compilador de vocês e rodar pra ver o que acontece?
Abraço,
Romeu.
Olá Figurelli,
agora na OnInit() eu coloquei "if(!MarketBookAdd(Symbol())) return -1;", eu repeti os testes e apareceu o mesmo erro "Could not get contents of the symbol DOM EURUSD"
Lembrando que eu nunca testei no strategy tester, eu sempre estou testando na conta live da Alpari ou da MetaBrazil....
se não for pedir muito, teria como vocês compilarem um EA de captura do book no compilador de vocês e rodar pra ver o que acontece?
Abraço,
Romeu.
Olá Romeu,
fiz aqui alguns testes e realmente, depois dessa última versão do MetaTrader 5 (build 965), parece que que a função MarketBookGet não está conseguindo capturar de maneira correta as informações do DoM. Chequei o retorno de todas as funções envolvidas no processo, e a única função que retorna falso o tempo inteiro é justamente MarketBookGet... Também verifiquei a lista de mudanças na última build do MT5, e me parece que no tópico 7 eles reportam que foram fixados erros nas funções IndicatorParamenters e também MarketBookGet. Logo, acredito que possa ter havido alguma modificação que fez com que essa última função passasse a não mais funcionar da maneira correta.
Vou abrir um ticket pra MetaQuotes pra informar esse problema ainda hoje.
Entretanto, tenho uma boa notícia: fiz aqui alguns testes e encontrei uma maneira minimalista de contornar essa situação e retornar os dados do DoM, como você quer. Por favor não tome essa solução como definitiva, uma vez que pode ser possível que a MetaQuotes volte a alterar a função MarketBookGet e que ela volte a funcionar corretamente.
Pelos meus testes, a função MarketBookGet passa a funcionar corretamente se você adicionar duas outras structs MQL dentro do seu código, a saber: MqlRates e MqlDateTime. Além disso, é necessário fazer a definição de alguma função que faça uso da struct MqlDateTime... não me pergunte (por enquanto) porque isso está acontecendo... a única informação que posso te dar no momento é que essa solução de contorno está funcionando.. :-)
Segue abaixo o código:
//+------------------------------------------------------------------+ //| DOM-EA.mq5 | //| Copyright 2014, Rodrigo Malacarne | //| https://www.mql5.com/pt/users/malacarne | //+------------------------------------------------------------------+ #property copyright "Copyright 2014, Rodrigo Malacarne" #property link "https://www.mql5.com/pt/users/malacarne" #property version "1.00" //--- MqlRates myRates[]; MqlDateTime myTime; MqlBookInfo myBook[]; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- datetime myTimeVar = myTime.day; //--- bool ok=MarketBookAdd(_Symbol); if(ok) Print("init ok = ",ok); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- bool ok=MarketBookRelease(_Symbol); if(ok) Print("deinit ok = ",ok); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { bool success=MarketBookGet(_Symbol,myBook); if(success) { for(int i=0;i<ArraySize(myBook);i++) { Print(IntegerToString(i), " : Preço = ",DoubleToString(myBook[i].price,_Digits), " / Volume = ",IntegerToString(myBook[i].volume), " / Tipo = ",myBook[i].type); } } } //+------------------------------------------------------------------+
Olá Romeu,
recebi agora pela manhã uma resposta to ticket que abri sobre o erro na função MarketBookGet. O Service Desk da MetaQuotes pediu para que eu atualizasse o meu terminal para a versão 975 e, aparentemente, parece que o problema está resolvido.
Logo, realmente parece que a build 965 introduziu um pequeno bug na função MarketBookGet. Já fiz meus testes aqui com a versão 975 e, aparentemente, parece que voltou tudo ao normal.
Parabéns!
Abraços,
Malacarne
Muito obrigado Malacarne e Figurelli!
no decorrer da semana eu farei mais testes e posto os resultados.
Muito obrigado!
Romeu.
Olá Malacarne e Figurelli,
peguei o dia pra brincar com o book, ele está perfeito , tudo corrigido, show de bola! hehehe
mais uma vez, muito obrigado!
Grande abraço!
- 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
hoje fui começar a trabalhar com o book de ofertas, montei um EA simples, apenas pra capturar o book de ofertas e exibi-lo na aba do log do Expert. Ele é igual ao código de exemplo encontrado na referência MQL5.
Segue o código:
Eu compilei ele e fui rodar primeiramente no par EURUSD de uma conta live da Alpari. A mensagem que eu recebi no log do EA foi "Could not get contents of the symbol DOM EURUSD"
Depois rodei no WINFUT@ da conta demo MetaBrazil e recebi o mesmo erro.
Após esses erros, eu lembrei que já tinha feito algo relacionado com o book de ofertas e coloquei ele (já estava compilado) pra rodar. Ele rodou muito bem em todas as contas, sem erros.
Aqui em baixo segue a parte relevante do código, que em questões de exibição no log é o mesmo que o código acima:
Indagado do porque o segundo código funciona e o primeiro não, eu coloquei exatamente o mesmo código de captura do book de ofertas do segundo no primeiro. Eu compilei e o erro foi o mesmo.
Eu até criei um novo EA e copiei o código do que funciona e colei no novo EA, o resultado foi de erro.
Como eu não consegui encontrar a falha em meu código e já que o meu segundo código foi compilado com uma versão mais antiga do mt5 (21/05/2014), eu comecei a suspeitar que o erro poderia ser dessa nova versão do compilador (se é que isso é possível).
Eu posso estar errado ou não sobre a minha teoria, por isso, eu gostaria que vocês deixassem suas opiniões.
Grande abraço,
Romeu.