iCustom+IndicatorRelease. Probablemente no sea una solución de muleta para producir entidades complejas sobre la marcha. Sobre gustos no hay nada que discutir. La cuestión es hasta qué punto una muleta de este tipo sobre múltiples agentes va a suponer un despilfarro de recursos.
Bueno, casi todo es genial en el 5. La velocidad es de primera. Y aquí, lo siento, algo de pelos de punta donde no te lo esperas.
¿Por qué hacer un indicador de liberación?
Que envíe un evento gráfico al experto bajo prueba en cada nuevo tick.
Crear un indicador en cada tic seguido de un lanzamiento - ahí es donde están los recursos desperdiciados
Vasiliy mencionó que en FORTS (no en el probador) el mecanismo funciona a través de la suscripción y BookEvent. Esto elimina la necesidad de vincular el EA a cualquier gráfico.
Упрощенная реализация полноценного мультивалютного режима в MetaTrader 5. Нет необходимости вникать в то, как это работает. Минимум простых настроек. Максимум удобства для пользователей. Работает в тестере.
Slawa: BookEvent aún no se ha implementado en el probador
Entonces, ¿de qué sirve el probador si ni siquiera funciona en el mercado de divisas? Vasiliy hizo lo que creo que es una sugerencia sensata más arriba.
Y no se hace un bucle durante un segundo, sino durante algo menos de una hora. Con la comprobación obligatoria de IsStopped()
El sueño, por cierto, es obligatorio. De lo contrario, se colgará el probador. Y los recursos del sistema serán devastados durante el funcionamiento normal del Asesor Experto.
Ni siquiera pruebe su variante
2016.04.2619:39:05 Core 12016.04.2500:16:48 infinite Sleep loop detected while testing
2016.04.2619:39:05 Core 1 EURUSD : 2016.04.2500:00 - 2016.04.2600:001439 minute bars absent in total while real ticks present
2016.04.2619:39:05 Core 1 EURUSD : real ticks begin from2016.01.0400:00:002016.04.2619:39:05 Core 1 SleepPause=102016.04.2619:39:05 Core 1 TimerInterval=1000
Código
sinputuint TimerInterval = 1000; // Через сколько секунд вызывать OnTimersinputuint SleepPause = 10; // На сколько милисекунд делать Sleep//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnInit()
{
EventSetTimer(TimerInterval);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnTimer()
{
constuint Amount=TimerInterval*1000/SleepPause;
for(uint i=0;(i<Amount) && (!IsStopped()); i++)
Sleep(SleepPause);
}
//+------------------------------------------------------------------+
Si el tiempo actual en el probador excede el final del período de prueba cuando se ejecuta la función Sleep(), obtendrá un error "un bucle infinito en Sleep". Si se produce un error de este tipo, los resultados de las pruebas no se descartan, todos los cálculos se realizan en su totalidad (cantidad de operaciones, reducción de la deuda, etc.) y los resultados se pasan al terminal.
Lo he hecho y lo he leído con mucha atención. La cuestión es que si se utiliza Sleep en OnTimer, el programador no puede determinar cuándo sale del intervalo de prueba. IsStopped (lo puse en el código de una vez por leer la documentación) no funciona en el momento de la salida. ¿De quién es la culpa?
En el probador, las llamadas a Sleep() no retrasan el proceso de prueba. Cuando se llama a Sleep(), los ticks generados se "reproducen" dentro del retardo especificado, como resultado de lo cual pueden activarse las órdenes pendientes, los stops, etc. Después de llamar a Sleep(), el tiempo modelado en el probador se incrementa en el intervalo especificado en el parámetro de la función Sleep.
Por lo tanto, el Asesor Experto no puede ser llamado en cada uno de estos ticks. ¿Se acepta la prueba?
iCustom+IndicatorRelease. Probablemente no sea una solución de muleta para producir entidades complejas sobre la marcha. Sobre gustos no hay nada que discutir. La cuestión es hasta qué punto una muleta de este tipo sobre múltiples agentes va a suponer un despilfarro de recursos.
Bueno, casi todo es genial en el 5. La velocidad es de primera. Y aquí, lo siento, algo de pelos de punta donde no te lo esperas.
¿Por qué hacer un indicador de liberación?
Que envíe un evento gráfico al experto bajo prueba en cada nuevo tick.
Crear un indicador en cada tic seguido de un lanzamiento - ahí es donde están los recursos desperdiciados
Vasiliy mencionó que en FORTS (no en el probador) el mecanismo funciona a través de la suscripción y BookEvent. Esto elimina la necesidad de vincular el EA a cualquier gráfico.
¿Por qué hacer un lanzamiento a un indicador?
Que envíe un evento gráfico al experto bajo prueba en cada nuevo tick.
Crear un indicador en cada tic y luego liberarlo - es un desperdicio de recursos
No soy muy bueno para expresarme, así que no lo entiendes. Haga clic aquí para ver los detalles https://www.mql5.com/ru/code/280
¡Y cuántos recursos consume esta solución para implementar algo tan sencillo!
BookEvent aún no se ha implementado en el probador
Y no se hace un bucle durante un segundo, sino durante algo menos de una hora. Con la comprobación obligatoria de IsStopped()
El sueño, por cierto, es obligatorio. De lo contrario, se colgará el probador. Y los recursos del sistema serán devastados durante el funcionamiento normal del Asesor Experto.
Ni siquiera pruebe su variante
Código
Ni siquiera para probar su opción
Código
¿Y qué estabas probando aquí?
Lanzo ese código en el probador. Me cuelga conun bucle de sueño infinito detectado mientras hago pruebas.
Se ha dicho muchas veces: "Lea la documentación".
¿No has dicho: "He leído toda la documentación. ¿Varias veces?
¿Has leído esto? Parece que no has...
Si el tiempo actual en el probador excede el final del período de prueba cuando se ejecuta la función Sleep(), obtendrá un error "un bucle infinito en Sleep". Si se produce un error de este tipo, los resultados de las pruebas no se descartan, todos los cálculos se realizan en su totalidad (cantidad de operaciones, reducción de la deuda, etc.) y los resultados se pasan al terminal.
¿Has leído esto?
Y sobre la falta de ticks en el bucle en OnTimer necesitas pruebas reproducibles. ¿Los tienes?
Lo has escrito en la documentación.
En el probador, las llamadas a Sleep() no retrasan el proceso de prueba. Cuando se llama a Sleep(), los ticks generados se "reproducen" dentro del retardo especificado, como resultado de lo cual pueden activarse las órdenes pendientes, los stops, etc. Después de llamar a Sleep(), el tiempo modelado en el probador se incrementa en el intervalo especificado en el parámetro de la función Sleep.
Por lo tanto, el Asesor Experto no puede ser llamado en cada uno de estos ticks. ¿Se acepta la prueba?