Comment obtenir les paramètres Open,Low,High,Close dans MQL5 ? - page 8

 
Artyom Trishkin:

Je ne chercherai pas exactement - je n'ai pas le temps. Je pensais qu'il y avait quelque chose "hors de la boîte" - exécutez-le et voyez le résultat. Mais maintenant... Oui, et le script ne fonctionne pas immédiatement, et se bloque jusqu'à ce que vous fermiez de force PKM sur son icône. Et c'est seulement à ce moment-là que quelque chose est imprimé. En général - avec les macros on a des problèmes pour une raison quelconque.

Et mon post a la signification du thème bugs move ?

 
Artyom Trishkin:

Je ne chercherai pas exactement - je n'ai pas le temps. Je pensais qu'il y avait quelque chose "hors de la boîte" - exécutez-le et voyez le résultat. Mais maintenant... Oui, et le script ne fonctionne pas immédiatement, et se bloque jusqu'à ce que vous fermiez de force PKM sur son icône. Et c'est seulement à ce moment-là que quelque chose est imprimé. En somme, les macros sont une plaie.

Ah, voilà le chien !

Vous avez vu mes tests ? Il y a aussi Roman.

il y a 436 secondes de tests = 7 minutes !

;)

ZS : Je vous ai dit que de vilaines mains sont tombées dessus ! ...le script ne fonctionne pas "out of the box"... ))))


Romain:

Est-il judicieux de placer mon message dans le fil de discussion sur les bugs ?

Quels insectes ? - écrire dans Wine et Debian qu'ils ne peuvent pas charger complètement les cœurs du CPU, pour quel OS avez-vous MT ?

 
Igor Makanu:

Ahh, voilà le chien !

Tu as vu mes tests ? Il y a aussi ceux de Roman.

il y a 436 secondes de tests = 7 minutes !

;)

ZS : Je vous le dis, de vilaines mains ont trébuché dessus ! ...le script ne fonctionne pas "out of the box"... ))))

Effrayant :)

Nous devrions nous reposer davantage...

 
Igor Makanu:

Ahh, voilà le chien !

Tu as vu mes tests ? Il y a aussi ceux de Roman.

il y a 436 secondes de tests = 7 minutes !

;)

ZS : Je vous ai dit que de vilaines mains sont tombées dessus ! ...le script ne fonctionne pas "out of the box"... ))))


Quels insectes ? - Eh bien, écrivez dans Wine et Debian qu'ils ne peuvent pas charger complètement les cœurs du CPU, vous avez MT pour quel OS ?

MT bien sûr sous Windows, mais comment dire...
Dans VS Code sous Debian, lorsque je teste la charge d'un autre code, tous les cœurs sont chargés, il est donc inutile de blâmer Debian.
Le vin peut l'être, ou plutôt, MT n'est pas optimisé pour lui. Par conséquent, il est incomplet au titre du vin.
Il y a beaucoup d'utilisateurs de linux sous Wine.

 
Igor Makanu:

Ahh, voilà le chien !

Tu as vu mes tests ? Il y a aussi ceux de Roman.

il y a 436 secondes de tests = 7 minutes !

;)

ZS : Je vous le dis, de vilaines mains l'ont poignardé ! ...le script ne fonctionne pas "out of the box"... ))))


Bien. Sans mains coquines, le premier test était terminé en cinq minutes. Les autres n'avaient pas fini dans vingt ans. La glacière a commencé à décoller, le café à côté a commencé à bouillir... Quoi qu'il en soit, j'ai frappé l'enfer...
 
Quel est le verdict sur la vitesse de fonctionnement - lequel est le plus rapide ?
 
Renat Akhtyamov:
Quel est le verdict sur la vitesse des fonctions - laquelle est la plus rapide ?

Cela ressemble à CopyXXX() mais pas à CopyRates(). Lorsque plus d'une donnée est requise en même temps - CopyRates()

 
Artyom Trishkin:
Bien. Le premier test est passé en cinq minutes sans mains coquines. Les autres n'étaient même pas terminés en vingt. La glacière a commencé à décoller, le café à côté a bouilli... Quoi qu'il en soit, j'ai frappé l'enfer...

hmmm, je pense que vous avez des bits qui ne veulent pas se transformer en octets... il n'y a pratiquement plus d'options ! ))))

si ce fil est sous le regard d'un modérateur, quelque chose doit être fait... J'ai démonté la macro pour les pièces,

Artem, est-ce que ça marche au moins ?

#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) Démarrer le test #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) Démarrer le test #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) Démarrer le test #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) Démarrer le test #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 du script

Dossiers :
 
Renat Akhtyamov:
Quel est le verdict sur la vitesse des fonctions - laquelle est la plus rapide ?

ils fonctionnent de la même manière, imho les expériences sont pour les expériences... voici le dernier appel de test pour un demi-milliard de fois, et bien oui vous pouvez voir la différence, la seule chose qui reste est de déterminer combien de ticks dans une minute (~60), combien dans un tick dans une heure (~3600) et combien dans un jour (~86400) et combien ces 23 secondes fonctionneront pour un demi-milliard d'appels ...

5 787 jours = 23 secondes de profit ? si nous utilisons la fonction la plus rapide sur chaque tick! )))))

imho, utilisez ce qui vous convient et n'écoutez personne.

 
Igor Makanu:

ils fonctionnent de la même manière, imho les expériences sont pour les expériences... voici le dernier appel de test pour un demi-milliard de fois, et bien oui vous pouvez voir la différence, la seule chose qui reste est de déterminer combien de ticks dans une minute (~60), combien dans un tick dans une heure (~3600) et combien dans un jour (~86400) et combien ces 23 secondes fonctionneront pour un demi-milliard d'appels ...

5 787 jours = 23 secondes de profit ? si nous utilisons la fonction la plus rapide sur chaque tick! )))))

imho, utilisez ce qui vous convient et n'écoutez personne.

je me suis habitué à 4pc, plus compact et plus lisible

Je ne peux pas me plaindre de la vitesse et des fonctionnalités, c'est correct.

;)