A continuación se tocará el tema, que se refiere no sólo MT4, sino también MT5 con otras plataformas. Pero para una fácil percepción, la lógica será escrito en MQL4, por lo que en este hilo.
Discusión directamente relacionada con la biblioteca.
posición abierta son aceptados por el servidor de trading, se genera la orden de mercado correspondiente, que está en la tabla de órdenes abiertas de MT5 hasta que se ejecuta.
Por lo tanto, en MT5, incluso en MQL5 puro, la modificación/eliminación de dichas órdenes es imposible y la lógica de trading de MT5 requiere comprobar si una orden abierta está realmente congelada o no.
A continuación se muestra la condición para identificar este tipo de órdenes al escribir la lógica de trading en MT4Orders y un ejemplo de su activación
// Activar SL/TP/SOvoidOnTradeTransaction ( constMqlTradeTransaction &Trans, constMqlTradeRequest &Request, constMqlTradeResult &Result )
{
if ((Trans.type == TRADE_TRANSACTION_ORDER_ADD) && OrderSelect(Trans.order))
{
constENUM_ORDER_REASON Reason = (ENUM_ORDER_REASON)OrderGetInteger(ORDER_REASON);
if (Reason == ORDER_REASON_TP)
Print("Position #" + (string)Trans.position + " - triggered TP.");
elseif (Reason == ORDER_REASON_SL)
Print("Position #" + (string)Trans.position + " - triggered SL.");
elseif (Reason == ORDER_REASON_SO)
Print("Position #" + (string)Trans.position + " - triggered StopOut.");
}
}
#include <MT4Orders.mqh>
#define BidSymbolInfoDouble(_Symbol, SYMBOL_BID)
#define AskSymbolInfoDouble(_Symbol, SYMBOL_ASK)
voidOnInit()
{
EventSetMillisecondTimer(1);
OrderSend(_Symbol, OP_BUY, 1, Ask, 100, Bid - _Point, Ask + _Point);
}
// Mostrar que las órdenes SL/TP/SO están presentes en la tabla actual de órdenes abiertas de MT5voidOnTimer()
{
for (int i = OrdersTotal() - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS) &&
(OrderCloseReason() >= (int)ORDER_REASON_SL)) // Si se activa esta condición, ¡no podrá modificar/borrar el pedido!
{
OrderPrint();
constlong Position = OrderGetInteger(ORDER_POSITION_ID); // Posiblemente, ya que MT4Orders está configurado para trabajar en paralelo con la API de trading MQL5constENUM_ORDER_REASON Reason = (ENUM_ORDER_REASON)OrderCloseReason();
if (Reason == ORDER_REASON_TP)
Print("Position #" + (string)Position + " - in the process of execution TP.");
elseif (Reason == ORDER_REASON_SL)
Print("Position #" + (string)Position + " - in the process of execution SL.");
elseif (Reason == ORDER_REASON_SO)
Print("Position #" + (string)Position + " - in the process of execution StopOut.");
}
}
Resultado
2017.09.1409:35:11.565 Position #1060283- triggered TP.
2017.09.1409:35:11.575#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.575 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.595#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.595 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.607#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.607 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.617#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.617 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.637#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.637 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.657#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.657 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.667#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.667 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.680#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.680 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.700#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.700 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.710#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.710 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.730#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.730 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.757#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.757 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.760#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.760 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.780#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.780 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.790#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.790 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.810#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.810 Position #1060283- in the process of execution TP.
2017.09.1409:35:11.820#10602842017.09.1409:36:14 sell 1.00 EURUSD 1.188380.000000.000001.188380.000.000.00 [tp 1.18838] 02017.09.1409:35:11.820 Position #1060283- in the process of execution TP.
Se puede ver que la orden TP estuvo colgada entre las órdenes abiertas durante más de un cuarto de segundo. Cualquier intento de modificarla/eliminarla provocaba errores.
Tenga en cuenta esta característica de MT5 (no sólo cuando trabaje con MT4Orders).
posición abierta son aceptados por el servidor de trading, se genera la orden de mercado correspondiente, que está en la tabla de órdenes abiertas de MT5 hasta que se ejecuta.
Por lo tanto, en MT5, incluso en MQL5 puro, la modificación/eliminación de dichas órdenes es imposible y la lógica de trading de MT5 requiere comprobar si una orden abierta está realmente congelada o no.
A continuación puede ver la condición para identificar este tipo de órdenes al escribir la lógica de trading en MT4Orders y un ejemplo de su activación
Puede ver que la orden TP estuvo colgada entre las órdenes abiertas durante más de un cuarto de segundo. Cualquier intento de modificarla/eliminarla provocaría errores.
Tenga en cuenta esta característica de MT5 (no sólo cuando trabaje con MT4Orders).
La comprobación de esta condición está ahora integrada en la librería, puede trabajar como en MT4
// Lista de cambios:// 14.09.2017:// Fix: Ahora la libreria no ve las ordenes actuales de MT5 que no tienen el estado ORDER_STATE_PLACED..// Para que la librería vea todas las órdenes abiertas de MT5, se debe escribir la siguiente línea ANTES de la librería//// #define MT4ORDERS_SELECTFILTER_OFF // Haz que MT4Orders.mqh vea todas las órdenes actuales de MT5
Maxim Dmitrievsky: Nunca he visto tal variedad en ninguna otra plataforma).
El parámetro ORDER_STATE juega un papel aún más importante. Para órdenes SL/TP es ORDER_STATE_STARTED. Pero nunca se debe ignorar todo ORDER_STATE_STARTED (lleva mucho tiempo explicarlo). Por eso es un error confiar en ORDER_STATE, pero se necesita ORDER_REASON.
ORDER_STATE es otra historia. Supongamos que una posición se abre parcialmente a partir de una orden pendiente, y el resto de la orden sigue pendiente. Entonces hay una operación en el Historial, pero la Orden en sí todavía no está ahí. Si la orden se llena completamente, entonces para entender que la primera operación generada por ella se abrió parcialmente, no puedes mirar el ORDER_STATE de la orden de la que se originó.
De todos modos, hay tantas situaciones con este STATE en realidad..... Es necesario introducir OrderOpenState() y OrderCloseSate() humanos, pero es un rompe cabezas (y sólo unos pocos lo usarán). Y, por supuesto, sigue siendo un simple rompecabezas. Hay muchos, y algunos ni se sospechan. Con todo, es bueno ser capaz de desentrañar parcialmente a un estado de trabajo y la forma humana con casi ninguna pérdida de productividad. Más de la mitad de las necesidades, creo, la biblioteca cumple.
El parámetro ORDER_STATE desempeña un papel aún más importante. Para órdenes SL/TP es ORDER_STATE_STARTED. Pero nunca se debe ignorar todo ORDER_STATE_STARTED (lleva mucho tiempo explicarlo). Por eso es un error confiar en ORDER_STATE, pero se necesita ORDER_REASON.
ORDER_STATE es otra historia. Supongamos que una posición se abre parcialmente a partir de una orden pendiente, y el resto de la orden sigue pendiente. Entonces hay una operación en el Historial, pero la Orden en sí todavía no está ahí. Si la orden se llena completamente, entonces para entender que la primera operación generada por ella se abrió parcialmente, no puedes mirar el ORDER_STATE de la orden de la que se originó.
De todos modos, hay tantas situaciones con este STATE en realidad..... Es necesario introducir OrderOpenState() y OrderCloseSate() humanos, pero es un rompe cabezas (y sólo unos pocos lo usarán). Y, por supuesto, sigue siendo un simple rompecabezas. Hay muchos, y algunos ni se sospechan. Con todo, es bueno ser capaz de desentrañar parcialmente a un estado de trabajo y la forma humana con casi ninguna pérdida de productividad. Creo que la biblioteca satisface más de la mitad de mis necesidades.
Yo lo uso en bots, ni en el probador ni en el real, no se han producido errores todavía, como parece, en Forts en la apertura y forex. Hubo un problema cuando de repente el dts empezó a ejecutar órdenes lentamente (plugin contra arbitraje), no me acuerdo, no me acuerdo, creo que a la liba no le daba tiempo a calcular si la posición ya está en el mercado o no, (un problema con la sincronización del histórico, que yo recuerde) y estampaba un montón de órdenes seguidas, pero luego hacías una actualización y se ponía como un reloj. Así que más de la mitad por lo menos :)
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.
Foro sobre negociación, sistemas automatizados de negociación y ensayo de estrategias de negociación
Características del lenguaje mql4, sutilezas y técnicas de trabajo
fxsaber, 2017.09.11 20:29
A continuación se tocará el tema, que se refiere no sólo MT4, sino también MT5 con otras plataformas. Pero para una fácil percepción, la lógica será escrito en MQL4, por lo que en este hilo.
Discusión directamente relacionada con la biblioteca.
posición abierta son aceptados por el servidor de trading, se genera la orden de mercado correspondiente, que está en la tabla de órdenes abiertas de MT5 hasta que se ejecuta.
Por lo tanto, en MT5, incluso en MQL5 puro, la modificación/eliminación de dichas órdenes es imposible y la lógica de trading de MT5 requiere comprobar si una orden abierta está realmente congelada o no.
A continuación se muestra la condición para identificar este tipo de órdenes al escribir la lógica de trading en MT4Orders y un ejemplo de su activación
Resultado
Se puede ver que la orden TP estuvo colgada entre las órdenes abiertas durante más de un cuarto de segundo. Cualquier intento de modificarla/eliminarla provocaba errores.
Tenga en cuenta esta característica de MT5 (no sólo cuando trabaje con MT4Orders).
posición abierta son aceptados por el servidor de trading, se genera la orden de mercado correspondiente, que está en la tabla de órdenes abiertas de MT5 hasta que se ejecuta.
Por lo tanto, en MT5, incluso en MQL5 puro, la modificación/eliminación de dichas órdenes es imposible y la lógica de trading de MT5 requiere comprobar si una orden abierta está realmente congelada o no.
A continuación puede ver la condición para identificar este tipo de órdenes al escribir la lógica de trading en MT4Orders y un ejemplo de su activación
Puede ver que la orden TP estuvo colgada entre las órdenes abiertas durante más de un cuarto de segundo. Cualquier intento de modificarla/eliminarla provocaría errores.
Tenga en cuenta esta característica de MT5 (no sólo cuando trabaje con MT4Orders).
La comprobación de esta condición está ahora integrada en la librería, puede trabajar como en MT4
Nunca he visto tal variedad en ninguna otra plataforma).
El parámetro ORDER_STATE juega un papel aún más importante. Para órdenes SL/TP es ORDER_STATE_STARTED. Pero nunca se debe ignorar todo ORDER_STATE_STARTED (lleva mucho tiempo explicarlo). Por eso es un error confiar en ORDER_STATE, pero se necesita ORDER_REASON.
ORDER_STATE es otra historia. Supongamos que una posición se abre parcialmente a partir de una orden pendiente, y el resto de la orden sigue pendiente. Entonces hay una operación en el Historial, pero la Orden en sí todavía no está ahí. Si la orden se llena completamente, entonces para entender que la primera operación generada por ella se abrió parcialmente, no puedes mirar el ORDER_STATE de la orden de la que se originó.
De todos modos, hay tantas situaciones con este STATE en realidad..... Es necesario introducir OrderOpenState() y OrderCloseSate() humanos, pero es un rompe cabezas (y sólo unos pocos lo usarán). Y, por supuesto, sigue siendo un simple rompecabezas. Hay muchos, y algunos ni se sospechan. Con todo, es bueno ser capaz de desentrañar parcialmente a un estado de trabajo y la forma humana con casi ninguna pérdida de productividad. Más de la mitad de las necesidades, creo, la biblioteca cumple.
El parámetro ORDER_STATE desempeña un papel aún más importante. Para órdenes SL/TP es ORDER_STATE_STARTED. Pero nunca se debe ignorar todo ORDER_STATE_STARTED (lleva mucho tiempo explicarlo). Por eso es un error confiar en ORDER_STATE, pero se necesita ORDER_REASON.
ORDER_STATE es otra historia. Supongamos que una posición se abre parcialmente a partir de una orden pendiente, y el resto de la orden sigue pendiente. Entonces hay una operación en el Historial, pero la Orden en sí todavía no está ahí. Si la orden se llena completamente, entonces para entender que la primera operación generada por ella se abrió parcialmente, no puedes mirar el ORDER_STATE de la orden de la que se originó.
De todos modos, hay tantas situaciones con este STATE en realidad..... Es necesario introducir OrderOpenState() y OrderCloseSate() humanos, pero es un rompe cabezas (y sólo unos pocos lo usarán). Y, por supuesto, sigue siendo un simple rompecabezas. Hay muchos, y algunos ni se sospechan. Con todo, es bueno ser capaz de desentrañar parcialmente a un estado de trabajo y la forma humana con casi ninguna pérdida de productividad. Creo que la biblioteca satisface más de la mitad de mis necesidades.
Foro sobre negociación, sistemas automatizados de negociación y ensayo de estrategias de negociación
Asesores Expertos: Quantum 103
fxsaber, 2017.09.26 09:55 pm.
Variante multiplataforma del asesor experto.Resultado del backtest sobre ticks reales en MT5
He adjuntado el informe backtest MT5 estilo MT4 porque el informe estándar es difícil de leer - ver ambos en el trailer.
Puede ver claramente el impacto de los deslizamientos y las comisiones en el resultado del backtest MT5 de este EA.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Советники: Quantum 103
fxsaber, 2017.09.26 09:55
Versión multiplataforma del asesor experto.Resultado del backtest sobre ticks reales en MT5
Adjunto informe estilo MT4 MT5-backtest, porque el informe estándar se lee con dificultad - ver ambos en el adjunto.
Se puede ver claramente el impacto en el resultado de MT5-backtest de este asesor deslizamiento y comisión.
Foro sobre negociación, sistemas automatizados de negociación y ensayo de estrategias de negociación
Asesores expertos: Mostrar órdenes
fxsaber, 2017.10.09 13:22
Variante de plataforma cruzadaForo sobre trading, sistemas automatizados de trading y prueba de estrategias de trading
Asesores Expertos: Xarax
fxsaber, 2017.10.11 13:44
Variante multiplataforma