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

 
Renat Akhtyamov:

Je suis habitué au pack de 4, c'est plus compact et plus lisible.

;)

mon exemple compact est sur la page d'accueil... c'est en fait là que tout a commencé ))))

 
Igor Makanu:

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 ?

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

Oui, ça marche :

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

En résumé :

  • 29 secondes CopyClose()
  • 173 secondes iClose()
  • 184 sec Fermer[]
  • 31 secondes CopyRates()

Qu'est-ce qu'il y a ? Pourquoi ai-je une différence de plus de six fois ?

SZ fonctionne sur D1

 
Artyom Trishkin:

Qu'est-ce qu'il y a ? Pourquoi ai-je une différence de plus de six fois ?


Igor Makanu:

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

)))

 

Igor Makanu:

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

)))

J'ai fait un test sur le H1, aucune différence perceptible :

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

et que les bits et les octets n'ont rien à voir avec ça ?

 
Artyom Trishkin:

et que les bits et les octets n'ont rien à voir avec ça ?

Je ne vais pas vous dire que votre ordinateur doit être stupide, n'est-ce pas ?

J'ai testé plusieurs fois, Roman a testé - les résultats sont comparables.

Pour ce test, la vitesse du disque dur ne devrait pas être critique, il ne reste pas grand chose : OS, et hardware = mémoire + CPU, quelque part il y a quelque chose de lent,

il y a bien sûr une option dans un "monde intérieur" Core i3 , j'ai un Core™ i3-4170

 
Igor Makanu:

Je ne vais pas vous dire que votre ordinateur doit être stupide, n'est-ce pas ?

J'ai testé plusieurs fois, Roman a testé - les résultats sont comparables.

Pour ce test, la vitesse du disque dur ne devrait pas être critique, il ne reste pas grand chose : OS, et hardware = mémoire + CPU, quelque part il y a quelque chose qui traîne,

il y a bien sûr une option dans un "monde intérieur" Core i3 , j'ai un Core™ i3-4170

J'ai un EA de test accroché au deuxième symbole, dans lequel le contrôle d'événement dans le timer est constant. On peut supposer que cela l'affecte d'une manière ou d'une autre. Et uniquement sur les fonctionsnon CopyXXX. Il n'y a aucune raison de le retirer du tableau pour le moment - sa présence est plus importante pour mes affaires courantes que ce test.

 
Artyom Trishkin:

J'ai fait un test sur H1, aucune différence notable :

Les développeurs ont dit un jour que les nouvelles fonctions iXXX de 5 ne sont qu'un habillage des fonctions CopyXXX.

Par conséquent, il ne faut pas s'attendre à une différence dans les requêtes uniques.

 
Renat Akhtyamov:
Quel est le verdict sur la vitesse de fonctionnement - lequel est le plus rapide ?
//+------------------------------------------------------------------+
//| 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);
  }
//+------------------------------------------------------------------+
l'auteur du script ne se souvient pas de qui
 
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.

J'ai oublié les tests et l'optimisation, Igor. C'est là que la vitesse est nécessaire.

 
Andrey Khatimlianskii:

J'ai oublié les tests et l'optimisation, Igor. C'est là que la vitesse est nécessaire.

Ouais, eh bien... Il n'y a pas beaucoup de gens qui discutent de ce sujet ici, alors j'ai complètement oublié à quoi ça sert. ))))

Tu as raison ! - Mais nous avons besoin d'une utilisation pratique des fonctions CopyOpen()... à faire, et probablement si nous enveloppons l'appel CopyOpen() dans une fonction supplémentaire, alors le gain de performance sera perdu.

ZZY : en général, c'est comme partout ailleurs - vous écrivez en assembleur, vous obtenez un long temps de développement et pas le fait que la performance finale sera plus élevée qu'en utilisant le C++, que vous avez écrit en 15 minutes - vous devriez vérifier.