¿Cómo se obtienen los parámetros Open, Low, High, Close en MQL5? - página 9

 
Renat Akhtyamov:

Estoy acostumbrado al paquete de 4, es más compacto y más legible

;)

mi ejemplo compacto está en la primera página... ahí es básicamente donde empezó todo ))))

 
Igor Makanu:

hmmm, creo que tienes bits que no quieren construir en bytes... ¡básicamente no hay más opciones! ))))

si este hilo está bajo la mirada de un moderador, hay que hacer algo... Desmonté la macro por piezas,

Artem, ¿funciona?

2019.07.30 19:42:16.639 tst_iXXX_Copy (EURUSD,H1) Iniciar prueba #1...

2019.07.30 19:42:40.199 tst_iXXX_Copy (EURUSD,H1) CopyClose : loops=500000000 , ms=23422

2019.07.30 19:42:40.199 tst_iXXX_Copy (EURUSD,H1) Iniciar la prueba #2...

2019.07.30 19:43:26.953 tst_iXXX_Copy (EURUSD,H1) iClose : loops=500000000 , ms=46609

2019.07.30 19:43:26.953 tst_iXXX_Copy (EURUSD,H1) Iniciar la prueba #3...

2019.07.30 19:44:12.274 tst_iXXX_Copy (EURUSD,H1) Close[i] : loops=500000000 , ms=45156

2019.07.30 19:44:12.274 tst_iXXX_Copy (EURUSD,H1) Iniciar la prueba #4...

2019.07.30 19:44:42.080 tst_iXXX_Copy (EURUSD,H1) CopyRates : loops=500000000 , ms=29656

2019.07.30 19:44:42.080 tst_iXXX_Copy (EURUSD,H1) Fin del script

Sí, funciona:

2019.07.31 00:38:01.936 Start test № 1...
2019.07.31 00:38:31.097 CopyClose : loops=500000000 , ms=29015
2019.07.31 00:38:31.097 Start test № 2...
2019.07.31 00:41:25.095 iClose : loops=500000000 , ms=173875
2019.07.31 00:41:25.095 Start test № 3...
2019.07.31 00:44:29.777 Close[i] : loops=500000000 , ms=184547
2019.07.31 00:44:29.777 Start test № 4...
2019.07.31 00:45:01.074 CopyRates : loops=500000000 , ms=31172
2019.07.31 00:45:01.074 End script

El resultado final:

  • 29 segundos CopyClose()
  • 173 segundos iClose()
  • 184 seg. Cerrar[]
  • 31 segundos CopyRates()

¿Qué pasa? ¿Por qué tengo una diferencia de más de seis veces?

SZ se ejecuta en D1

 
Artyom Trishkin:

¿Qué pasa? ¿Por qué tengo una diferencia de más de seis veces?


Igor Makanu:

hmmm, creo que tienes bits que no quieren construir en bytes... ¡básicamente no hay más opciones! ))))

)))

 

Igor Makanu:

hmmm, creo que tienes bits que no quieren construir en bytes... ¡básicamente no hay más opciones! ))))

)))

Hice una prueba en H1, no hay diferencia discernible:

2019.07.31 00:55:30.290 Start test № 1...
2019.07.31 00:55:58.234 CopyClose : loops=500000000 , ms=27812
2019.07.31 00:55:58.234 Start test № 2...
2019.07.31 00:58:59.095 iClose : loops=500000000 , ms=180734
2019.07.31 00:58:59.095 Start test № 3...
2019.07.31 01:02:06.834 Close[i] : loops=500000000 , ms=187610
2019.07.31 01:02:06.834 Start test № 4...
2019.07.31 01:02:38.365 CopyRates : loops=500000000 , ms=31406
2019.07.31 01:02:38.365 End script

¿y los bits y bytes no tienen nada que ver?

 
Artyom Trishkin:

¿y los bits y bytes no tienen nada que ver?

No voy a decirte que tu ordenador debe ser estúpido, ¿verdad?

He probado varias veces, Roman ha probado - los resultados son comparables.

Para esta prueba, la velocidad del disco duro no debería ser crítica, no queda mucho: OS, y hardware = memoria + CPU, en algún lugar hay algo lento,

hay por supuesto una opción en algún "mundo interior" Core i3 , tengo un Core™ i3-4170

 
Igor Makanu:

No voy a decirte que tu ordenador debe ser estúpido, ¿verdad?

He probado varias veces, Roman ha probado - los resultados son comparables

Para esta prueba, la velocidad del disco duro no debería ser crítica, no queda mucho: el SO, y el hardware = memoria + CPU, en algún lugar hay algo que se retrasa,

