Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1489

 
m-r LSV:

Правильно я понимаю ?

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

Спасибо, теперь у меня так

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

	          
 

Подскажите пожалуйста, при открытии бара нужно определить направление последней закрытой свечи

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

Такой код постоянно выдает одно и тоже сообщение, независимо от того какая свеча была.
Я так понимаю, что нужно через цикл как то пересчитывать свечи ?
Подскажите пожалуйста, люди добрые !

 
Taras Slobodyanik:

Ну зачем так издеваться над не опытным программистом?

А если подгрузилась пропущенная история и разница больше 1? Да нам ведь пофигу, ну пропустим один бар… подумаешь, один больше — один меньше. Да и без пояснений зачем давать код? Посмотри что в итоге получилось?

 
Alexey Viktorov:

Ну зачем так издеваться над не опытным программистом?

А если подгрузилась пропущенная история и разница больше 1? Да нам ведь пофигу, ну пропустим один бар… подумаешь, один больше — один меньше. Да и без пояснений зачем давать код? Посмотри что в итоге получилось?

Алексей , подскажите как правильно. Пожалуйста.
 
Alexey Viktorov:

Ну зачем так издеваться над не опытным программистом?

А если подгрузилась пропущенная история и разница больше 1? Да нам ведь пофигу, ну пропустим один бар… подумаешь, один больше — один меньше. Да и без пояснений зачем давать код? Посмотри что в итоге получилось?

очевидно жеж)

если подгрузилась то будет больше 1, и это не Новый бар, зачем это отслеживать, в задаче такого нет.

 
m-r LSV:

Подскажите пожалуйста, при открытии бара нужно определить направление последней закрытой свечи

Такой код постоянно выдает одно и тоже сообщение, независимо от того какая свеча была.
Я так понимаю, что нужно через цикл как то пересчитывать свечи ?
Подскажите пожалуйста, люди добрые !

потому что скобок нет.

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:

Правильно я понимаю ?

Да правильно.

m-r LSV:

Открытие свечи происходит с задержкой в 9-12 сек.
Подскажите пожалуйста, это первый тик приходит ?

Мне просто крайне важно, производить вычисления, и производить какие либо действия на первом тике новой свечи. 


Новая свеча формируется исключительно на первом тике.

Для проверки можете запросить тики

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

и увидеть, что последний тик принадлежит текущей свече, а предыдущий тик, соответственно предыдущей свече.

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

Вот у меня на демке получается открытие без задержек.

А вот на менее ликвидной паре, есть задержка на 1 секунду

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:

очевидно жеж)

если подгрузилась то будет больше 1, и это не Новый бар, зачем это отслеживать, в задаче такого нет.

Где написано, что вместе с новым баром не может быть подгрузки истории?
 
Taras Slobodyanik:

потому что скобок нет

Не помогло :(

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
Причина обращения: