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

 
Aleksei Stepanenko struttura MqlDateTime. Ma in questo caso, ci saranno segnali di barre mancanti che non dovrebbero esistere.

Per esempio:

Manca 1 barra di mercoledì, iniziata da questo simbolo alle 00:30, cioè persa alle 00:00

M30 time frame, si è rivelato essere 47 in un giorno invece di 48. Questo è esattamente ciò di cui abbiamo bisogno per identificare


 
Vitaly Muzichenko #:

Ecco un esempio:

Manca 1 barra di mercoledì, iniziata da questo simbolo alle 00:30, cioè persa alle 00:00

M30 time frame, ha ottenuto 47 nel giorno invece di 48. Questo è esattamente ciò che dobbiamo identificare.


Non conosco il modo giusto, ma penserei in questa direzione

      datetime tt=Time[Bars-1];
      //--- 
      if(Time[i]==tt){tt+=PeriodSeconds(PERIOD_CURRENT);}
      else
      {Print(TimeToString(tt,TIME_DATE|TIME_MINUTES));tt+=PeriodSeconds(PERIOD_CURRENT);}
 
Vitaly Muzichenko #:

Ecco un esempio:

Manca 1 barra di mercoledì, iniziata da questo simbolo alle 00:30, cioè persa alle 00:00

M30 time frame, ha ottenuto 47 nel giorno invece di 48. Questo è esattamente ciò di cui abbiamo bisogno per identificare


int  Bars( 
   string           symbol_name,     // имя символа 
   ENUM_TIMEFRAMES  timeframe,       // период 
   datetime         start_time,      // с какой даты 
   datetime         stop_time        // по какую дату 
   );
Se 47
 

Vitaly Muzichenko #:

Questo è esattamente ciò che dobbiamo identificare.

Capisco, la questione è quella dei falsi allarmi, di cui ce ne saranno molti.

//дата последней свечи
 curr_time=iTime(symbol,frame,0);
//ограничение на торговлю вне начала бара
if(last_time==curr_time) return;

if((iBarShift(eSymbol,eFrame,last_time)-iBarShift(eSymbol,eFrame,curr_time))>PeriodSeconds(eFrame)) printf("а-я-яй");
last_time=curr_time;
 
Alexey Viktorov #:
Se 47

Questo è possibile, si può anche CopyOpen()

Non riesco a decidere come organizzare questo in un ciclo attraverso tutta la storia

 

ancora più semplice:

for(int i=TotalBars-1; .....
   {
   if((iBarShift(eSymbol,eFrame,last_time)-i)>PeriodSeconds(eFrame)) printf("а-я-яй");
   last_time=iTime(symbol,frame,i);
 
Vitaly Muzichenko #:

Questo è possibile, si può anche CopyOpen()

Non riesco a decidere come organizzare questo in un ciclo attraverso tutta la storia

Il tempo di apertura della barra di zero giorni meno 1 secondo all'apertura della prima barra di giorno. Poi dall'apertura della prima barra giornaliera meno 1 secondo all'apertura della seconda barra giornaliera e così via.
 
Vitaly Muzichenko #:

Questo è possibile, si può anche CopyOpen()

Non riesco a decidere come organizzarlo in un ciclo su tutta la storia

Esattamente (per esempio per M30) - se il tempo tra le aperture (modulo % 24 ore) delle barre vicine è più lungo di M30 - significa che mancano delle barre tra loro.

int nbars = ( ( iTime(_Symbol,PERIOD_M30,N) - iTime(_Symbol,PERIOD_M30,N+1) ) ) / PeriodSeconds(PERIOD_M30) ) % 48; // сколько баров должно быть между ссоедними отметками

if (nbars>1) PrintFormat("Пропущено баров: %d",nbars-1);

 

Grazie a tutti, il principio è chiaro, il problema è stato formalizzato.

---

Ora una domanda: cosa sto sbagliando, tutti i caratteri hanno lo stesso valore?

#property strict

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print( DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_POINT),8) );
  }
//+------------------------------------------------------------------+
0       14:39:38.965    sc GBPCHF,M30: 0.00001000
0       14:46:44.478    sc NZDCHF,M30: 0.00001000
0       14:44:54.709    sc EURUSD,M30: 0.00001000

---

P.S. Terminale MT4, controllato su due diversi terminali in diverse società di intermediazione

P.SS. Ho controllato in MT5, il risultato è lo stesso

2021.11.20 15:05:34.881 sc (EURCHF,M30)  0.00001000
2021.11.20 15:05:39.203 sc (AUDUSD,M30)  0.00001000
2021.11.20 15:05:51.985 sc (EURAUD,M30)  0.00001000

---

Probabilmente sto facendo qualcosa di sbagliato!

Ho bisogno di ottenere "Valore del punto"

 
Vitaly Muzichenko #:

Grazie a tutti, il principio è chiaro, il problema è stato formalizzato.

---

Ora una domanda: cosa sto sbagliando, tutti i caratteri hanno lo stesso valore?

Vitaly, qui è necessario o disturbare gli sviluppatori, o

Motivazione: