He probado esto y no es lo mismo que la lista de posiciones históricas en MT5. A pesar de que los dos closeby se fusionaron, el volumen sigue siendo corto por 0,01 lotes.
hini #: ¿es posible obtener una lista similar al historial de posiciones en MT5?
A través de instantáneas.
#define MT4ORDERS_BYPASS_MAXTIME 1000000// Tiempo máximo (en µs) de espera para la sincronización del entorno comercial#include <MT4Orders.mqh> // https://www.mql5.com/es/code/16006#define VIRTUAL_SNAPSHOT_REFRESHTIME 1000// Tiempo de vida de la instantánea para la actualización. En MT5 requiere conectado MT4Orders.mqh#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/es/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) es otra secuencia.
{
Print("\nWith CloseBy.");
PrintHistory(); // El resultado depende de la secuencia de parámetros de entrada OrderCloseBy.Print("\nWithout CloseBy.");
VIRTUAL::Snapshot(VIRTUAL_SNAPSHOT_REFRESHTIME, -1, false, "", false);
PrintHistory(); // Resultado NO зависит от последовательности входных параметров 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
Eso parece incorrecto; la dirección es incorrecta, y el número de orden tampoco parece coincidir.
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
En MT5, sólo hay dos entidades en el historial de operaciones: operaciones y órdenes. No hay posiciones en el historial de operaciones y durante muchos años MT5 no mostraba las posiciones cerradas.
MQ creó este modo de mostrar el historial generando el historial de posiciones a partir del historial de operaciones/órdenes. Eso es generación. Y desafortunadamente, en algunas situaciones es incorrecto. En particular, en el caso anterior.
Consideremos la cronología de las operaciones comerciales en esta situación.
La operación 2025.12.16 06:10:25.029 721657655 BUY 0.04 fue ejecutada - la posición 999167005 BUY 0.04 fue abierta.
Operaciones ejecutadas 2025.12.16 06:13:38.019 721662376 VENTA 0.01 - se abre la posición 999174176 VENTA 0.01.
Operaciones ejecutadas 2025.12.16 06:50:54.942 721743849 SELL 0.03 - se cierra la posición 999167005 BUY 0.03.
En total, se realizaron exactamente tres operaciones. Y se corresponde totalmente con lo que muestra el script en la cita anterior.
En el historial de operaciones, OrderTicket es el ticket de la operación que cierra la posición. Cada posición tiene su propio OrderTicket. MT4Orders genera el historial de posiciones de forma inequívoca.
El mismo valor POSITION_ID (OrderTicketID) puede ser usado para diferentes posiciones que ni siquiera se solaparon en el tiempo de su existencia. MT5 genera el historial de posiciones libremente.
Echa un vistazo a estas líneas de generación del historial de posiciones de MT5 (el rojo no es mío).
Hay muchas cosas ahí que plantean preguntas. En particular, ¿hubo una rotación de operaciones (círculo completo) de 0,05 lotes?
En el blog se tratan en detalle muchas situaciones de trading diferentes.
Y el historial de posiciones generado vía CloseBy es diferente del que creé manualmente.
Coincide perfectamente con la línea de tiempo. Una vez más. MT5 genera el historial de operaciones. Es una representación torcida de las posiciones cerradas.
No hay que guiarse por lo que muestra MT5, sino por el sentido común.
Se ajusta perfectamente a la línea de tiempo. Una vez más. MT5 genera un historial de operaciones. Es una representación torcida de posiciones cerradas.
No hay que guiarse por lo que muestra MT5, sino por el sentido común.
Vale, lo entiendo. Te estás centrando en el proceso de cierre de órdenes históricas.
Y yo quería decir, o más precisamente, obtener una lista de posiciones (órdenes de posiciones) que existieron en la cuenta entre los dos puntos especificados en el tiempo.
Por supuesto, debido a la operación CloseBy, el precio y la hora de cierre de algunas órdenes pueden ser inexactos. Pero para mí (como usuario) no es crítico, ya que el cálculo de beneficios es correcto. Si necesitas detalles, siempre puedes mirar en la sección "Órdenes y Operaciones".
volumen sigue siendo insuficiente para 0,01 lote.
Proporcione pruebas del error. Te recomiendo que abras una cuenta demo en MT4 e intentes hacer las mismas operaciones allí.
¿es posible obtener una lista similar al historial de posiciones en MT5?
Resultado.
A través de instantáneas.
Esto parece incorrecto; la dirección es incorrecta y el número de pedido tampoco parece coincidir.
Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading
Bibliotecas: MT4Orders
hini, 2025.12.17 02:14 pm.
Eso parece incorrecto; la dirección es incorrecta, y el número de orden tampoco parece coincidir.
En MT5, sólo hay dos entidades en el historial de operaciones: operaciones y órdenes. No hay posiciones en el historial de operaciones y durante muchos años MT5 no mostraba las posiciones cerradas.
MQ creó este modo de mostrar el historial generando el historial de posiciones a partir del historial de operaciones/órdenes. Eso es generación. Y desafortunadamente, en algunas situaciones es incorrecto. En particular, en el caso anterior.
Consideremos la cronología de las operaciones comerciales en esta situación.
En total, se realizaron exactamente tres operaciones. Y se corresponde totalmente con lo que muestra el script en la cita anterior.
En el historial de operaciones, OrderTicket es el ticket de la operación que cierra la posición. Cada posición tiene su propio OrderTicket. MT4Orders genera el historial de posiciones de forma inequívoca.
El mismo valor POSITION_ID (OrderTicketID) puede ser usado para diferentes posiciones que ni siquiera se solaparon en el tiempo de su existencia. MT5 genera el historial de posiciones libremente.
Echa un vistazo a estas líneas de generación del historial de posiciones de MT5 (el rojo no es mío).
Hay muchas cosas ahí que plantean preguntas. En particular, ¿hubo una rotación de operaciones (círculo completo) de 0,05 lotes?
En el blog se tratan en detalle muchas situaciones de trading diferentes.
Repetí el experimento y parece que las posiciones históricas generadas por MT5 son correctas:
Aquí abrí posiciones manualmente: compra-0.04, venta-0.01, compra-0.04, y luego cerré todas con un botón.
Y las posiciones históricas generadas vía CloseBy son diferentes de la que creé manualmente.
Aquí están las posiciones históricas de MT5:.
Y el historial de posiciones generado vía CloseBy es diferente del que creé manualmente.
Coincide perfectamente con la línea de tiempo. Una vez más. MT5 genera el historial de operaciones. Es una representación torcida de las posiciones cerradas.
No hay que guiarse por lo que muestra MT5, sino por el sentido común.
Se ajusta perfectamente a la línea de tiempo. Una vez más. MT5 genera un historial de operaciones. Es una representación torcida de posiciones cerradas.
No hay que guiarse por lo que muestra MT5, sino por el sentido común.