Características del lenguaje mql5, sutilezas y técnicas - página 70
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading
¿Cómo identificar una sustitución de la carta?
fxsaber, 2018.02.08 12:39
El parámetro de entrada ChartID a cero en algunas funciones no provoca el recálculo de los valores. Si quiere los datos reales del gráfico actual, debe utilizar el ID completo.
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
POSICIÓN_TICKET != POSICIÓN_IDENTIFICADOR
fxsaber, 2018.02.12 20:14
Conclusiones
Si asumimos que esto es un comportamiento normal de MT5 y no una peculiaridad del hack del broker, entonces
Puntos débiles
ZZY Hipótesis totalmente confirmada.
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias de comercio
POSICIÓN_TICKET != POSICIÓN_IDENTIFICADOR
Pavel Kolchin, 2018.02.12 13:31
(no estoy seguro, es difícil de comprobar, es similar al cierre parcial de la posición)
Todo funciona así:
1) orden pendiente activada parcialmente - se abre la posición con Position_ID = Order_Ticket1
2) la orden restante se convierte en una nueva orden Order_Ticket2 y espera su ejecución; la nueva Order_Ticket2 != Order_Ticket1 ya que no puede haber 2 órdenes con la misma Order_Ticket en el historial
3) la orden restante ha sido ejecutada - se abre una posición con Position_ID = Order_Ticket2
hay dos órdenes en el historial, dos posiciones en el terminal, todo corresponde
Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio
Discussion on "LifeHack para trader: mezclando ForEach en defines (#define)"
fxsaber, 2018.02.14 10:54
Medición del rendimiento
Resultado
Estaba totalmente equivocado. SymbolInfoDouble es dos veces más lento que SymbolInfoTick.
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading
Discussion on "LifeHack para trader: mezclando ForEach en defines (#define)"
fxsaber, 2018.02.14 11:58
Incompetente. Resultado de la prueba.
Cuando se necesita rendimiento (optimizador), es mejor utilizar SymbolInfoDouble. En el mundo real no hay ninguna diferencia.
La medición de la velocidad de la función ZZY debe medirse en un entorno en el que el rendimiento sea importante: el probador.
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading
Bichos, errores, preguntas
fxsaber, 2018.02.12 23:10
Abrir una posición de COMPRA a mano en dos servidores de demostración de operaciones
RoboForex-MetaTrader 5
FXOpen-MT5
Las líneas del mismo color indican lo mismo. Sin embargo, se ve claramente que están en distinto orden. En el caso de Robo, el mensaje sobre la ejecución de la orden llega después de que se ejecute la operación. ¡En abierto viene ANTES! Por esta razón OrderSend devuelve suerte, pero aún no hay transacción. Es decir, obtenemos un OrderSend no sincronizado con el historial
Código para FXOpen-MT5
Resultado
Esta situación tiene la siguiente explicación
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
Bichos, errores, preguntas
Rashid Umarov, 2018.02.15 06:25
Si se envía una orden a un sistema comercial externo, el servidor comercial de MetaTrader 5 no espera la respuesta de éste y devuelve inmediatamente el resultado de la solicitud como "orden realizada". Por esta razón, OrderSend siempre devolverá deal=0, ya que todavía no hay información sobre la operación ejecutada. Cógelo en OnTrade o OnTradeTransaction.
Un ejemplo de escuchador de eventos de comercio se da en el artículo Dónde empezar cuando se crea un robot de comercio para MOEX - TradeTransactionListener.mq5
OrderSend - envía una orden para ejecutar una operación de mercado.La orden está colocada- tenemos que leer Result.order. Pero nadie espera el o los acuerdos - puede haber muchos y el tiempo total de su ejecución no está definido.
Depende de la implementación específica de la salida en el lado del corredor. En el caso general no está definido.
Por lo tanto, recomiendo encarecidamente utilizar la cuenta de demostración en FXOpen-MT5 como una prueba para su código, ya que se distingue de otras demos.
Por ejemplo, le sugiero que intente escribir un script en MQL5 con esta lógica de negociación (estilo MQL4 sólo para mostrar el sentido rápido)
No es nada fácil. También recomiendo el mencionado servidor de demostración para trabajar en la ejecución parcial.
Se ha borrado un post que daba una explicación de uno de los errores más comunes en MT5.
El puesto era grande. No esperaba ser borrado. Me gustaría saber el motivo de la eliminación. Porque es masoquista que te borren de nuevo.
Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio
Organizar un bucle de pedidos
fxsaber, 2018.02.16 09:40
Las cosas no van nada bien en MT5. Ejemplo que muestra el problema
¿Crees que si ejecutas este script en un símbolo sin posiciones, qué acabará pasando?
La respuesta correcta es que se abrirán uno o dos puestos.
La razón por la que esto ocurre. Después del primer OrderSend, aparece una orden de mercado y si un nuevo tick llega antes del momento de su ejecución, no hay posición todavía y se realiza el segundo OrderSend.
Debido a esto, un patrón aparentemente normal de MT5no funcionará correctamente y como consecuencia, la mayoría de los Asesores Expertos de MT5 en codobase. Al mismo tiempo, la plantilla casi idéntica de MT4 seguirá funcionando sin problemas.
La aparentemente buena idea de PositionsTotal se ve algo ensombrecida por la necesidad en MT5 de analizar también OrdersTotal para las órdenes de mercado.
¡Tenga cuidado!
Debido a esto, un patrón MT5 aparentemente normalno funcionará correctamente y, como consecuencia, la mayoría de los EAs MT5 en el kodobase.
Como prueba de esta afirmación podemos tomar casi cualquier Asesor Experto en el kodobase de MT5. No busquemos algo, sino que tomemos directamente el EA más reciente del momento. Es bueno que haya sido escrito por un autor con gran experiencia en la publicación de MT5 en QB.
El código fuente tiene las siguientes cadenas (mis comentarios están resaltados)
Tenemos una situación idéntica a la descrita anteriormente.
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
Peculiaridades del lenguaje mql5, consejos y trucos
fxsaber, 2018.02.16 19:52
Después del primer OrderSend aparece una orden de mercado y si un nuevo tick llega antes de su ejecución entonces no hay posición todavía y se hace un segundo OrderSend.
La aparentemente buena idea de PositionsTotal se ve algo ensombrecida por la necesidad en MT5 de analizar también OrdersTotal para las órdenes de mercado.
Significa que en el caso general, en lugar de una posición el Asesor Experto abrirá dos, tres, etc. Dependiendo de la frecuencia de recepción de ticks y del tiempo de ejecución de las órdenes de mercado.
Dado que casi todos los EAs de MT5 en el kodobase están escritos con la misma lógica que la plantilla de MT5, también tienen el mismo error que contiene. Esto es cierto para casi todos los EAs de MT5 en KB, desafortunadamente.
En una red puede haber una posición abierta y varias órdenes de mercado de cualquier dirección sobre el mismo símbolo al mismo tiempo. Por ejemplo, una posición de COMPRA y una orden de COMPRA. Es cierto, no he logrado encontrar una cuenta demo de este tipo, porque había una regla con asincronía en todas partes
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading
Bichos, errores, preguntas
fxsaber, 2018.02.14 08:58
Toda la secuencia de eventos OnTradeTransaction viene después de que el OrderSend se haya completado.
EA
Enviar manualmente una orden de comercio.
Registro
2018.02.14 09:41:46.671 '8854170': instant sell 1.00 EURUSD at 1.23673 2018.02.14 09:41:46.853 '8854170': accepted instant sell 1.00 EURUSD at 1.23673 2018.02.14 09:41:46.853 '8854170': deal #192088422 sell 1.00 EURUSD at 1.23673 done (based on order #208541700) 2018.02.14 09:41:46.853 '8854170': order #208541700 sell 1.00 / 1.00 EURUSD at 1.23673 done in 190.608 ms
Resultado del Asesor Experto
Podemos ver perfectamente en la columna de tiempo y en los datos numéricos del EA que la duración de la ejecución de la orden comercial no tiene ningún efecto en la secuencia de eventos OnTradeTransaction. ¡Toda la asincronía se va al infierno! Se las han arreglado para estropearlo todo. Construye 1755.
Por ejemplo, cuando se coloca la orden de mercado OrderSendAsync en el Terminal, la orden de mercado no aparecerá ni por un momento. Quizás los desarrolladores decidieron hacer esto para acelerar un poco las cosas.
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading
Discusión sobre el artículo "Visualización de la optimización de la estrategia comercial en MetaTrader 5"
fxsaber, 2018.02.22 08:39
En el modo marco, OnInit, OnDeinit, OnTick, OnTrade, OnTradeTransaction y OnTimer se ignoran. Sólo funciona OnChartEvent.
Por supuesto, debido a la excepción OnChartEvent, requiere una comprobación obligatoria del indicador de modo de cuadro.