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

 
Artyom Trishkin:

No voy a mirar exactamente, no tengo tiempo. Pensé que había algo "fuera de la caja" - ejecutarlo y ver el resultado. Pero ahora... Sí, y el script no funciona inmediatamente, y se cuelga hasta que se cierra forzosamente PKM en su icono. Y sólo entonces se imprime algo allí. En general - con las macros uno se complica por alguna razón.

¿Y mi puesto tiene el significado del tema bichos se mueven?

 
Artyom Trishkin:

No voy a mirar exactamente, no tengo tiempo. Pensé que había algo "fuera de la caja" - ejecutarlo y ver el resultado. Pero ahora... Sí, y el script no funciona inmediatamente, y se cuelga hasta que se cierra forzosamente PKM en su icono. Y sólo entonces se imprime algo allí. En definitiva, las macros son un dolor de cabeza.

¡Ah, ahí está el perro!

¿Has visto mis pruebas? También está Roman

hay 436 segundos de pruebas = ¡7 minutos!

;)

ZS: ¡Te dije que las manos traviesas se tropezaron con él!...el script no funciona "out of the box"... ))))


Romano:

¿Tiene sentido poner mi post en el hilo de los bichos?

¿Qué bichos? - escriben en Wine y Debian que no pueden cargar completamente los núcleos de la CPU, ¿para qué SO tienes MT?

 
Igor Makanu:

¡Ah, ahí está el perrito!

¿Has visto mis pruebas? También está la de Roman.

hay 436 segundos de pruebas = ¡7 minutos!

;)

ZS: ¡Te digo que manos traviesas lo apuñalaron!...el script no funciona "out of the box"... ))))

Espeluznante :)

Deberíamos descansar más...

 
Igor Makanu:

¡Ah, ahí está el perrito!

¿Has visto mis pruebas? También está la de Roman.

hay 436 segundos de pruebas = ¡7 minutos!

;)

ZS: ¡Te dije que unas manos traviesas se tropezaron con él!...el script no funciona "out of the box"... ))))


¿Qué bichos? - bueno, escribe en Wine y Debian que no pueden cargar completamente los núcleos de la CPU, ¿tienes MT para qué SO?

MT por supuesto bajo Windows, pero como puedo decir...
En VS Code en Debian, cuando pruebo la carga de otro código, se cargan todos los núcleos, por lo que es innecesario culpar a Debian.
El vino puede ser, o mejor dicho, la MT no está optimizada para ello. Por lo tanto, está incompleta en el marco de Wine.
Hay muchos usuarios de linux bajo Wine.

 
Igor Makanu:

¡Ah, ahí está el perrito!

¿Has visto mis pruebas? También está la de Roman.

hay 436 segundos de pruebas = ¡7 minutos!

;)

ZS: ¡Te digo que las manos traviesas lo apuñalaron!... el guión no funciona "fuera de la caja"... ))))


Bien. Sin manos traviesas, la primera prueba terminó en cinco minutos. Los otros no terminaron en veinte. La nevera empezó a despegar, el café de al lado empezó a hervir... De todos modos, se ha quedado sin aliento...
 
¿Cuál es el veredicto sobre la velocidad de las funciones: cuál es más rápida?
 
Renat Akhtyamov:
¿Cuál es el veredicto sobre la velocidad de las funciones: cuál es más rápida?

Se parece a CopyXXX() pero no a CopyRates(). Cuando se requiere más de un dato al mismo tiempo - CopyRates()

 
Artyom Trishkin:
Bien. La primera prueba ha pasado en cinco minutos sin manos traviesas. Los demás no se terminaron ni en veinte. La nevera empezó a despegar, el café al lado hervía... De todos modos, se ha quedado sin aliento...

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?

#property script_show_inputs

input ulong LoopCount=500000000;

// Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.
#define  DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
  class CLASS##NAME                                                                                           \
  {                                                                                                           \
  public:                                                                                                     \
    static T Get(const string Symb,const int TimeFrame,const int iShift) \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
      return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \
    }                                                                                                         \
                                                                                                              \
    T operator[](const int iPos) const                                                                     \
    {                                                                                                         \
      return(CLASS##NAME::Get(_Symbol, _Period, iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS##NAME  NAME;                                                                                           \
                                                                                                              \
  T i##NAME(const string Symb,const int TimeFrame,const int iShift) \
  {                                                                                                           \
    return(CLASS##NAME::Get(Symb,  TimeFrame, iShift));                                                        \
  }
//+------------------------------------------------------------------+
DEFINE_TIMESERIE(Volume,TickVolume,long)
DEFINE_TIMESERIE(Time,Time,datetime)
DEFINE_TIMESERIE(Open,Open,double)
DEFINE_TIMESERIE(High,High,double)
DEFINE_TIMESERIE(Low,Low,double)
DEFINE_TIMESERIE(Close,Close,double)
//+------------------------------------------------------------------+
void OnStart()
  {
   double c,buff[1];
   MqlRates rates[1];
   ulong i;
//-----   
   Print("Start test № 1...");
   Sleep(125);
   srand(GetTickCount());
   uint start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      CopyClose(_Symbol,_Period,rand(),1,buff);
   printf("CopyClose : loops=%u , ms=%u",i,GetTickCount()-start);
//-----   
   Print("Start test № 2...");
   Sleep(125);
   srand(GetTickCount());
   start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      c = iClose(NULL,0,rand());
   printf("iClose : loops=%u , ms=%u",i,GetTickCount()-start);
//-----   
   Print("Start test № 3...");
   Sleep(125);
   srand(GetTickCount());
   start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      c = Close[rand()];
   printf("Close[i] : loops=%u , ms=%u",i,GetTickCount()-start);
//-----   
   Print("Start test № 4...");
   Sleep(125);
   srand(GetTickCount());
   start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      CopyRates(_Symbol,_Period,rand(),1,rates);
   printf("CopyRates : loops=%u , ms=%u",i,GetTickCount()-start);
   Print("End script");
  }
//+------------------------------------------------------------------+

2019.07.30 19:42:16.639 tst_iXXX_Copy (EURUSD,H1) Iniciar la 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

Archivos adjuntos:
 
Renat Akhtyamov:
¿Cuál es el veredicto sobre la velocidad de las funciones: cuál es más rápida?

funcionan igual, imho los experimentos son para los experimentos... aquí está la última llamada de prueba para medio billón de veces, bueno sí se puede ver la diferencia, lo único que queda es calcular 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

 
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í se puede ver la diferencia, lo único que queda es calcular 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 he acostumbrado a 4pc, más compacto y más legible

No me puedo quejar de la velocidad y las características, está bien.

;)

Razón de la queja: