No, el último registro de actividad comercial está en el segundo registro.
Y esto es correcto en términos de prioridad:
2021.05.0510:32:35.896 Trades '160122203': market buy 0.01 EURUSD placed for execution
2021.05.0510:32:35.931 Trades '160122203': order #2249869869 buy 0.01 / 0.01 EURUSD at market done in81.962 ms
2021.05.0510:32:35.931 Trades '160122203': deal #2240398230 buy 0.01 EURUSD at 1.19876 done (based on order #2249869869)
2021.05.0510:32:35.931 Trades '160122203': market sell 0.01 EURUSD, close #2249869868 buy 0.01 EURUSD 1.198762021.05.0510:32:35.978 Trades '160122203': accepted market sell 0.01 EURUSD, close #2249869868 buy 0.01 EURUSD 1.198762021.05.0510:32:35.978 Trades '160122203': market sell 0.01 EURUSD, close #2249869868 buy 0.01 EURUSD 1.19876 placed for execution
2021.05.0510:32:36.009 Trades '160122203': order #2249869870 sell 0.01 / 0.01 EURUSD at market done in77.026 ms
2021.05.0510:32:36.009 Trades '160122203': deal #2240398231 sell 0.01 EURUSD at 1.19876 done (based on order #2249869870)
2021.05.0510:32:36.009 Scripts script Test (EURUSD,M1) removed
Aquí he vuelto a la opción sin impresiones y de nuevo queda una posición después de la ejecución. Resulta que hay que mantener algún tipo de pausa después de que se ejecuten las operaciones. Hombre, qué muleta.
Todavía no he podido publicarlo. Lo publicaré en 24 horas.
¿Cuál es la esencia o el principio de la solución?
Analiza la correspondencia del historial de operaciones con el entorno comercial actual. En este caso, no hay ralentizaciones.
También comprueba Result.order.
Como resultado, el uso es el siguiente: IsSync() devuelve falso - el entorno comercial en la Terminal está torcido, de lo contrario podemos proceder como de costumbre.
Añadidas las huellas. Ahora quedan dos puestos, como era de esperar:
Resultado:
Añadir Trade.ResultRetcodeDescription()
#include <Trade\Trade.mqh>
voidOnStart()
{
CTrade Trade;
while (!IsStopped() && (PositionsTotal() <= 1)) // Закончим, когда появится более одной позиции.if (PositionsTotal() == 1)
{
Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.Print("Закрытие, т. к. PositionsTotal() равно 1");
}
elseif (!OrdersTotal())
{
printf("Перед открытием. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
Trade.Buy(0.01); // Если нет позиции и ордера - открываем позицию.Print(Trade.ResultRetcodeDescription());printf("После открытия. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
}
Print("Выход. PostionsTotal: ", PositionsTotal());
}
#define PRINT(A) Print(#A + " = " + (string)(A))
#include <Trade\Trade.mqh>
voidOnStart()
{
CTrade Trade;
while (!IsStopped() && (PositionsTotal() <= 1)) // Закончим, когда появится более одной позиции.if (PositionsTotal() == 1)
{
Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.Print("Закрытие, т. к. PositionsTotal() равно 1");
}
elseif (!OrdersTotal())
{
printf("Перед открытием. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
Trade.Buy(0.01); // Если нет позиции и ордера - открываем позицию.
PRINT(Trade.ResultRetcodeDescription());
PRINT(Trade.ResultDeal());
PRINT(Trade.ResultOrder());
PRINT(Trade.ResultComment());
printf("После открытия. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
}
Print("Выход. PostionsTotal: ", PositionsTotal());
}
Resultado:
2021.05.0511:36:14.566 Test (EURUSD,M1) Перед открытием. PositionsTotal: 0, OrdersTotal: 02021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultRetcodeDescription() = done at 0.000002021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultDeal() = 02021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultOrder() = 22498746452021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultComment() = Request executed
2021.05.0511:36:14.646 Test (EURUSD,M1) После открытия. PositionsTotal: 2, OrdersTotal: 12021.05.0511:36:14.646 Test (EURUSD,M1) Выход. PostionsTotal: 2
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
No, el último registro de actividad comercial está en el segundo registro.
Y esto es correcto en términos de prioridad:
Aquí he vuelto a la opción sin impresiones y de nuevo queda una posición después de la ejecución. Resulta que hay que mantener algún tipo de pausa después de que se ejecuten las operaciones. Hombre, qué muleta.
Bueno, ¿quién va a actualizarlo? ))
pero cuando hay una posición abierta - el script la cierra y no hace nada más
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
también si intento abrir una posición el script la cierra instantáneamente
logró escribir IsSynchronized(). El código es un poco pesado. Todavía no he decidido en qué forma publicarlo.
¿Cómo funciona? ¿Se encuentra en cierto modo, pero en cierto modo, ausente? ¿Cuál es la esencia o el principio de la solución?
Pero cuando hay una posición abierta, el script la cierra y no hace nada más.
No todos los servidores reproducirán la apertura de dos puestos. En su caso, es el tercer lado (un lado - dos posiciones, el otro - una posición).
Y eso es más o menos correcto en cuanto a la secuencia:
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading
La gran y poderosa MT4 para siempre (o cómo elegir la estrategia de migración)
Ihor Herasko, 2021.05.05 09:35
Y todo está aquí en términos de pedidos:
Las líneas resaltadas confirman la secuencia.
PositionsTotal = 1 - envía una orden de cierre.
El cierre tiene lugar una vez finalizada la ejecución del script. El caché de impresión está un poco distorsionado.
¿Cómo es eso? ¿Se encuentra pero no está?
Todavía no he podido publicarlo. Lo publicaré en 24 horas.
¿Cuál es la esencia o el principio de la solución?
Analiza la correspondencia del historial de operaciones con el entorno comercial actual. En este caso, no hay ralentizaciones.
También comprueba Result.order.
Como resultado, el uso es el siguiente: IsSync() devuelve falso - el entorno comercial en la Terminal está torcido, de lo contrario podemos proceder como de costumbre.
Añadidas las huellas. Ahora quedan dos puestos, como era de esperar:
Resultado:
Añadir Trade.ResultRetcodeDescription()
También ResultDeal / ResultOrder / ResultComment y Order.Estado
Seguramente habrá una respuesta allí
EstadoAñadir Trade.ResultRetcodeDescription()
Y también ResultDeal / ResultOrder / ResultComment y Order.Estado
Seguramente habrá una respuesta allí
EstadoHecho:
Resultado:
Añadir Trade.ResultRetcodeDescription()
Y también ResultDeal / ResultOrder / ResultComment y Order.Estado
Seguramente habrá una respuesta allí.
EstadoEste no es el caso, ya que la condición para enviar una orden de mercado para abrir una posición es PositionsTotal == OrdersTotal == 0.