Discussão do artigo "Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXXII): ordens de negociação pendentes, posicionamento de ordens por condições"
Excluí o diretório anterior do DoEasy em Include no meu computador e, em seguida, baixei o arquivo MQL5.zip deste artigo.
Durante a compilação do arquivo TestDoEasyPart32.mq5, encontrei 61 erros de compilação 😱
É que está faltando um caractere / no início da linha 114 do arquivo Message.mqh na função CMessage::ToMail (veja a seta rosa na captura acima)
Depois que o caractere de barra é adicionado para definir a linha de comentário, não há mais problemas de compilação.
Também tive de alterar o sinalizador somente leitura dos arquivos no diretório DoEasy para que a alteração pudesse ser salva.
Excluí o diretório anterior do DoEasy no Include em meu computador e, em seguida, fiz o download do arquivo MQL5.zip deste artigo.
Ao compilar o arquivo TestDoEasyPart32.mq5, encontrei 61 erros de compilação 😱
É que está faltando um caractere / no início da linha 114 do arquivo Message.mqh na função CMessage::ToMail (veja a seta rosa na captura acima)
Depois que o caractere de barra é adicionado para definir a linha de comentário, não há mais problemas de compilação.
Também tive de alterar o sinalizador somente leitura dos arquivos no diretório DoEasy para que a alteração pudesse ser salva.
No código-fonte anexado ao artigo na parte russa do recurso mql5.com, não há esse erro:

Obrigado por sua atenção e preocupação.
---------------------------------
Эта досадная ошибка была внесена при переводе текста статьи и комментариев в коде с русского языка на английский.
В исходниках, приложенных к статье в русской части ресурса mql5.com, такой ошибки нету.
Olá,
Há um erro sobre o tipo errado de preenchimento de tipo de ordem em minha conta de demonstração da IC Markets (MT5).
Depurei seu código e descobri que a inicialização parece estar correta com ORDER_FILLING_IOC em minha conta. No entanto, quando a linha engine.OpenBuy(lot,Symbol(),magic,stoploss,takeprofit); no EA é chamada e a abertura (ou fechamento) de uma posição é tentada, o tipo de preenchimento não é definido corretamente (veja abaixo).
Criei uma solução rápida (e suja) para fazer isso funcionar. Você pode ver as alterações fazendo uma comparação com seus arquivos nos dois arquivos que anexei. Substitua meu código pelo código correto.
Trading.mqh na linha 2646:
Eu mudei:
res=trade_obj.OpenPosition(type,this.m_request.volume,this.m_request.sl,this.m_request.tp,magic,comment,deviation, this.m_request.type_filling ); //em vez de type_filling
TradeObj.mqh
CTradeObj::ClosePosition:
Eu adicionei:
this.m_request.type_filling=ORDER_FILLING_IOC;
CTradeObj::SetOrder:
Adicionei:
ENUM_ORDER_TYPE_FILLING order_type_filling=(ENUM_ORDER_TYPE_FILLING)::OrderGetInteger(ORDER_TYPE_FILLING);
this.m_request.type_filling= (type_filling==WRONG_VALUE ? order_type_filling : ORDER_FILLING_IOC);
Olá,
Há um erro sobre o tipo de preenchimento de tipo de ordem incorreto em minha conta de demonstração do IC Markets (MT5).
Depurei seu código e descobri que a inicialização parece estar correta com ORDER_FILLING_IOC em minha conta. No entanto, quando a linha engine.OpenBuy(lot,Symbol(),magic,stoploss,takeprofit); no EA é chamada e a abertura (ou fechamento) de uma posição é tentada, o tipo de preenchimento não é definido corretamente (veja abaixo).
Criei uma solução rápida (e suja) para fazer isso funcionar. Você pode ver as alterações fazendo uma comparação com seus arquivos nos dois arquivos que anexei. Por favor, substitua meu código pelo código correto.
Trading.mqh na linha 2646:
Eu mudei:
res=trade_obj.OpenPosition(type,this.m_request.volume,this.m_request.sl,this.m_request.tp,magic,comment,deviation, this.m_request.type_filling ); //em vez de type_filling
TradeObj.mqh
CTradeObj::ClosePosition:
Adicionei:
this.m_request.type_filling=ORDER_FILLING_IOC;
CTradeObj::SetOrder:
Adicionei:
ENUM_ORDER_TYPE_FILLING order_type_filling=(ENUM_ORDER_TYPE_FILLING)::OrderGetInteger(ORDER_TYPE_FILLING);
this.m_request.type_filling= (type_filling==WRONG_VALUE ? order_type_filling : ORDER_FILLING_IOC);
Obrigado. Nos artigos subsequentes, isso já foi corrigido.
Спасибо. В последующих статьях это уже исправлено.
Obrigado. Nos artigos subsequentes, isso já foi corrigido.
Спасибо. В последующих статьях это уже исправлено.
Tentei usar o código da parte 34, mas o erro ainda persiste:

Também tentei usar o EA da parte 34 com a biblioteca DoEasy de seu artigo mais recente, parte 43, mas essa biblioteca da parte 43 é incompatível com o EA da parte 34 (método engine.OnTimer alterado etc.).
O que eu fiz de errado? : ) Um abraço!
Tentei usar o código da parte 34, mas o erro ainda persiste:
Também tentei usar o EA da parte 34 com a biblioteca DoEasy de seu artigo mais recente, parte 43, mas essa biblioteca da parte 43 é incompatível com o EA da parte 34 (método engine.OnTimer alterado etc.).
O que eu fiz de errado? : ) Um abraço!
O que exatamente você está fazendo para obter esse erro? Qual EA você usa? Esse consultor de teste do artigo não foi alterado?
Что именно вы делаете чтобы получить эту ошибку? Какой используете советник? Это тестовый советник из статьи без изменений?
O que exatamente você está fazendo para obter esse erro? Qual EA você usa? Esse consultor de teste do artigo não foi alterado?
Что именно вы делаете чтобы получить эту ошибку? Какой используете советник? Это тестовый советник из статьи без изменений?
Pressiono "Buy" ou "Sell" sem "P" ou "T" ativados.
Usei o EA inalterado da parte 34.
Pressiono "Buy" ou "Sell" sem "P" ou "T" ativados.
Usei o EA inalterado da parte 34.
Há algum erro desse tipo no MetaQuotes-Demo?
Há algum erro desse tipo na MetaQuotes-Demo?
Não há erros na MetaQuotes Demo. Interessante...
E agora?
Nenhum erro na demonstração do MetaQuotes. Interessante...
E agora?
Então, preciso me conectar ao servidor de negociação no qual você encontrou erros e encontrar um motivo para corrigir o comportamento.
Informe-me os detalhes para registrar uma conta de demonstraçã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

Novo artigo Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXXII): ordens de negociação pendentes, posicionamento de ordens por condições foi publicado:
Continuamos a criar funcionalidades que nos permitem negociar usando solicitações pendentes. Neste artigo criaremos um recurso para definir ordens pendentes por condições.
No objeto-solicitação pendente temos uma matriz armazenando todas as suas condições de ativação. No temporizador da classe de gerenciamento de negociação é constantemente examinada a lista de solicitações de negociação pendentes, e quando chega a hora de execução da solicitação pendente de negociação (quando atendidas as condições de ativação descritas nela), para o servidor é enviada uma ordem de negociação cujos parâmetros são especificados na solicitação de negociação disparada.
Para abrir posições, basta controlar que as condições especificadas sejam cumpridas, registrar esse momento para, assim, imediatamente enviar ao servidor a ordem de negociação permitindo abrir a posição.No entanto, ao definir ordens pendentes usando objetos-solicitações pendentes há certa dificuldade: uma ordem é posicionada a uma distância do preço, enquanto uma posição é colocada de acordo como o preço atual correspondente.
Por essa razão, para colocar ordens pendentes por condições, também é necessário considerar a distância de posicionamento da ordem pendente. Neste caso, existe um dilema, isto é, ao criar uma solicitação pendente, indicamos a distância para colocar uma ordem pendente futura. Porém, não conhecemos essa distância. Talvez seja desde preço que está no momento da criação da solicitação pendente, ou desde o preço que existirá uma vez cumpridas todas as condições especificadas no objeto-ordem para ativação. Afinal, no momento em que todas as condições são atendidas, o preço poderia se afastar muito do local em que criada a solicitação pendente. Além disso, só poderemos saber com certeza o preço futuro apenas quando a única condição, para ativar a solicitação pendente, for um valor de preço definido. Em outros casos, desconheceremos o preço futuro em relação ao qual será necessário colocar a ordem.
Autor: Artyom Trishkin