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

 
m-r LSV:

Stoleggendo bene?

if(rates_total - prev_calculated == 1)
 Print("Новый бар");
 
Taras Slobodyanik:

Grazie, ora ho questo

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
   {
   fin=iTime(Symbol(), PERIOD_M1 ,0);
   if(last==fin) return(rates_total);
   last=fin;
   
   if(rates_total - prev_calculated == 1)
   Print("Новый бар");


return(rates_total);

	          
 

Potete dirmi la direzione dell'ultima candela chiusa quando si apre una barra?

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
   {
   fin=iTime(Symbol(), PERIOD_M1 ,0);
   if(last==fin) return(rates_total);
   last=fin;
   
   if(rates_total - prev_calculated == 1)
   //Print("Новый бар");
   
   if(open[1] > close[1])
   {
      Print("Dn");
   }
   else if(open[1] < close[1])
   {
      Print("Up");
   }

return(rates_total);

Questo codice mostra sempre lo stesso messaggio, non importa quale candela sia stata chiusa.
Ho capito che devo ricalcolare la candela attraverso un ciclo ?
Per favore, consigliatemi, gente!

 
Taras Slobodyanik:

Perché prendere in giro così un programmatore inesperto?

Cosa succede se viene caricata una storia mancata e la differenza è maggiore di 1? Non ci importa molto, saltiamo una barra... pensiamoci, una in più, una in meno. E senza spiegazioni perché dovremmo dare il codice? Vedi cosa ottieni alla fine?

 
Alexey Viktorov:

Perché prendere in giro così un programmatore inesperto?

Cosa succede se viene caricata una storia mancata e la differenza è maggiore di 1? Non ci importa molto, saltiamo una barra... pensiamoci, una in più, una in meno. E senza spiegazioni perché dovremmo dare il codice? Vedi cosa ottieni alla fine?

Alexei, dimmi la strada giusta. Per favore.
 
Alexey Viktorov:

Perché prendere in giro così un programmatore inesperto?

Cosa succede se viene caricata una storia mancata e la differenza è maggiore di 1? Non ci importa molto, saltiamo una barra... pensiamoci, una in più, una in meno. E senza spiegazioni perché dovremmo dare il codice? Vedi cosa ottieni alla fine?

È ovvio).

Se è caricato, sarà più di 1 e non èuna nuova barra, perché tenerne traccia, non esiste nel problema.

 
m-r LSV:

Potete dirmi la direzione dell'ultima candela chiusa quando si apre una barra?

Questo codice mostra sempre lo stesso messaggio, non importa quale candela sia stata chiusa.
Ho capito che devo ricalcolare la candela attraverso un ciclo ?
Per favore, consigliatemi, gente!

perché non ci sono parentesi.

if(rates_total - prev_calculated == 1)
   {
   //Print("Новый бар");
   if(open[1] > close[1])
        {
        Print("Dn");
        }
   else if(open[1] < close[1])
        {
        Print("Up");
        }
   }
 
m-r LSV:

Stoleggendo bene?

Sì, proprio così.

m-r LSV:

L'apertura della candela è ritardata di 9-12 secondi.
Potreste dirmi se questa è la prima spunta?

Per me è estremamente importante fare i calcoli ed eseguire qualsiasi azione al primo tick di una nuova candela.


Unanuova candela si forma sul primo tick.

Per controllare, potete chiedere le zecche

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
 {
  MqlTick tick[];
  if(prev_calculated > 0 && rates_total > prev_calculated)
   {
    if(CopyTicks(_Symbol, tick, COPY_TICKS_ALL, 0, 2) <= 0)
      Print("ERR ", GetLastError());
    else
      ArrayPrint(tick);
   }

  return(rates_total);
 }

e vedere che l'ultimo tick appartiene alla candela corrente e il tick precedente, rispettivamente, alla candela precedente.

2021.06.02 17:50:59.311 00 (EURUSD,M1)                   [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
2021.06.02 17:50:59.311 00 (EURUSD,M1)  [0] 2021.06.02 17:50:58 1.22005 1.22007 0.0000        0 1622656258958       4       0.00000
2021.06.02 17:50:59.311 00 (EURUSD,M1)  [1] 2021.06.02 17:51:00 1.22004 1.22010 0.0000        0 1622656260655       6       0.00000
2021.06.02 17:51:58.741 00 (EURUSD,M1)                   [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
2021.06.02 17:51:58.741 00 (EURUSD,M1)  [0] 2021.06.02 17:51:59 1.22021 1.22026 0.0000        0 1622656319887       6       0.00000
2021.06.02 17:51:58.741 00 (EURUSD,M1)  [1] 2021.06.02 17:52:00 1.22020 1.22025 0.0000        0 1622656320080       6       0.00000

Per esempio, sulla mia demo si apre senza alcun ritardo.

Ma su una coppia meno liquida, c'è un ritardo di 1 secondo

2021.06.02 17:55:59.742 00 (CADJPY,M1)                   [time]  [bid]  [ask] [last] [volume]    [time_msc] [flags] [volume_real]
2021.06.02 17:55:59.742 00 (CADJPY,M1)  [0] 2021.06.02 17:55:59 90.881 90.885  0.000        0 1622656559379       2         0.000
2021.06.02 17:55:59.742 00 (CADJPY,M1)  [1] 2021.06.02 17:56:01 90.882 90.887  0.000        0 1622656561076       6         0.000
 
Taras Slobodyanik:

è ovvio)

Se è caricato, sarà più di 1, e non èuna Nuova Barra, perché tenerne traccia, non c'è una cosa simile nel compito.

Dove sta scritto che non ci può essere un sottocarico di storia insieme alla nuova barra?
 
Taras Slobodyanik:

perché non ci sono parentesi

Non ha aiutato :(

2021.06.02 17:54:09.465 Test (Volatility 10 Index,M1)      Up
2021.06.02 17:55:09.439 Test (Volatility 10 Index,M1)      Up
2021.06.02 17:56:09.686 Test (Volatility 10 Index,M1)      Up
2021.06.02 17:57:09.471 Test (Volatility 10 Index,M1)      Up
2021.06.02 17:58:09.586 Test (Volatility 10 Index,M1)      Up