Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1264

 
Roman:

Pouvez-vous me dire comment mesurer la fréquence d'échantillonnage minimale, une itération d'une boucle while ?
J'essaie ce code, mais je ne suis pas sûr de mesurer correctement.


void OnStart()
{
   ulong time[]; 
   ulong t = 0;  
   int   i = 0;
   ArrayResize(time, 30);      
   ulong startTime=GetTickCount64();
   uint iterations=0;
   while(i < 30 && !_StopFlag )
   {
      //t = GetMicrosecondCount();
      //t = GetMicrosecondCount() - t;      
      iterations++;
      
      ArrayFill(time, i, 1, t);
      i++;   
   }
   if (iterations) {
      ulong endTime=GetTickCount64();
      ulong avgTime=(startTime-endTime)/iterations; // среднее время 1-й итерации
   }
   ArrayPrint(time);
}
 
Maxim Kuznetsov:

Ah, je comprends.
Je l'ai écrit un peu différemment.

void OnStart()
{   
   uint  iterations = 1;   
   ulong startTime  = GetMicrosecondCount();   
   
   while(iterations == 1 && !_StopFlag )
   {            
      iterations++;         
   }
   
   ulong endTime = GetMicrosecondCount() - startTime;
   
   Print(IntegerToString(fabs(endTime)));
}

Il s'avère que c'est 0 ou 1 microseconde.
En dessous des microsecondes, il ne peut être contrôlé.

 
Roman:

Ah, je comprends.
Je l'ai écrit un peu différemment.

Il s'avère que c'est 0 ou 1 microseconde.
Vous ne pouvez pas vérifier en dessous des microsecondes.

Il serait préférable de compter le nombre d'itérations. Bien sûr, ce sera moins d'une microseconde avec les fréquences des processeurs d'aujourd'hui. Par exemple, entre deux ticks)

void OnStart()                                  // Спец. функция OnStart()
  {
   int i, Count;                             // Объявление переменных
   for (i=1; i<=5; i++)                      // Покажем для 5 тиков
     {
      Count=0;                               // Сброс счётчика
      while(RefreshRates()==false)           // До тех пор, пока..
        {                                   //..придёт новый тик
         Count = Count+1;                    // Счётчик итераций 
        }
      Alert("Тик ",i,", циклов ",Count);     // После каждого тика
     }
   return;                                   // Выход из start()
  }
//--------------------------------------------------------------------
 
Valeriy Yastremskiy:

Il est préférable de compter le nombre d'itérations. Bien sûr, ce sera moins d'une microseconde avec les fréquences des CPU d'aujourd'hui. Par exemple entre les ticks)

Probablement mieux, mais ce n'est pas la question.
Nous devons descendre jusqu'aux nanosecondes, donc je pense que nous devrions écrire une dll avec ses propres fonctions de contrôle du temps.
Je me demande juste avec quelle discrétion la boucle tourne.

 

Comment puis-je déterminer quelle commande a été clôturée en dernier ?

Ou quel a été le bénéfice sur les 5 dernières commandes clôturées ?


OrdersHistoryTotal()-1 - renvoie la position de l'ordre dans l'historique avec le ticket maximum.


Si une transaction avec le ticket 100 a été clôturée, et qu'une heure plus tard, une transaction avec le ticket 99 a été clôturée, alorsOrdersHistoryTotal()-1 pointera sur #100, mais comment pouvons-nous obtenir des informations sur l'ordre #99 ?

---

La chose la plus stupide qui me vient à l'esprit est de sauvegarder l'historique dans un tableau, de le trier par heure de fermeture et de lire ce dont j'ai besoin dans le tableau. Mais c'est super sous-optimal.

 
Roman:

Probablement mieux, mais ce n'est pas la question.
Si nous devons descendre jusqu'aux nanosecondes, je pense que nous devons écrire une dll avec ses propres fonctions de contrôle du temps.
Je suis juste curieux de connaître le taux d'échantillonnage auquel la boucle fonctionne.

avec la fréquence d'un noyau libre multipliée par le nombre de noyaux libres. 2 - 10 gigahertz devrait être quelque part, s'il n'y a pas d'autres tâches et que la boucle ne compte que. La vitesse dépend de la charge du processeur et de la mémoire, de la priorité des actions externes au moment de l'exécution de la boucle, ainsi que des actions internes de la boucle. De plus, les opérations d'addition et d'affectation sont plus rapides que la lecture et l'écriture de tableaux, d'après ce que je comprends.

 
Valeriy Yastremskiy:

avec la fréquence des noyaux libres multipliée par le nombre de noyaux libres. 2 - 10 gigahertz quelque part, s'il n'y a pas d'autres tâches et que la boucle ne fait que compter. De plus, les opérations d'addition et d'affectation sont plus rapides que la lecture ou l'écriture dans un tableau.

Merci. Je l'ai.

 
Qui peut aider à écrire un robot de trading?
 
paradisehell1:
Qui peut aider à écrire un robot de trading?

de ces robots, tant de choses ont déjà été écrites - je ne crois pas qu'il n'y en ait pas une que vous souhaitiez.

 

Bonjour à tous !


Question : quel est le moyen le plus simple de déterminer les temps forts et faibles d'une barre ?

L'heure d'ouverture/de fermeture du bar n'est pas intéressante.

Sur MT4.

Merci !

Raison: