MT5 e la velocità in azione - pagina 52

 

Riprogettato per una macro

#define  µsSLEEP(µsRange)                              \
        {                                             \
           ulong c = GetMicrosecondCount() + µsRange; \ 
           while(GetMicrosecondCount() < c);          \
        }


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   while(!_StopFlag)
   {
      µsSLEEP(5000000);
      Print("Прошло 5000000 микросекунд");
   }
}
 
Roman:

Naturalmente, può fare più di un solo nucleo.

Intendevo dire mentre senza Sonno.

È chiaro che lo slittamento non è adatto qui perché abbiamo bisogno di microsecondi. Ma sarà ronzante anche senza...

 
Andrey Khatimlianskii:

Intendevo dire mentre senza Sonno.

È chiaro che lo slittamento non funzionerà qui perché abbiamo bisogno di microsecondi. Ma ronzerà anche senza.

Naturalmente, ronza senza slittamento.
Il contatoreGetMicrosecondCount è in funzione

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   ulong µs = 0;
   
   while(!_StopFlag)
   {
      µs = GetMicrosecondCount();
      
      Comment((string)µs);
      ChartRedraw();      
   }
   
   Comment("");   
}
 
Roman:

Naturalmente gira senza slittamento.
Il contatore GetMicrosecondCount è in funzione.

Non è solo il contatore che viene caricato. Anche un ciclo infinito vuoto lo caricherà. Questo è quello che voglio dire.

Cattiva soluzione, in generale. Ma non lo suggerirò meglio.

 
Andrey Khatimlianskii:

Non è solo il contatore che viene caricato. Verrà caricato anche un ciclo infinito vuoto. Questo è quello che voglio dire.

È una cattiva soluzione, tutto sommato. Ma non lo suggerirò meglio.

Quindi un ciclo vuoto prenderà ovviamente tutto il potenziale dei cicli di clock del processore.
Non capisco la lamentela per una cattiva soluzione. Se non è adatto alle vostre risorse, non significa che sia cattivo.
µsSLEEP vi dà una latenza di loop inferiore a quella di Sleep(1) standard; cioè in microsecondi, non in millisecondi.
Il 5000000 negli esempi precedenti è solo per un esempio, la frequenza reale in combattimento sarebbe meno di 1 ms

Non capisco il suo problema.
Hai
bisogno di essere libero dallo stress?
Metti un regolare Sleep(20); in millisecondi

 
Roman:

Così vuoto mentre comprensibilmente raccoglie tutto il potenziale dei cicli di clock del processore.
Non capisco la lamentela per una cattiva soluzione. Se non è adatto alle vostre risorse, non significa che sia cattivo.
µsSLEEP vi dà una latenza di loop inferiore a quella di Sleep(1) standard; cioè in microsecondi, non in millisecondi.
Il 5000000 negli esempi precedenti è solo per un esempio, la frequenza reale in combattimento sarebbe meno di 1 ms

Non capisco il suo problema.
Hai
bisogno di essere libero dallo stress?
Mettere regolare Sleep(20); in millisecondi.

Non c'è stata una lamentela.
Non ho bisogno di un tale timer, lo stavo studiando per interesse. Ma la trovo una cattiva soluzione perché carica inutilmente il processore.

E a che scopo avete bisogno di microsecondi di slittamento?

 
Andrey Khatimlianskii:

Non ci sono state lamentele.
Non ho bisogno di un tale timer, l'ho studiato per interesse. Ma trovo la soluzione pessima, perché carica inutilmente il processore.

A cosa ti serve un microsecondo di slittamento?

Se ti chiedessi perché si carica, e ne capissi il motivo, non avresti questa opinione.
Se volete meno di 1ms, dovrete pagare con le risorse.
E mi sembra che non puoi scaricarlo, perché hai bisogno di un timer di microsecondi per contare l'intervallo.
D'altra parte, se il timer a microsecondi è costantemente in esecuzione e dà un carico uguale a vuoto mentre,
allora c'è una domanda, perché questo ritardo poi mettere, e utilizzare timer a microsecondi. Ma non importa, è lirico.
Quindi, sto pingando il server, con una certa frequenza in mentre senza ritardo.
E ho bisogno di un campionamento al microsecondo, perché ci saranno chiamate inutili.
Sto usando la prima soluzione, che ho postato prima, e ho scritto anche µsSleep, potrebbe tornare utile.


 
Andrey Khatimlianskii:


A che scopo avete bisogno di un microsecondo di slittamento?

Ecco una soluzione già pronta.
Print() ovviamente lo sostituite con il vostro codice.

#define  SEND_PING                                           \
{                                                           \   
   ulong currCount = GetMicrosecondCount();                 \
   switch((currCount - prevCount) > 5000000)                \
   {                                                        \
      case 0:                                               \
         break;                                             \
      case 1:                                               \
         prevCount = currCount;                             \
         Print("ping");                                     \
         break;                                             \
   }                                                        \
}
       

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   ulong  prevCount = 0;
   
   while(!_StopFlag)
   {
      SEND_PING;
   }  
 
}
 
Renat Fatkhullin:
Nel nuovo tester che stiamo scrivendo, cercheremo di cambiare questo.
fxsaber:

Inviato al PM.

Nel Tester, questo EA genera milioni di record di ordini commerciali completi e ragionevoli (non spam) sotto forma di modifiche. Per questo motivo, il registro del Tester si intasa catastroficamente e rapidamente.

Questi registri non sono necessari il 99% delle volte, ma spesso abbiamo bisogno di ciò che l'Expert Advisor produce tramite Print. Pertanto, vorrei chiedervi di nuovo di considerare la possibilità di disabilitare la generazione automatica di voci per ogni pacchetto OrderSend nel Tester.

Se ho capito bene, allora disabilitando la generazione di tali stringhe si otterrà un aumento delle prestazioni delle corse singole. Cioè il beneficio è duplice.

 
Renat Fatkhullin:


Ma AMPGlobalEU-Live (in realtà è meglio cercarlo come AMPGlobalUSA-Live) per MetaTrader 5 con un nucleo fisico della piattaforma a Chicago è in realtà 19,53 ms, poiché i nostri server più vicini sono a New York:

Appositamente scansionato tutti i loro punti manualmente - il minimo è 19 ms.

Cercheremo di mettere dei server a Chicago nei prossimi giorni. Non l'ho ancora fatto.

Il server di Chicago è stato distribuito.

Entro 24 ore, scansionerà tutti i server e inizierà a distribuirli.

Motivazione: