Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1750

 
Aleksei Stepanenko estrutura MqlDateTime. Mas, neste caso, haverá sinais de barras perdidas que não deveriam existir.

Por exemplo:

Faltou 1 bar na quarta-feira, iniciado por este símbolo às 00:30, ou seja, perdido às 00:00

M30, acabou sendo 47 em um dia, ao invés de 48. Isto é exatamente o que precisamos identificar


 
Vitaly Muzichenko #:

Aqui está um exemplo:

Faltou 1 bar na quarta-feira, iniciado por este símbolo às 00:30, ou seja, perdido às 00:00

M30, conseguiu 47 no dia ao invés de 48. Isto é exatamente o que precisamos identificar.


Eu não sei o caminho certo, mas eu pensaria nesta direção

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

Aqui está um exemplo:

Faltou 1 bar na quarta-feira, iniciado por este símbolo às 00:30, ou seja, perdido às 00:00

M30, conseguiu 47 no dia ao invés de 48. Isto é exatamente o que precisamos identificar


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

Vitaly Muzichenko #:

É exatamente isso que precisamos identificar.

Entendi, a questão são os falsos alarmes, dos quais haverá muitos.

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

Isto é possível, você também pode CopyOpen()

Não posso decidir como organizar isto em um loop através de toda a história

 

ainda mais simples:

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

Isto é possível, você também pode CopyOpen()

Não posso decidir como organizar isto em um loop através de toda a história

O tempo de abertura da barra de dia zero menos 1 segundo para a abertura da barra do primeiro dia. Depois, desde a abertura do primeiro bar diário menos 1 segundo até a abertura do segundo bar diário e assim por diante.
 
Vitaly Muzichenko #:

Isto é possível, você também pode CopyOpen()

Não consigo decidir como organizá-lo em um loop ao longo de toda a história

Exatamente (por exemplo, para M30) - se o tempo entre as aberturas (modulo % 24 horas) das barras vizinhas for maior que M30 - significa que faltam barras entre elas.

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

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

 

Obrigado a todos vocês, o princípio é claro, o problema foi formalizado.

---

Agora uma pergunta: O que estou fazendo de errado, todos os personagens têm o mesmo 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.S. Terminal MT4, verificado em dois terminais diferentes em empresas de corretagem diferentes

P.SS. Eu verifiquei no MT5, o resultado é o mesmo

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

---

Eu provavelmente estou fazendo algo errado!

Preciso obter "Ponto de valor".

 
Vitaly Muzichenko #:

Obrigado a todos vocês, o princípio é claro, o problema foi formalizado.

---

Agora uma pergunta: O que estou fazendo de errado, todos os personagens têm o mesmo valor?

Vitaly, aqui é necessário ou incomodar os desenvolvedores, ou