Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1264

 
Roman:

Potete dirmi come misurare la frequenza di campionamento minima, un'iterazione di un ciclo while?
Sto provando questo codice, ma non sono sicuro di misurare correttamente.


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, ho capito il punto.
L'ho scritto un po' diversamente.

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

Risulta essere 0 o 1 microsecondo.
Al di sotto dei microsecondi non può essere controllato.

 
Roman:

Ah, ho capito il punto.
L'ho scritto un po' diversamente.

Risulta essere 0 o 1 microsecondo.
Al di sotto dei microsecondi è impossibile controllare.

È meglio contare il numero di iterazioni. Naturalmente sarà meno di un microsecondo con le frequenze della CPU di oggi. Per esempio, tra le zecche)

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:

È meglio contare il numero di iterazioni. Naturalmente sarà meno di un microsecondo con le frequenze della CPU di oggi. Per esempio tra le zecche)

Probabilmente meglio, ma non è questo il punto.
Dobbiamo scendere a nanosecondi, quindi penso che dovremmo scrivere una DLL con le proprie funzioni di controllo del tempo.
Mi chiedo solo con quale discrezione il ciclo stia girando.

 

Come posso determinare quale ordine è stato chiuso per ultimo?

O qual è stato il profitto degli ultimi 5 ordini chiusi?


OrdersHistoryTotal()-1 - restituisce la posizione dell'ordine nella storia con il biglietto massimo.


Se un trade con il ticket 100 ha chiuso, e un'ora dopo, un trade con il ticket 99 ha chiuso, alloraOrdersHistoryTotal()-1 punterà a #100, ma come possiamo ottenere informazioni sull'ordine #99?

---

La cosa più stupida che mi viene in mente - salvare la cronologia in un array, ordinarla per tempo di chiusura e leggere ciò che mi serve dall'array. Ma questo è super sub-ottimale.

 
Roman:

Probabilmente meglio, ma non è questo il punto.
Se dobbiamo scendere a nanosecondi, penso che dobbiamo scrivere una DLL con le sue funzioni di controllo del tempo.
Sono solo curioso di sapere la frequenza di campionamento con cui il ciclo è in funzione.

con la frequenza di un nucleo libero moltiplicato per il numero di nuclei liberi. 2 - 10 gigahertz dovrebbero essere da qualche parte, se non ci sono altri compiti e il ciclo conta solo. La velocità dipende dal carico della CPU e della memoria, dalla priorità delle azioni esterne al momento dell'esecuzione del ciclo, così come dalle azioni interne al ciclo. Inoltre, le operazioni di addizione e di assegnazione sono più veloci della lettura e della scrittura da e verso l'array, per quanto ho capito.

 
Valeriy Yastremskiy:

con la frequenza dei core liberi moltiplicata per il numero di core liberi. 2 - 10 gigahertz da qualche parte, se non ci sono altri compiti e il ciclo conta solo. Inoltre le operazioni di addizione e di assegnazione sono più veloci della lettura o della scrittura da e verso l'array.

Grazie. Capito.

 
Chi può aiutare a scrivere un robot di trading?
 
paradisehell1:
Chi può aiutare a scrivere un robot di trading?

di questi robot, tanti sono già stati scritti - non credo che non ce ne sia uno che desideri.

 

Buongiorno a tutti!


Domanda: qual è il modo più semplice per determinare i tempi alti e bassi di una barra?

L'orario di apertura/chiusura del bar non è interessante.

Su MT4.

Grazie!