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

 
Aleksei Stepanenko estructura MqlDateTime. Pero en este caso, habrá señales de barras perdidas que no deberían existir.

Por ejemplo:

Se perdió 1 barra el miércoles, iniciada por este símbolo a las 00:30, es decir, se perdió a las 00:00

M30, resultaron ser 47 en un día en lugar de 48. Esto es exactamente lo que necesitamos para identificar


 
Vitaly Muzichenko #:

He aquí un ejemplo:

Se perdió 1 barra el miércoles, iniciada por este símbolo a las 00:30, es decir, se perdió a las 00:00

M30 marco de tiempo, consiguió 47 en el día en lugar de 48. Esto es exactamente lo que tenemos que identificar.


No sé cuál es el camino correcto, pero yo pensaría en esta dirección

      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 #:

He aquí un ejemplo:

Se perdió 1 barra el miércoles, iniciada por este símbolo a las 00:30, es decir, se perdió a las 00:00

M30 marco de tiempo, consiguió 47 en el día en lugar de 48. Esto es exactamente lo que necesitamos para identificar


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

Vitaly Muzichenko #:

Eso es exactamente lo que tenemos que identificar.

Entendido, la cuestión son las falsas alarmas, de las que habrá muchas.

//дата последней свечи
 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 #:
Si 47

Esto es posible, también se puede CopyOpen()

No puedo decidir cómo organizar esto en un bucle a través de toda la historia

 

aún más simple:

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

Esto es posible, también se puede CopyOpen()

No puedo decidir cómo organizar esto en un bucle a través de toda la historia

La hora de apertura de la barra del día cero menos 1 segundo a la apertura de la barra del primer día. Luego, desde la apertura de la primera barra diaria menos 1 segundo hasta la apertura de la segunda barra diaria y así sucesivamente.
 
Vitaly Muzichenko #:

Esto es posible, también se puede CopyOpen()

No puedo decidir cómo organizarlo en un bucle sobre toda la historia

Exactamente (por ejemplo para M30) - si el tiempo entre las aperturas (modulo % 24 horas) de las barras vecinas es más largo que M30 - significa que faltan barras entre ellas.

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

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

 

Gracias a todos, el principio está claro, el problema se ha formalizado.

---

Ahora una pregunta: ¿Qué estoy haciendo mal, todos los caracteres tienen el mismo valor?

#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.D. Terminal MT4, comprobado en dos terminales diferentes en diferentes empresas de corretaje

P.SS. He comprobado en MT5, el resultado es el mismo

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

---

Probablemente estoy haciendo algo mal.

Necesito obtener el "valor de los puntos"

 
Vitaly Muzichenko #:

Gracias a todos, el principio está claro, el problema se ha formalizado.

---

Ahora una pregunta: ¿Qué estoy haciendo mal, todos los caracteres tienen el mismo valor?

Vitaly, aquí es necesario, o bien molestar a los desarrolladores, o bien

Razón de la queja: