MT5 et la vitesse en action - page 40

 
Andrey Khatimlianskii:

Pourquoi réduire les graphiques quand on peut réduire l'ensemble du terminal ?

Vérifié. La charge CPU est plus élevée que si vous minimisez les graphiques, Market Watch et Tools.


Je peux me tromper.

 
Veuillez ajouter TERMINAL_IS_MINIMIZED similaire à CHART_IS_MINIMIZED. Jusqu'à présent, nous avons utilisé la solution DLL.
user32::IsIconic(TerminalHandle)
Pour comprendre qu'il est possible de supprimer les mêmes sondages à la souris, de ne pas dessiner de panneaux, etc.
 

Veuillez partager les résultats de l'exécution de cet EA à partir de votre VPS (et non de votre machine personnelle).

#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

const bool Init = EventSetTimer(1);

void OnTimer()
{  
  _B(GetMicrosecondCount(), 1); // Замеряем длительность выполнения GetMicrosecondCount()
}


Sur ce VPS

2020.10.03 20:21:49.222 Terminal        MetaTrader 5 x64 build 2629 started for MetaQuotes Software Corp.
2020.10.03 20:21:49.222 Terminal        Windows Server 2012 R2 build 9600 on KVM, Intel Xeon E3-12 xx v2 (Ivy Bridge, IBRS), 4 / 5 Gb memory, 7 / 38 Gb disk, IE 11, RDP, UAC, Admin, GMT+3


résultat.

2020.10.04 12:01:22.763 Test6 (EOSUSD,M1)       Alert: Time[Test6.mq5 7 in OnTimer: GetMicrosecondCount()] = 26 mсs.
2020.10.04 12:01:23.747 Test6 (EOSUSD,M1)       Alert: Time[Test6.mq5 7 in OnTimer: GetMicrosecondCount()] = 33 mсs.
2020.10.04 12:01:24.747 Test6 (EOSUSD,M1)       Alert: Time[Test6.mq5 7 in OnTimer: GetMicrosecondCount()] = 36 mсs.
2020.10.04 12:01:25.748 Test6 (EOSUSD,M1)       Alert: Time[Test6.mq5 7 in OnTimer: GetMicrosecondCount()] = 32 mсs.
2020.10.04 12:01:26.762 Test6 (EOSUSD,M1)       Alert: Time[Test6.mq5 7 in OnTimer: GetMicrosecondCount()] = 23 mсs.


Il est souhaitable de fournir la configuration du VPS avec le résultat, comme indiqué ci-dessus.


Confronté au fait que littéralement toutes les fonctions sont lentes. Avant de changer de VPS, je veux comparer avec d'autres solutions et comprendre laquelle est la meilleure à choisir. Veuillez donc partager pour avoir une image objective.


Je peux utiliser n'importe quel terminal, MT4/MT5. Mais je suis plus intéressé par le 5, bien sûr.

 
J'ai essayé de le remplacer par la version WinAPI.
#import "kernel32.dll"
  int QueryPerformanceCounter(ulong &lpPerformanceCount);
  int QueryPerformanceFrequency(ulong &lpFrequency);
#import

ulong QueryPerfomanceCounter() { ulong value;  if (QueryPerformanceCounter(value)) return value;  return 0; } 

ulong QueryPerformanceFrequency() { ulong freq = 0;  if (kernel32::QueryPerformanceFrequency(freq)) return freq;  return 0; }  


// https://www.mql5.com/ru/forum/170952/page89#comment_8203859
ulong GetPerfomanceCount_mcs()
{ 
  static ulong freq= QueryPerformanceFrequency();
  return freq ? QueryPerfomanceCounter()*1000000/freq : 0;
}

#define GetMicrosecondCount GetPerfomanceCount_mcs
Le résultat est identique au résultat normal. Apparemment, l'implémentation interne est la même. Existe-t-il une autre mise en œuvre du comptage des microsecondes ?
Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2018.07.27
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 

Détermine si un programme est en cours d'exécution ou non sur la machine freinée.

