Errores, fallos, preguntas - página 1564

 
Anton Zverev:

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

 
Anton Zverev:

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.

BookEvent aún no está implementado en el probador
 
Slawa:

¿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!

Мультивалютный обработчик событий OnTick(string symbol)
Мультивалютный обработчик событий OnTick(string symbol)
  • votos: 27
  • 2011.02.01
  • Konstantin Gruzdev
  • www.mql5.com
Упрощенная реализация полноценного мультивалютного режима в 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.
 
Slawa:

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.26 19:39:05     Core 1  2016.04.25 00:16:48   infinite Sleep loop detected while testing
2016.04.26 19:39:05     Core 1  EURUSD : 2016.04.25 00:00 - 2016.04.26 00:00  1439 minute bars absent in total while real ticks present
2016.04.26 19:39:05     Core 1  EURUSD : real ticks begin from 2016.01.04 00:00:00
2016.04.26 19:39:05     Core 1    SleepPause=10
2016.04.26 19:39:05     Core 1    TimerInterval=1000

Código

sinput uint TimerInterval = 1000; // Через сколько секунд вызывать OnTimer
sinput uint SleepPause = 10;      // На сколько милисекунд делать Sleep
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   EventSetTimer(TimerInterval);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   const uint Amount=TimerInterval*1000/SleepPause;

   for(uint i=0;(i<Amount) && (!IsStopped()); i++)
      Sleep(SleepPause);
  }
//+------------------------------------------------------------------+
 
Anton Zverev:

Ni siquiera para probar su opción

Código

¿Y qué estabas probando aquí?
 
Slawa:
¿Y qué estabas probando aquí?
Ejecuto ese código en el probador. Tengo un cuelgue conun bucle de sueño infinito detectadomientras hago pruebas.
 
Anton Zverev:
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.

 
Slawa:

¿Has leído esto?

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?
 
Slawa:

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?