hay por supuesto una opción en algún "mundo interior" Core i3 , tengo un Core™ i3-4170

Tengo un EA de prueba colgado en el segundo símbolo, en el que el control de eventos en el temporizador es constante. Es de suponer que de alguna manera le afecta. Y sólo en las funcionesno CopyXXX. No hay ninguna razón para quitarlo de la carta en este momento - su presencia es más importante para mis asuntos actuales que esta prueba.

 
Artyom Trishkin:

Hice una prueba en el H1, no hay diferencia notable:

Los desarrolladores dijeron una vez que las nuevas funciones de iXXX en 5 son sólo una envoltura para las funciones de CopyXXX.

Por lo tanto, no cabe esperar ninguna diferencia en las consultas individuales.

 
Renat Akhtyamov:
¿Cuál es el veredicto sobre la velocidad de las funciones: cuál es más rápida?
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int Count=5000000; // кол-во проходов
//---
void OnStart(void)
  {
   Print("Bench_1: ",Bench_1(Count)," msc");
   Print("Bench_2: ",Bench_2(Count)," msc");
  }
//+------------------------------------------------------------------+
//| Bench_1                                                                 |
//+------------------------------------------------------------------+
ulong Bench_1(const int _count)
  {
   const ulong  StartTime=GetMicrosecondCount();
//---
   for(int i=0; i<Count;i++)
     {
      datetime time  = iTime(Symbol(),Period(),0);
      double   open  = iOpen(Symbol(),Period(),0);
      double   high  = iHigh(Symbol(),Period(),0);
      double   low   = iLow(Symbol(),Period(),0);
      double   close = iClose(NULL,PERIOD_CURRENT,0);
      long     volume= iVolume(Symbol(),0,0);
     }
//---
   return(GetMicrosecondCount() - StartTime);
  }
//+------------------------------------------------------------------+
//| Bench_2                                                                 |
//+------------------------------------------------------------------+
ulong Bench_2(const int _count)
  {
   datetime  time[];
   double    open[];   // Open (цены открытия бара)
   double    high[];   // High (цены максимума бара)
   double    low[];    // Open (цены минимума бара)
   double    close[];    // Open (цены минимума бара)
   long      volume[]; // Close (цены закрытия бара)

   const ulong  StartTime=GetMicrosecondCount();
//---
   for(int i=0; i<Count;i++)
     {
      CopyTime(Symbol(),Period(),1,1,time);
      CopyOpen(Symbol(),Period(),1,1,open);
      CopyHigh(Symbol(),Period(),1,1,high);
      CopyLow(Symbol(),Period(),1,1,low);
      CopyClose(Symbol(),Period(),1,1,close);
      CopyTickVolume(Symbol(),Period(),1,1,volume);
//---
      datetime _time  = time[0];
      double   _open  = open[0];
      double   _high  = high[0];
      double   _low   = low[0];
      double   _close = close[0];
      long     _volume= volume[0];
     
}
//---
   return(GetMicrosecondCount() - StartTime);
  }
//+------------------------------------------------------------------+
el autor del guión no recuerda quién
 
Igor Makanu:

funcionan igual, imho los experimentos son para los experimentos... aquí está la última llamada de prueba para medio billón de veces, bueno sí puedes ver la diferencia, lo único que queda es averiguar cuántos ticks en un minuto (~60), cuántos en un tick en una hora (~3600) y cuántos en un día (~86400) y cuánto correrán estos 23 segundos para medio billón de llamadas ...

5 787 días = 23 segundos de beneficio... ¡si utilizamos la función más rápida en cada tick! )))))

imho, usa lo que es conveniente y no escuches a nadie

Me olvidé de las pruebas y la optimización, Igor. Ahí es donde se necesita la velocidad.

 
Andrey Khatimlianskii:

Me olvidé de las pruebas y la optimización, Igor. Ahí es donde se necesita la velocidad.

Sí, bueno... Es que no hay un grupo serio de gente aquí discutiendo este tema, así que se me ha olvidado por completo para qué sirve todo esto ))))

¡Tienes razón! - Pero necesitamos un uso conveniente de las funciones CopyOpen()... y probablemente si envolvemos la llamada a CopyOpen() en una función adicional, se perderá la ganancia de rendimiento.

ZZY: imho, en general es como en todos lados - escribes en ensamblador, obtienes mucho tiempo de desarrollo y no el hecho de que el rendimiento final será mayor que usando C++, que escribiste en 15 minutos - deberías comprobarlo