Ajuda: Como calcular o resultado de uma operação em MQL4

 

Olá!

Por favor, poderia me dar um exemplo de uma função para calcular o resultado de uma operação usando MQL4?

Exemplo de uma Ordem de Compra no XAU/USD:

Preço de Abertura da Ordem: 2018.54

Preço de Fechamento da Ordem: 2021.06

Lote: 0.01

O Log do EA (Diario) do MT4 no Testador de Estratégia me mostrou o seguinte:

HORÁRIO MENSAGEM

2024.05.09 04:37:04.414 2024.01.27 00:30:00  HFP XAUUSD,M15: open #1 buy 0.01 XAUUSD at 2018.54 sl: 2014.43 tp: 2021.06 ok

2024.05.09 04:37:07.074 2024.01.29 03:05:00  Tester: take profit #1 at 2021.06 (2023.75 / 2024.12)


Spread: 37 (Certo?)


O resultado apresentado pelo MT4 foi de 2.10 na Coluna Lucro. Mas não consigo chegar neste valor com os calculos que estou fazendo no meu EA. 

Log do MT4 nos testes:

# Horário Tipo Ordem Tamanho Preço S / L T / P Lucro Saldo

1 2024.01.27 00:30 buy     1 0.01 2018.53    2014.57 2020.96 0.00 200.00

2 2024.01.29 03:05 t/p 1 0.01 2020.96    2014.57 2020.96 2.01 202.01


Poderiam por gentileza passar um exemplo de código para fazer isso?


Muito obrigado.

 
herfranpi:

Olá!

Por favor, poderia me dar um exemplo de uma função para calcular o resultado de uma operação usando MQL4?

Exemplo de uma Ordem de Compra no XAU/USD:

Preço de Abertura da Ordem: 2018.54

Preço de Fechamento da Ordem: 2021.06

Lote: 0.01

O Log do EA (Diario) do MT4 no Testador de Estratégia me mostrou o seguinte:

HORÁRIO MENSAGEM

2024.05.09 04:37:04.414 2024.01.27 00:30:00  HFP XAUUSD,M15: open #1 buy 0.01 XAUUSD at 2018.54 sl: 2014.43 tp: 2021.06 ok

2024.05.09 04:37:07.074 2024.01.29 03:05:00  Tester: take profit #1 at 2021.06 (2023.75 / 2024.12)


Spread: 37 (Certo?)


O resultado apresentado pelo MT4 foi de 2.10 na Coluna Lucro. Mas não consigo chegar neste valor com os calculos que estou fazendo no meu EA. 

Log do MT4 nos testes:

# Horário Tipo Ordem Tamanho Preço S / L T / P Lucro Saldo

1 2024.01.27 00:30 buy     1 0.01 2018.53    2014.57 2020.96 0.00 200.00

2 2024.01.29 03:05 t/p 1 0.01 2020.96    2014.57 2020.96 2.01 202.01


Poderiam por gentileza passar um exemplo de código para fazer isso?


Muito obrigado.

Eu não sei se tem função no mt4 que calcula isso, mas costuma pra posição long ser saida - entrada + troca. A coluna de troca/permanencia/swap tem que ser verificada para verificar se ela estava a favor ou contra e qual o valor monetário. Possivelmente, o valor deveria estar contra um pouquinho.
 
herfranpi: [ . . . ]  Poderiam por gentileza passar um exemplo de código para fazer isso? [ . . . ]

Olá!! Testei a função abaixo com algumas operações do meu histórico e parece funcionar bem (mas requer mais testes):

double OrderCalcProfit_MQL4(ENUM_ORDER_TYPE action, string symbol, double volume, double price_open, double price_close)
  {
   double tick_value, tick_size, profit;

   if(!SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tick_value) || !SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE, tick_size))
     {
      Print(__FUNCTION__, " - Failed to execute SymbolInfoDouble(), error: ", GetLastError());
      return(WRONG_VALUE);
     }

   profit = tick_value * volume * (MathAbs(price_open - price_close) / tick_size);

   return(NormalizeDouble((action == OP_BUY && price_close < price_open) || (action == OP_SELL && price_close > price_open) ? -profit : profit, 2));
  }

No seu exemplo, o resultado foi o seguinte:

Print("Resultado: ", OrderCalcProfit_MQL4(OP_BUY, "XAUUSD", 0.01, 2018.54, 2021.06));

Acredito que essa diferença de 0,51 seja referente a swap (a posição ficou aberta alguns dias), comissão, ...

Artigos

A matemática do mercado: lucro, prejuízo e custos

Evgeniy Ilin, 2022.11.24 08:59

Neste artigo, eu mostrarei como calcular o lucro ou prejuízo total de qualquer negociação, incluindo comissão e swap. Eu fornecerei o modelo matemático mais preciso e o usarei para escrever o código e compará-lo com o padrão. Além disso, eu também tentarei entrar na função principal da MQL5 para calcular o lucro e chegar ao fundo de todos os valores necessários da especificação.

Razão: