Guarda come scaricare robot di trading gratuitamente
Ci trovi su Facebook!
Unisciti alla nostra fan page
Script interessante?
Pubblica il link!
lasciare che altri lo valutino
Ti è piaciuto lo script? Provalo nel Terminale MetaTrader 5
Visualizzazioni:
48
Valutazioni:
(3)
Pubblicato:
\MQL5\Include\Tools\Custom\ \MQL5\Expert\Test\DateTimeMsc\
Freelance MQL5 Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance

Quando di recente ho iniziato a testare intensamente la funzionalità di CopyTicksRange(), ho riscontrato alcuni problemi sfavorevoli nella gestione dei tempi al millisecondo:

  1. In realtà volevo usare CDateTime, poiché è derivato da MqlTimeStruct e si possono modificare le diverse unità di tempo molto facilmente usando i metodi di incremento e decremento inclusi.
  2. Allo stesso tempo, avevo bisogno di un modo per tradurre agevolmente i millisecondi (secondi dal 1° gennaio 1970 per 1000 in formato ulong) avanti e indietro.

Qui ho incontrato la difficoltà che il numero di millisecondi, per esempio, è un numero molto vago che non dice molto sulla data esatta. Tuttavia, se si usa CDateTime o TimeStruct, tutte le unità di tempo sono facili da cambiare, ma il formato le distrugge e il risultato è molto poco chiaro. Questa classe CDateTimeMsc è stata creata per risolvere questo problema.

#include <Tools\DateTime.mqh>

struct CDateTimeMsc: public CDateTime
  {
public:
   int               msc;               // additional variable for msc storage
   datetime          check_datetime;    // per una comoda osservazione è necessario un piccolo overhead.

   //--- Metodi CDateTimeMsc

   ulong             MscTime(void) {return(ulong(double(CDateTime::DateTime()) * 1000) + msc);}
   void              MscTime(ulong a_msc_time);  // input (datetime*1000)
   void              Msc(int value);
   //bool IsNumInt(const int num);
   void              MscDec(int delta = 1);
   void              MscInc(int delta = 1);
   void              SecTime(int a_int_time);
   ulong             SecTime(void);
   void              UpdateDateTime();   // aggiorna la variabile di osservazione check_datetime
   void              DateTime(datetime a_datetime) {CDateTime::DateTime(a_datetime); UpdateDateTime();}
   datetime          DateTime(void) {return(CDateTime::DateTime());}

  };

I nuovi metodi sono stati inseriti sotto l'ereditarietà della vecchia struttura.

Ora la classe, che in realtà è una struttura (vedere Strutture/Classi), può lavorare anche con i millisecondi, purché siano disponibili tali tempi esatti.

Inoltre, i metodi di incremento e decremento sono stati estesi alla proprietà msc.

Si potrebbe ora discutere se la variabile aggiuntiva "check_datetime" sia davvero necessaria, poiché crea un certo overhead (per alcuni è molto importante). Tuttavia, ho pensato che di solito non vengono utilizzati molti oggetti CDateTime, ma solo alcuni nei punti importanti in cui è necessario modificare unità di tempo come ore, minuti, secondi o giorni. Avevo anche qualche dubbio sul metodo UpDateTime(), che viene chiamato inutilmente a ogni incremento/decremento.

Tutto sommato, però, il fattore di gestione era l'obiettivo principale.


Il test
Non è più necessario interrogare l'ora con una variabile datetime aggiuntiva se si vuole conoscere la data esatta, ma si può semplicemente mettere sotto controllo la variabile "check_datetime": (TestEA vedi sopra)


obs2

L'ora al millisecondo è stata tradotta automaticamente nel formato datetime.


Tradotto dal tedesco da MetaQuotes Ltd.
Codice originale: https://www.mql5.com/de/code/48156

Il perfetto ZigZag Il perfetto ZigZag

Zigzag ultraveloce secondo il principio più semplice possibile. Nessun vertice penzolante. Con supporto per la ricerca dei vertici ottimizzata nel tempo.

Corrected Average (CA) Corrected Average (CA)

Indicatore di media corretta di A.Uhl (noto anche come "media mobile ottimale").

La versione di Jolly Roger del consigliere La versione di Jolly Roger del consigliere

Basato sul partecipante Pirat al Campionato di Trading Automatico 2011.

Triangle Hedge Triangle Hedge

Apre una posizione di copertura virtuale in MetaTrader 5.