Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 532

 
-Aleks-:
Otterremo i secondi necessari per arrotondare - l'arrotondamento è il problema.

duh

datetime Day00=86400*(time[n]/86400);//начало дня
e c'è l'arrotondamento all'inizio del giorno. 86400=24*60*60
 
-Aleks-:

Non riesco a capire come usarlo.

Il secondo valore richiede"MqlDateTime&dt_struct// struttura per prendere valori" e non capisco come usare questo MqlDateTime.

C'è un tempo. Il tempo ha parametri come: anno, mese, giorno, ore, minuti, secondi, ecc. Chiamando la funzione TimeToStruct(), si scompone il tempo in questi componenti. Poi, per esempio, si possono azzerare ore, minuti e secondi - si ottiene l'inizio del giorno.

MqlDateTime è un tipo di dati, proprio come int, bool, ecc. È solo un tipo composto, cioè per accedere ai suoi campi (ore, minuti, secondi...) bisogna usare un punto. Per esempio: dt_struct.hour - valore dell'ora. Leggi di più sulle strutture su https://www.mql5.com/ru/docs/basis/types/classes.

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Cosa significa questo commento sull'ordine nel diario di bordo, visto che non cambia nulla

 
Aleksey Lebedev:

bene

e c'è un arrotondamento all'inizio del giorno. 86400=24*60*60
Secondo la vostra formula otteniamo il numero di giorni tra la barra corrente e la remota, ma questi giorni sono condizionali, potrebbe essere 9 in punto questo giorno e 1 ora il giorno prima, quindi la differenza in secondi sarebbe 122400 , che è 1,42 giorni - quando arrotondato a 1 giorno, e la necessità di essere 2.
 
Alexey Kozitsyn:

C'è tempo. Il tempo ha parametri come: anno, mese, giorno, ore, minuti, secondi, ecc. Chiamando la funzione TimeToStruct(), si scompone il tempo in questi componenti. Poi, per esempio, si possono azzerare ore, minuti e secondi - si ottiene l'inizio del giorno.

MqlDateTime è un tipo di dati, proprio come int, bool, ecc. È solo un tipo composto, cioè per accedere ai suoi campi (ore, minuti, secondi...) bisogna usare un punto. Per esempio: dt_struct.hour - valore dell'ora. Leggi di più sulle strutture su https://www.mql5.com/ru/docs/basis/types/classes.

E come, scusate, per eseguire questo azzeramento?
 
-Aleks-:
Secondo la vostra formula si ottiene il numero di giorni tra la barra attuale e il remoto, ma questi giorni sono condizionali, cioè può essere 9 del giorno corrente e 1 ora del giorno prima. Poi la differenza in secondi sarà 122400, che equivale a 1,42 giorni - quando arrotondato a 1 giorno, e la necessità di avere 2.

un giorno perso, 23h+24h+9h=2 giorni 8h... Non ho bisogno di questa formula se ne ho bisogno:

Ho bisogno di calcolare su ogni grafico del timeframe corrente. Per il calcolo ho bisogno di sapere la data del lasso di tempo superiore (giorni). Sopra ho allegato il codice - il punto è sapere su ogni barra il prezzo massimo del TF superiore al momento dell'apertura della barra nel timeframe corrente.

Di nuovo:
datetime Day00=86400*(time[n]/86400);//начало дня для time[n]



E tu dici struttura... :)

 
Aleksey Lebedev:

un giorno perso, 23h+24h+9h=2 giorni 8h... Non avete bisogno di questa formula se ne avete bisogno:

Di nuovo:



E tu dici struttura... :)

Perché hai 23 ore - ho scritto 1 ora, ma il punto non cambia.

24 (il giorno prima - un'ora ieri)+24 (ieri - un'ora oggi)+8 (dopo un'ora oggi - meno un'ora)=56/24=2,33, quindi ha fatto due giorni, non sei d'accordo?

 
-Aleks-:

Perché hai 23 ore - ho scritto 1 ora, ma l'essenza non cambia

24 (l'altro ieri - all'ora di ieri)+24 (ieri - all'ora di oggi)+8 (dopo un'ora di oggi - meno un'ora) =56/24 = 2,33 cioè sono due giorni, non sei d'accordo?

23h prima di ieri +

24h ieri +

9h oggi=

2 giorni 8h=2,(33)giorni

Questo è il modo giusto per farlo:

int DayN=time[0]/86400-time[163]/86400;

Non importa, non è necessario)
 
Aleksey Lebedev:

23h prima di ieri+

24h ieri+

9h oggi=

2 giorni 8h=2,(33)giorni

Il modo corretto è qualcosa del genere:

Non importa, non è necessario)

Ora immaginiamo che non siano le 9h di questo giorno ma le 19

24(l'altro ieri +24(ieri - 1h oggi)+18(dopo 1h oggi - meno 1h)=66/24=2,75 cioè fa tre giorni, siete d'accordo?

Come se la gamma non è cambiato ogni giorno, e il calcolo durante il giorno dà poi 2, poi 3 giorni - in questo il problema.

La variante

 int DayN=time[0]/86400-time[163]/86400;

Inoltre non va bene, se assumiamo che la barra attuale sia di 1 ora e quella calcolata sia di 23 ore, in questo caso il risultato del calcolo sarà zero, mentre dovrebbe essere 1.
 
-Aleks-:
Questo non funziona anche se assumiamo che la barra corrente sia di 1 ora e la barra stimata sia di 23 ore, nel qual caso il risultato del calcolo è zero e dovrebbe essere 1.

Sarà 1, entrambi i tempi sono prima arrotondati a un giorno intero, poi sottratti.