Asesor experto
// MQL4&5-code #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 #ifdef __MQL5__ #define Bid (SymbolInfoDouble(_Symbol, SYMBOL_BID)) #define Ask (SymbolInfoDouble(_Symbol, SYMBOL_ASK)) #endif // __MQL5__ // Idea - https://www.mql5.com/ru/code/7464 #property strict input int Shift = 3; input int Limit = 18; input double Lots = 0.1; int PriceToInteger( const double Price ) { return((int)(Price / _Point + 0.1)); } void OnTick() { static int PrevBid = PriceToInteger(Bid); static int PrevAsk = PriceToInteger(Ask); const int IntBid = PriceToInteger(Bid); const int IntAsk = PriceToInteger(Ask); const bool TradeTime = (TimeCurrent() % (24 * 60 * 60) < D'1970.01.01 23:50'); // exclude swaps if (TradeTime && (IntAsk - IntBid < Limit)) { if ((IntBid - PrevBid >= Shift)) OrderSend(_Symbol, OP_SELL, Lots, Bid, 0, 0, 0); if (PrevAsk - IntAsk >= Shift) OrderSend(_Symbol, OP_BUY, Lots, Ask, 0, 0, 0); } PrevBid = IntBid; PrevAsk = IntAsk; for (int i = OrdersTotal() - 1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS) && ((!TradeTime) || (OrderProfit() > 0) || ((OrderType() == OP_BUY) && (PriceToInteger(OrderOpenPrice()) - IntBid >= Limit)) || ((OrderType() == OP_SELL) && (IntAsk - PriceToInteger(OrderOpenPrice()) >= Limit)))) OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); }
Los resultados
Informe de MT4
Símbolo | EURUSD (Euro vs. Dólar) | ||||
Periodo | 1 minuto (M1) 2017.04.10 00:00 - 2017.04.14 20:58 (2017.04.10 - 2017.04.16) | ||||
Modelo | Todos los ticks (método más preciso basado en todos los plazos más pequeños disponibles) | ||||
Parámetros | Desplazamiento=3; Límite=18; Lotes=0,1; | ||||
Bares en la historia | 7292 | Garrapatas modeladas | 1865515 | Calidad de los modelos | 99.00% |
Errores de concordancia de los gráficos | 0 | ||||
Depósito inicial | 100000.00 | Difundir | Variable | ||
Beneficio neto | -10863.90 | Beneficio total | 2528.70 | Pérdida total | -13392.60 |
Rentabilidad | 0.19 | Remuneración esperada | -0.49 | ||
Reducción absoluta | 10864.70 | Reducción máxima | 10864.70 (10.86%) | Reducción relativa | 10.86% (10864.70) |
Total de operaciones | 21954 | Posiciones cortas (% de ganancias) | 12016 (68.60%) | Posiciones largas (% de ganancias) | 9938 (67.03%) |
Operaciones rentables (% del total) | 14904 (67.89%) | Operaciones con pérdidas (% del total) | 7050 (32.11%) | ||
El más grande | comercio rentable | 3.00 | transacción perdedora | -4.40 | |
Media | acuerdo rentable | 0.17 | comercio perdedor | -1.90 | |
Número máximo | victorias continuas (beneficios) | 155 (46.60) | Pérdidas continuas (pérdida) | 115 (-210.10) | |
Max. | beneficios continuos (número de victorias) | 46.60 (155) | pérdida continua (número de pérdidas) | -210.10 (115) | |
Media | ganancias continuas | 5 | pérdida continua | 2 |
Informe MT5
Informe de comprobación de la estrategia | ||||||||||||
Alpari-MT5 (Build 1596) | ||||||||||||
Ajustes | ||||||||||||
Asesor experto: | Lucky | |||||||||||
Símbolo: | EURUSD | |||||||||||
Período: | M1 (2017.04.10 - 2017.04.16) | |||||||||||
Parámetros: | Turno=3 | |||||||||||
Límite=18 | ||||||||||||
Lotes=0,1 | ||||||||||||
Agente de bolsa: | Alpari International Limited | |||||||||||
La moneda: | USD | |||||||||||
Depósito inicial: | 100 000.00 | |||||||||||
Apalancamiento: | 1:100 | |||||||||||
Backtest | ||||||||||||
La calidad de la historia: | n/a | |||||||||||
Bares: | 7192 | Tiki: | 1865415 | Personajes: | 1 | |||||||
Beneficio neto: | -10 863.90 | Disminución absoluta del balance: | 10 863.90 | Disposición absoluta de fondos: | 10 864.70 | |||||||
Beneficio total: | 2 528.70 | Disposición máxima del saldo: | 10 863.90 (10.86%) | Disposición máxima de fondos: | 10 864.70 (10.86%) | |||||||
Pérdida total: | -13 392.60 | Reducción relativa del balance: | 10.86% (10 863.90) | Disminución relativa de los fondos: | 10.86% (10 864.70) | |||||||
Rentabilidad: | 0.19 | La recompensa esperada: | -0.49 | Nivel de margen: | 863.58% | |||||||
Factor de recuperación: | -1.00 | Ratio de Sharpe: | -0.50 | Puntuación Z: | -52.22 (99.74%) | |||||||
AHPR: | 1.0000 (-0.00%) | Correlación LR: | -1.00 | Resultado de OnTester: | 0 | |||||||
GHPR: | 1.0000 (-0.00%) | Error estándar LR: | 149.82 | |||||||||
Total de intercambios: | 21954 | Operaciones cortas (% de ganadores): | 12016 (68.60%) | Operaciones largas (% de ganancias): | 9938 (67.03%) | |||||||
Total de intercambios: | 43908 | Operaciones rentables (% de todas las operaciones): | 14904 (67.89%) | Operaciones con pérdidas (% de todas las operaciones) | 7050 (32.11%) | |||||||
La operación más rentable | 3.00 | La mayor operación perdedora | -4.40 | |||||||||
Operación rentable media: | 0.17 | Operación perdedora media: | -1.90 | |||||||||
Número máximo de victorias consecutivas (beneficio): | 155 (46.60) | Número máximo de pérdidas continuas (pérdida): | 115 (-210.10) | |||||||||
Beneficios máximos continuos (número de victorias): | 46.60 (155) | Pérdida continua máxima (número de pérdidas): | -210.10 (115) | |||||||||
Ganancias medias continuas: | 5 | Pérdidas medias continuas: | 2 |
Los resultados coinciden.
Rendimiento
2017.05.08 01:45:42.765 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:03.682 (total time 0:00:04.400)
MT5-log
2017.05.08 02:04:53.278 Core 1 EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:12.309 (including ticks preprocessing 0:00:00.203).
MT4-tester ha conseguido ser 3 veces más rápido que MT5-tester. Si hay alguna duda de que el registro de MT5 es causado por el uso de una biblioteca de terceros, aquellos que lo deseen pueden reescribir la simple lógica de MT4 de este Asesor Experto en MQL5 a su manera y comprobar la hipótesis.
HZ el probador MT5 estaba trabajando mucho más lento, hasta que limpié todas las carpetas de Bases a mano. Los resultados se dan teniendo en cuenta esto.
En el servidor Alpari-MT5-Demo en la nueva build (que saldrá en una semana) con acceso rápido al historial de operaciones lo he conseguido:
EURUSD,M1: 1865417 ticks, 7192 bars generated. Test passed in 0:00:05.578.
MT5 tiene una sobrecarga del sistema para transferir los datos y la propia tarea a un proceso de agente externo, que en tareas pequeñas (segundos) introduce un gran error en comparación.
Y la complejidad y calidad del probador en MT5 es mucho mayor: modelado sincrónico de muchos instrumentos con una precisión de milisegundos, deslizamientos/retrasos reales durante el desplazamiento de los cambios del mundo y muchas más funciones menores. No es que haya un bucle for.
Más lento por órdenes de magnitud - ¿no te confundes con la inicialización/sincronización y la carga de todos los datos? Todo está escrito en los registros. Los archivos del disco no deben tocarse en ningún caso.
Recomiendo poner el directorio %userdata%\MetaQuotes (como C:\sers\%username%\AppData\Roaming\MetaQuotes) en el pase del antivirus. Aquí es donde se encuentran los datos y añadir el antivirus a la pasada mejora drásticamente la velocidad de acceso a los datos del terminal y del probador.
De lo contrario, se emocionan mucho cuando ven que metatester[64].exe se ejecuta, abriendo el puerto de red y un montón de archivos de datos grandes, escritos por el terminal y el probador. El probador de algunos comerciantes llega a caer, porque el antivirus no tiene tiempo de comprobar el archivo metatester[64].exe ni siquiera en unos segundos y el terminal no puede acceder a él.
la complejidad y la calidad del probador en MT5 es un orden de magnitud superior: modelado sincrónico de múltiples instrumentos con una precisión de milisegundos, deslizamientos/retrasos honestos mientras se desplaza por los cambios del mundo y un montón de características más pequeñas.
El paquete MT4+TDS también lo tiene. Además de algunas funciones más de las que carece MT5... Pero, por supuesto, no hay multimoneda.
Más lento por órdenes de magnitud.
Al principio pensé que el TDS ralentizaba deliberadamente la MT5, así que limpié su memoria. También he limpiado las carpetas de Bases (me estaba quedando sin espacio en el disco). Después de eso MT5 fue dos órdenes de magnitud más rápido para una sola ejecución (los reinicios no ayudaron antes). La hipótesis sobre los bloques TDS no se ha podido confirmar, aunque lo he intentado. No he tenido ningún antivirus en mi ordenador.
El servidor Alpari-MT5 es real.
ZZY ejecutó MT4-optimizer en ejecución completa - 14 minutos. MT5 (sólo queda un agente) - parece que serán muchas horas. Publicaremos el total por la mañana/tarde.
¿De dónde proceden los resbalones?
Tienes algo completamente diferente en mente. Juega con el campo de retardo en el probador de MT5 y verás que es algo totalmente distinto. Incluso el habitual Sleep(2500) en el código MQL5, cuando se ejecuta en el probador, dará un retraso en el código cuando todo el mundo sigue simulando. El campo de retardo de ejecución muestra efectivamente cómo se ejecutarán las operaciones si se pone ahí el ping de 100ms al servidor.
No puede haber un orden de magnitud de retraso. Y por qué habría complementos para MT5 cuando funciona bien por sí mismo.
En cuanto a la sobrecarga, no hay ajustes ni límites.Sobre la falta de antivirus - desde hace mucho tiempo, todas las versiones desde el 7 tienen un Windows Defender interno y discreto, que hace un buen trabajo de escaneo de todos los archivos.
A veces genera retrasos notables en las operaciones de archivos incluso en discos SSD.
Sobre la falta de antivirus - desde hace mucho tiempo, todas las versiones a partir de la 7 tienen un Windows Defender interno y discreto, que escanea todos los archivos.
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading
fxsaber, 2017.05.07 21:55
Servidor comercial Alpari-MT5
¿Por qué hay ticks duplicados (bid y ask son iguales) en el historial de ticks de FOREX?
El probador está compitiendo con EAs en duplicados y hay la mitad de ellos. ¿Es necesario para obtener el rendimiento adecuado bajar a la mitad?
Sigues sin entender los deslices de los que hablo. En principio no funciona en MT4.
No en ticks, sino en el proceso del programa mcl5, cuando se detiene y los ticks siguen y el mundo da vueltas. Escriba Sleep(3000) y el programa esperará 3 segundos y durante este tiempo los ticks estarán tickeando, el mercado estará simulando.
Si establece el campo Retraso de Ejecución en 200ms en el probador, se simulará una latencia neta de 200 al ejecutar las operaciones, lo que dará lugar a deslizamientos de mercado o recotizaciones.
Se trata de otro potente nivel de modelización del proceso de mercado, y dentro de un sistema multidivisa. Y lo que es más importante, en un proceso alienado a distancia. Por ejemplo, un agente de 10.000 km recibe de repente una solicitud dinámica de acceso a los símbolos que faltan en el código al realizar una tarea y es capaz de solicitar estos datos al maestro, incrustarlos en el mundo del mercado y seguir girando.
Sigues sin entender los deslices de los que hablo. En principio no funciona en MT4.
No en ticks, sino en el proceso del programa mcl5, cuando se detiene y los ticks siguen y el mundo da vueltas. Escribe Sleep(3000) y el programa esperará 3 segundos y en ese tiempo los ticks estarán tickeando, el mercado estará simulando.
Esto no funciona ahora en MT4.
Si establece el campo Retraso de Ejecución en 200ms en el probador, simulará una latencia neta de 200 al ejecutar las operaciones, lo que dará lugar a deslizamientos del mercado o recotizaciones.
Esto funciona ahora en MT4.
Se trata de otro potente nivel de modelización del proceso de mercado, y dentro de un sistema multidivisa. Y lo que es más importante, en un proceso alienado a distancia. Por ejemplo, un agente de 10.000 km recibe de repente una solicitud dinámica de acceso a los símbolos que faltan en el código al realizar una tarea y es capaz de solicitar estos datos al maestro, incrustarlos en el mundo del mercado y seguir girando.

- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading
Discussion on "Los EAs listos de MQL5 Wizard funcionan en MetaTrader 4"
fxsaber, 2017.03.09 13:02
Sugiero tomar la prueba de Tick Data Suite (Compatible: MT4 build 940 - 1052) para comparar.
En el probador de MT5 seleccione el modo "por ticks reales". Guárdelos y aliméntelos en el probador de MT4 a través de TDS.
Entonces las cotizaciones en ambos probadores coincidirán al 100%, lo que permitirá compararlos no sólo en operaciones, sino también en velocidad.
De este modo, sería posible comparar la conversión/creación de EAs en ambas direcciones.
MT4 build 1072, MT5 build 1596 servidor de trading Alpari-MT5.
Configuración del probador de MT4 en la captura de pantalla
La moneda en ambos probadores es el USD. Esto permite en el mismo probador MT5 para EURUSD no tirar otro tick de símbolo de conversión.
Ahora ejecutamos el siguiente Asesor Experto multiplataforma en ambos probadores
Registro de MT4-tester
Registro del probador MT5
Confirmamos que los archivos recibidos de cada probador son idénticos: las marcas de los probadores coinciden.
En este punto, la preparación de ambos probadores para el nuevo servicio está lista.