// Возвращает true, если тормозной VPS.
bool IsFreezeVPS()
{
  static bool FirstRun = true;
  static bool Res;
  
  if (FirstRun)
  {
    if (Res = ::GetMicrosecondCount() - ::GetMicrosecondCount())
      ::Alert("Warning: FreezeVPS - https://www.mql5.com/ru/forum/342090/page40#comment_18579094");
    
    FirstRun = false;
  }
  
  return(Res);
}
 

Il semble avoir contourné les freins GetMicrosecondsCount sur les machines VPS. Cela peut sembler n'être rien. En fait, les EA de combat tuaient le VPS avec la charge du CPU, car le décompte des microsecondes doit être pleinement utilisé dans les snapshots de l'environnement de trading, qui à leur tour sont conçus pour ne pas charger, mais pour soulager le CPU.


Qui d'autre est entré ici ? Snapshots, et maintenant GetMicrosecondsCount...

 
fxsaber:

Détermine si un programme est en cours d'exécution ou non sur la machine freinée.

Le fait que la différence soit nulle ou non est une question de hasard :

void OnStart()
{
        const int max = 2000000;
        int count = 0;
        for ( int i = 0; i < max; i++ )
                if ( GetMicrosecondCount() != GetMicrosecondCount() )
                        count++;
        Print( max, ":" ,count );
}

Résultat : 2000000:213579

 
A100:

Zéro ou pas zéro, c'est une question de hasard :

Résultat : 2000000:213579

Oui, c'est pourquoi j'utilise une telle condition dans mqh.

    // Несколько проверок - от ложных срабатываний.
    bool Res = (bool)(::GetMicrosecondCount() - ::GetMicrosecondCount()) &&
               (bool)(::GetMicrosecondCount() - ::GetMicrosecondCount()) &&
               (bool)(::GetMicrosecondCount() - ::GetMicrosecondCount()) &&
               (bool)(::GetMicrosecondCount() - ::GetMicrosecondCount()) &&
               (bool)(::GetMicrosecondCount() - ::GetMicrosecondCount());
 
fxsaber:

Oui, c'est pourquoi j'utilise cette condition dans mqh.

C'est seulement 5 chèques. J'ai un ordinateur lent (tablette), mais même moi je n'ai une différence que tous les2000000/213579=10ème contrôle. Et le fait que j'en ai une lente est confirmé par le fait que même celle-ci n'est reproduite par personne d'autre :

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

MT5 et la vitesse en action

A100, 2020.09.05 00:13

Également sur les retards

et tous les graphiques manuels (tendance, Fibonacci, etc.) sont également lents.

Les paramètres sont tous par défaut :

  • Serveur : MetaQuotes-Demo
  • Historique : disponible depuis le 01.01.1971
  • Délai précis : aucun
  • Nombre maximal de barres dans la fenêtre : 100000
  • Type de graphique : chandeliers
  • Réduction de l'échelle du graphique : Maximum

Symbole, période bars latence
EURUSD, Mounthly 597 aller à
EURUSD, Hebdomadaire
2590 Vérifiez
EURUSD, Quotidien

12797

pas de

Une sorte de dépendance inverse : moins il y a de barres, plus c'est lent.

Sur les graphiques mensuels et hebdomadaires, par exemple l'EURGBP (où il n'y a pas d'historique aussi profond), aucun retard.


 
A100:

Ça ne fait que 5 contrôles. J'ai un ordinateur lent (tablette), mais même moi je n'ai une différence que tous les2000000/213579=10ème contrôle. Et le fait que j'en ai une lente est confirmé par le fait que même celle-ci n'est reproduite par personne d'autre :

Si cinq vérifications consécutives donnent un résultat non nul, il s'agit d'un GetMicrosecondsCount lent. Bien sûr, il peut y avoir d'autres options (encore plus logiques) pour déterminer si un problème existe. Je l'ai laissé comme ça pour l'instant.

Quant au travail avec l'historique des barres, je ne l'utilise pas. C'est toujours M1+5000 barres. La tâche est d'échanger rapidement.