Por favor ter em conta a secção adequada quando criar tópicos — https://www.mql5.com/pt/forum/421109/page6#comment_49385139
Olá, segue um exemplo funcional postado por um xará em outro tópico:
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Como calcular o valor de ordens fechadas com PositionClose ?
Vinicius Oliveira, 2021.09.10 13:37
Utilize a função OnTradeTransaction junto a biblioteca DealInfo, a função será chamada cada vez que ocorrer o evento de transação e com a biblioteca você conseguirá ver o resultado da sua operação.
#include <Trade\DealInfo.mqh> //Biblioteca para o uso do OnTradeTransaction CDealInfo m_deal; void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //get transaction type as enumeration value //--- if transaction is result of addition of the transaction in history if(type==TRADE_TRANSACTION_DEAL_ADD) { if(HistoryDealSelect(trans.deal)) m_deal.Ticket(trans.deal); else return; if(m_deal.Magic()==EXPERT_MAGIC && m_deal.Symbol()==_Symbol) { if(m_deal.DealType() == DEAL_TYPE_BUY || m_deal.DealType()==DEAL_TYPE_SELL) { if(m_deal.Entry() == DEAL_ENTRY_IN) { Print("Este bloco será chamado ao abrir uma nova posição"); } else if(m_deal.Entry() == DEAL_ENTRY_OUT) { if(m_deal.DealType()==DEAL_TYPE_BUY) { Print("Este bloco será chamado ao fechar uma posição de compra"); double lucroUltimaOperacao = m_deal.Profit(); Print("Lucro da última operação = ", lucroUltimaOperacao); } else if(m_deal.DealType()==DEAL_TYPE_SELL) { Print("Este bloco será chamado ao fechar uma posição de venda"); double lucroUltimaOperacao = m_deal.Profit(); Print("Lucro da última operação = ", lucroUltimaOperacao); } } } } } }
Olá, segue um exemplo funcional postado por um xará em outro tópico:
Olá!
Muito obrigado... conseguir ter um valor mais exato da operação fechada usando o "m_deal.Profit()" no lugar de "m_deal.Price()".
Mas ainda não está pegando o valor de fechamento da ordem para quando eu fecho a ordem pela minha função "FecharOrdemFimDia()".
Por favor, teria alguma ideia?
Obrigado.
Olá!
Muito obrigado... conseguir ter um valor mais exato da operação fechada usando o "m_deal.Profit()" no lugar de "m_deal.Price()".
Mas ainda não está pegando o valor de fechamento da ordem para quando eu fecho a ordem pela minha função "FecharOrdemFimDia()".
Por favor, teria alguma ideia?
Obrigado.
Opa, você poderia incluir captura de tela (de preferência) dos resultados dessas operações encerradas ao final do dia e dos resultados retornados por OnTradeTransaction(), ou descrevê-los com mais detalhes, para que possamos ter uma melhor noção dessa diferença que está ocorrendo?

- 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
Olá!
Após criar um EA para operar Mini-Índice, fiz um breve código para calcular o valor de fechamento das ordens.
Quando uma ordem atinge o TakeProft (TP) ou StopLoss (SL), está calculando corretamente os valores.
Mas como eu programei para ser apenas Day Trade, fiz uma função que ao término do expediente (no horário que o usuário setar em parâmetros), se houver ordens abertas, estas são fechadas.
O problema é que quando as ordens são fechadas no fim do expediente, eu não consigo pegar o valor do resultado desta ordem.
User a transação "OnTradeTransaction" para este controle.
Vou compartilhar o código de OnTradeTransaction e da Função que fecha as ordens no fim do expediente.
Por favor, poderiam me ajudar a calcular o resultado da ordem fechada pela função do fim do expediente?
Obrigado.