Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1489

 
m-r LSV:

¿Estoy leyendo bien?

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

Gracias, ahora tengo esto

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);

	          
 

¿Puede decirme la dirección de la última vela cerrada al abrir 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);

Este código siempre muestra el mismo mensaje, independientemente de la vela que se haya cerrado.
Entiendo que tengo que volver a calcular la vela a través de un bucle ?
¡Por favor, aconsejen, gente!

 
Taras Slobodyanik:

¿Por qué te burlas así de un programador inexperto?

¿Qué pasa si se carga una historia perdida y la diferencia es mayor que 1? Realmente no nos importa, saltemos un bar... pensemos en ello, uno más, uno menos. Y sin explicaciones, ¿por qué deberíamos dar el código? ¿Ves lo que obtienes al final?

 
Alexey Viktorov:

¿Por qué te burlas así de un programador inexperto?

¿Qué pasa si se carga una historia perdida y la diferencia es mayor que 1? Realmente no nos importa, saltemos un bar... pensemos en ello, uno más, uno menos. Y sin explicaciones, ¿por qué deberíamos dar el código? ¿Ves lo que obtienes al final?

Alexei, dime el camino correcto. Por favor.
 
Alexey Viktorov:

¿Por qué te burlas así de un programador inexperto?

¿Qué pasa si se carga una historia perdida y la diferencia es mayor que 1? Realmente no nos importa, saltemos un bar... pensemos en ello, uno más, uno menos. Y sin explicaciones, ¿por qué deberíamos dar el código? ¿Ves lo que obtienes al final?

Es obvio).

Si está cargada, será más de 1 y no esuna barra nueva, para qué llevar la cuenta, no hay tal cosa en el problema.

 
m-r LSV:

¿Puede decirme la dirección de la última vela cerrada al abrir una barra?

Este código siempre muestra el mismo mensaje, independientemente de la vela que se haya cerrado.
Entiendo que tengo que volver a calcular la vela a través de un bucle ?
¡Por favor, aconsejen, gente!

porque no hay paréntesis.

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:

¿Estoy leyendo bien?

Sí, así es.

m-r LSV:

La apertura de la vela se retrasa entre 9 y 12 segundos.
¿Podría decirme si es la primera garrapata?

Para mí es extremadamente importante hacer cálculos y realizar cualquier acción en el primer tick de una nueva vela.


Se formauna nueva vela en el primer tick.

Para comprobarlo, puedes pedir las garrapatas

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);
 }

y ver que el último tick pertenece a la vela actual y el anterior, respectivamente, a la vela anterior.

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

Por ejemplo, en mi demo se abre sin ningún retraso.

Pero en un par menos líquido, hay un retraso de 1 segundo

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:

es obvio)

Si está cargada, será más de 1, y no esuna Nueva Barra, para qué llevar la cuenta, no existe en la tarea.

¿Dónde está escrito que junto a la nueva barra no puede haber subcarga de historial?
 
Taras Slobodyanik:

porque no hay paréntesis

No ayudó :(

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