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

 

Come faccio a controllare la condizione in un dato momento? ad esempio sul grafico M5, alle 22:59, cioè un minuto prima della chiusura della barra. controllare per l'intero minuto.

      //22:59
      if(open[i]>close[i] && high[i]-low[i]>=100*Point)
        {
         BufferUP[i]=low[i]-distance*Point;
        }
 
PolarSeaman:

Come controllare la condizione in un dato momento? Per esempio, sul grafico M5, alle 22:59, cioè un minuto prima della chiusura della barra.

Nell'indicatore sulla storia - solo leggendo i dati dal TF più giovane (in questo caso M1), dovremo agitarci. Ma per la barra zero:

  1. Calcola il tempo rimasto per chiudere la barra.
  2. Se c'è 1 minuto o meno, facciamo ciò che è necessario.

 
Ihor Herasko:

...Bene per la barra zero:

  1. Calcola il tempo fino alla chiusura della barra.
  2. Se rimane 1 minuto o meno, allora fate ciò che è necessario.

Cioè, l'ora attuale sottrae l'ora di apertura del bar?

Forse dovremmo saltare l'iterazione se l'ora non è nell'intervallo 22:59, 23:00

come scrivere correttamente questa condizione?

 
PolarSeaman:

È l'ora attuale sottratta dall'ora di apertura della barra? Conta meno di un minuto?

Forse salta l'iterazione se l'ora non è nell'intervallo 22:59, 23:00

Come posso scrivere correttamente questa condizione?

Se il tempo è impostato esplicitamente, allora è lo stesso dello schema precedente:

input uint i_uHoursStart = 22; // Час начала действия диапазона
input uint i_uMinutesStart = 59; // Минуты начала действия диапазона
input uint i_uHoursEnd = 23; // Час окончания действия диапазона
input uint i_uMinutesEnd = 00; // Минуты окончания действия диапазона

uint g_uTimeStart, g_uTimeEnd;

int OnInit()
{
...
   g_uTimeStart = i_uHoursStart * 60 + i_uMinutesStart;
   g_uTimeEnd = i_uHoursEnd * 60 + i_uMinutesEnd;
...

}

...
uint uCurDayMinutes = Hour() * 60 + Minute();
if (uCurDayMinutes >= g_uTimeStart && uCurDayMinute < g_uTimeEnd)
{
   // Время от 22:59 до 23:00
}

Non ho controllato il codice. Ci possono essere errori di stampa o altri difetti. La cosa principale qui è la direzione del pensiero.

Dovete anche controllare che i valori delle ore e dei minuti siano corretti. Dopo tutto, un utente può inserire valori come 38 ore e 112 minuti.

 
Ihor Herasko:

Se il tempo è impostato esplicitamente, allora è lo stesso di cui sopra:

Non ho controllato il codice. Ci possono essere errori di battitura e alcuni errori. La cosa principale qui è la direzione del pensiero.

Dovresti anche controllare che i valori di ore e minuti siano corretti. Dopo tutto, un utente può inserire valori come 38 ore e 112 minuti.

Nell'occhio, utente, per 112 minuti)

perché non può essere così?

if (TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)>="22:59"&&TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)<"23:00")

non si mostra all'ora specificata

Ci saranno diverse gamme da spegnere ciascuna

 

le citazioni possono "addormentarsi" per un minuto e si perde il tempo)

La cosa giusta da fare è fare un timer, sincronizzare l'ora locale e corrente, e nel timer "catturare" l'ora giusta

 
PolarSeaman:

Nell'occhio, all'utente, in 112 minuti)

Perché non si può fare così?

Questa è esattamente la soluzione sbagliata, perché state confrontando stringhe, non numeri. Anche se si può fare qualcosa anche con TimeToStr. Ma questo approccio è destinato ad essere più lento che operare con i numeri. Dopo tutto, le operazioni sulle stringhe richiedono molto più tempo delle più semplici operazioni aritmetiche (+, -, /, *).

Ci saranno diverse gamme, ognuna delle quali deve essere disabilitata.

Questo viene fatto memorizzando i valori degli intervalli desiderati in array. Certo, non è chiaro come questo apparirebbe nei parametri di configurazione - bisognerebbe farne troppi. Le soluzioni esistono, però. Non è semplice, ma sono disponibili.

 
Taras Slobodyanik:

le citazioni possono "addormentarsi" per un minuto e si perde il tempo)

Il modo corretto è quello di fare un timer, sincronizzare l'ora locale e corrente, e "catturare" il tempo giusto nel timer

Beh, non devi fare nulla ad un orario prestabilito. Quindi va bene))

 
Taras Slobodyanik:

le citazioni possono "addormentarsi" per un minuto e perdere il tempo)

fare correttamente un timer, sincronizzare l'ora locale e corrente, e nel timer "catturare" il tempo giusto

potete inserire OnCalculate() in OnTimer()?

Non so come sincronizzare l'ora locale e l'ora corrente, non riesco a trovarlo nell'aiuto.

 
Ihor Herasko:

Beh, è quello che serve per non fare nulla in un dato momento. Quindi va bene ))

come, non fare nulla? solo questo minuto è necessario per controllare, e dormire per 24 ore)