MT5 e la velocità in azione - pagina 40

 
Andrey Khatimlianskii:

Perché far collassare i grafici quando si può far collassare l'intero terminale?

Controllato. Il carico della CPU è più alto che se minimizzi i grafici, Market Watch e Strumenti.


Potrei sbagliarmi.

 
Si prega di aggiungere TERMINAL_IS_MINIMIZED simile a CHART_IS_MINIMIZED. Finora dobbiamo usare la soluzione DLL.
user32::IsIconic(TerminalHandle)
Per capire che è possibile rimuovere gli stessi sondaggi del mouse, non disegnare pannelli, ecc.
 

Per favore, condividi i risultati dell'esecuzione di questo EA dal tuo VPS (non dalla tua macchina di casa).

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

const bool Init = EventSetTimer(1);

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


Su questo 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


risultato.

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.


È auspicabile fornire la configurazione del VPS insieme al risultato, come mostrato sopra.


Di fronte al fatto che letteralmente tutte le funzioni sono lente. Prima di cambiare VPS, voglio confrontare con altre soluzioni e capire quale è meglio scegliere. Quindi, per favore, condividete per avere un quadro oggettivo.


Posso usare qualsiasi terminale, MT4/MT5. Ma sono più interessato al 5, ovviamente.

 
Ho provato a sostituirlo con la versione 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
Il risultato è identico a quello regolare. Apparentemente, l'implementazione interna è la stessa. C'è qualche altra implementazione della misurazione al microsecondo?
Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2018.07.27
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 

Determina se un programma è in esecuzione sulla macchina frenata o meno.

// Возвращает 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);
}
 

Sembra aver bypassato i freni di GetMicrosecondsCount sulle macchine VPS. Può sembrare niente. In effetti, gli EA da combattimento stavano uccidendo il VPS con il carico della CPU, perché il conteggio dei microsecondi deve essere completamente utilizzato negli snapshot dell'ambiente di trading, che a loro volta sono progettati per non caricare, ma per togliere il carico dalla CPU.


Chi altro è entrato qui? Istantanee, e ora GetMicrosecondsCount...

 
fxsaber:

Determina se un programma è in esecuzione sulla macchina frenata o meno.

Se la differenza è nulla o meno è una questione di caso:

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

Risultato: 2000000:213579

 
A100:

Zero o non zero è una questione di caso:

Risultato: 2000000:213579

Sì, è per questo che uso tale condizione in mqh.

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

Sì, è per questo che uso questa condizione in mqh.

Sono solo 5 assegni. Ho un computer lento (tablet), ma anche io ho solo una differenza su ogni2000000/213579=10° controllo. E il fatto che io abbia un lento è confermato dal fatto che anche questo nonviene riprodotto da nessun altro:

Forum sul trading, sistemi di trading automatico e test di strategie di trading

MT5 e la velocità in azione

A100, 2020.09.05 00:13

Anche sui ritardi

e tutti i grafici manuali (tendenza, Fibonacci, ecc.) sono anche lenti

Le impostazioni sono tutte di default:

  • Server: MetaQuotes-Demo
  • Storia: disponibile dal 01.01.1971
  • Tempo preciso: nessuno
  • Barre massime nella finestra: 100000
  • Tipo di grafico: candele
  • Riduzione del grafico: Massimo

Simbolo, periodo barre latenza
EURUSD, Mensile 597 vai a
EURUSD, Settimanale
2590 Controlla
EURUSD, Quotidiano

12797

no

Una sorta di dipendenza inversa: meno barre, più lento

Sui grafici mensili e settimanali per esempio EURGBP (dove non c'è una storia così profonda) - nessun ritardo


 
A100:

Sono solo 5 assegni. Ho un computer lento (tablet), ma anche io ho solo una differenza su ogni2000000/213579=10° controllo. E il fatto che io abbia un lento è confermato dal fatto che anche questo nonviene riprodotto da nessun altro:

Se cinque controlli consecutivi danno un risultato diverso da zero, è un GetMicrosecondsCount lento. Naturalmente, ci possono essere altre opzioni (anche più logiche) per determinare se esiste un problema. L'ho lasciato così per ora.

Per quanto riguarda il lavoro con la storia del bar - non lo uso. È sempre M1+5000 barre. Il compito è quello di commerciare rapidamente.