Tentei fazer isso e não é a mesma coisa que a lista de posições históricas no MT5. Embora as duas posições próximas tenham se fundido, o volume ainda é curto em 0,01 lote.
hini #: É possível obter uma lista semelhante ao histórico de posições no MT5?
Por meio de instantâneos.
#define MT4ORDERS_BYPASS_MAXTIME 1000000// Tempo máximo (em µs) para aguardar a sincronização do ambiente de negociação#include <MT4Orders.mqh> // https://www.mql5.com/pt/code/16006#define VIRTUAL_SNAPSHOT_REFRESHTIME 1000// Tempo de vida do instantâneo para atualização. No MT5, é necessário conectar o MT4Orders.mqh#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/pt/code/22577#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
void PrintHistory()
{
for (uint i = OrdersHistoryTotal(); (bool)i--;)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
OrderPrint();
}
voidOnStart()
{
if (AccountInfoInteger(ACCOUNT_TRADE_MODE) == ACCOUNT_TRADE_MODE_DEMO)
{
const TICKET_TYPE Ticket1 = OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);
const TICKET_TYPE Ticket2 = OrderSend(_Symbol, OP_SELL, 1, Bid, 0, 0, 0);
if (OrderCloseBy(Ticket1, Ticket2)) // OrderCloseBy(Ticket2, Ticket1) é outra sequência.
{
Print("\nWith CloseBy.");
PrintHistory(); // O resultado depende da sequência de parâmetros de entrada OrderCloseBy.Print("\nWithout CloseBy.");
VIRTUAL::Snapshot(VIRTUAL_SNAPSHOT_REFRESHTIME, -1, false, "", false);
PrintHistory(); // Resultado NOT зависит от последовательности входных параметров OrderCloseBy.
}
}
}
Resultado.
With CloseBy.
#1512313786042025.12.1614:59:36.869 sell 0.00 GBPJPY 207.7220.0000.0002025.12.1614:59:36.904207.7220.000.000.00#151304734151 by #1513047341530#1512313786032025.12.1614:59:36.834 buy 1.00 GBPJPY 207.7340.0000.0002025.12.1614:59:36.904207.7220.000.00 -6.59#151304734151 by #1513047341530#1512313770092025.12.1614:59:15.351 balance 0.000.0000.0000.0002025.12.1614:59:15.3510.0000.000.00100000.000
Without CloseBy.
#1512313786032025.12.1614:59:36.834 buy 1.00 GBPJPY 207.7340.0000.0002025.12.1614:59:36.869207.7220.000.00 -6.59#151304734151 by #1513047341530: -12 (-12) - 00:00:00#1512313770092025.12.1614:59:15.351 balance 0.000002025.12.1614:59:15.35100.000.00100000.000 - 00:00:00
Isso parece incorreto; a direção está incorreta e o número da ordem também não parece corresponder.
With CloseBy.
#7217438492025.12.1606:10:25.029 buy 0.03 XAUUSDm 4286.4540.0000.0002025.12.1606:50:54.9424289.8590.000.0010.220#7217438222025.12.1606:13:38.019 sell 0.00 XAUUSDm 4286.3520.0000.0002025.12.1606:50:53.8754286.3520.000.000.00#999167005 by #9991741760#7217438212025.12.1606:10:25.029 buy 0.01 XAUUSDm 4286.4540.0000.0002025.12.1606:50:53.8754286.3520.000.00 -0.10#999167005 by #9991741760
Without CloseBy.
#7217438492025.12.1606:10:25.029 buy 0.03 XAUUSDm 4286.4540.0000.0002025.12.1606:50:54.9424289.8590.000.0010.220: +3405 (+3405) - 00:40:29#7217438212025.12.1606:10:25.029 buy 0.01 XAUUSDm 4286.4540.0000.0002025.12.1606:13:38.0194286.3520.000.00 -0.10#999167005 by #9991741760: -102 (-102) - 00:03:13
No MT5, há apenas duas entidades no histórico de negociações: negociações e ordens. Não há posições no histórico de negociações e, durante muitos anos, o MT5 não exibiu posições fechadas.
O MQ criou esse modo de exibição do histórico ao gerar o histórico de posições a partir do histórico de negociações/ordens. Isso é geração. E, infelizmente, em algumas situações, ela está errada. Em particular, no caso acima.
Vamos considerar a cronologia das operações de negociação nessa situação.
A negociação 2025.12.16 06:10:25.029 721657655 BUY 0.04 foi executada - a posição 999167005 BUY 0.04 foi aberta.
Negociações executadas 2025.12.16 06:13:38.019 721662376 SELL 0.01 - abre a posição 999174176 SELL 0.01.
Negociações executadas 2025.12.16 06:50:54.942 721743849 SELL 0.03 - a posição 999167005 BUY 0.03 foi fechada.
No total, foram feitas exatamente três negociações. E isso corresponde totalmente ao que o script mostra na citação acima.
No histórico de negociações, o OrderTicket é o ticket da transação que fecha a posição. Cada posição tem seu próprio OrderTicket. O MT4Orders gera o histórico de posições de forma inequívoca.
O mesmo valor POSITION_ID (OrderTicketID) pode ser usado para diferentes posições que nem sequer se sobrepuseram no período de sua existência. O MT5 gera o histórico de posições livremente.
Dê uma olhada nessas linhas de geração de histórico de posição do MT5 (o vermelho não é meu).
Há muita coisa que levanta dúvidas. Em particular, houve um giro de negociação (círculo completo) de 0,05 lote?
Muitas situações de negociação diferentes são tratadas em detalhes no blog.
E o histórico de posições gerado pelo CloseBy é diferente daquele que criei manualmente.
Ele corresponde perfeitamente à linha do tempo. Mais uma vez. O MT5 gera o histórico de negociação. É uma representação distorcida das posições fechadas.
Você não deve se guiar pelo que o MT5 mostra, mas pelo bom senso.
Entendo a pergunta, mas gostaria de esclarecer: é possível obter uma lista semelhante ao histórico de posições no MT5, sem entrar em detalhes?
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Bibliotecas: MT4Orders
fxsaber, 2025.12.15 11:48 AM
https://www.mql5.com/ru/blogs/post/754817
O volume ainda não é suficiente para 0,01 lote.
Forneça evidências do erro. Recomendo que você abra uma conta de demonstração no MT4 e tente fazer as mesmas operações de negociação lá.
É possível obter uma lista semelhante ao histórico de posições no MT5?
Resultado.
Por meio de fotos instantâneas.
Isso parece errado; a direção está incorreta e o número do pedido também não parece corresponder.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Bibliotecas: MT4Orders
hini, 2025.12.17 02:14 pm.
Isso parece incorreto; a direção está incorreta e o número da ordem também não parece corresponder.
No MT5, há apenas duas entidades no histórico de negociações: negociações e ordens. Não há posições no histórico de negociações e, durante muitos anos, o MT5 não exibiu posições fechadas.
O MQ criou esse modo de exibição do histórico ao gerar o histórico de posições a partir do histórico de negociações/ordens. Isso é geração. E, infelizmente, em algumas situações, ela está errada. Em particular, no caso acima.
Vamos considerar a cronologia das operações de negociação nessa situação.
No total, foram feitas exatamente três negociações. E isso corresponde totalmente ao que o script mostra na citação acima.
No histórico de negociações, o OrderTicket é o ticket da transação que fecha a posição. Cada posição tem seu próprio OrderTicket. O MT4Orders gera o histórico de posições de forma inequívoca.
O mesmo valor POSITION_ID (OrderTicketID) pode ser usado para diferentes posições que nem sequer se sobrepuseram no período de sua existência. O MT5 gera o histórico de posições livremente.
Dê uma olhada nessas linhas de geração de histórico de posição do MT5 (o vermelho não é meu).
Há muita coisa que levanta dúvidas. Em particular, houve um giro de negociação (círculo completo) de 0,05 lote?
Muitas situações de negociação diferentes são tratadas em detalhes no blog.
Repeti o experimento e parece que as posições históricas geradas pelo MT5 estão corretas:
Aqui, abri manualmente as posições: buy-0.04, sell-0.01, buy-0.04 e, em seguida, fechei todas com um botão.
E as posições históricas geradas pelo CloseBy são diferentes das que criei manualmente.
Aqui estão as posições históricas do MT5:
E o histórico de posições gerado pelo CloseBy é diferente daquele que criei manualmente.
Ele corresponde perfeitamente à linha do tempo. Mais uma vez. O MT5 gera o histórico de negociação. É uma representação distorcida das posições fechadas.
Você não deve se guiar pelo que o MT5 mostra, mas pelo bom senso.