Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления - страница 13

 
Andrey Kaunov #:



У вас какая то странная запись кода.

datetime arr_time=0, i_time=0;

for(int i=0; i_time<=0; i++) 
{
    arr_time=time[i];
      
    ResetLastError();
      
    i_time = iTime(_Symbol,PERIOD_CURRENT,rates_total-1-i);
    printf("i: %d   rates_total-%d: %d   time: %I64d   iTime: %I64d   Error: %d", i, i, rates_total-i, arr_time, i_time, GetLastError());
}

Почему вы в условие цикла, вставляете datetime значение? а не значение просчитываемых баров

 
Roman #:

У вас какая то странная запись кода.


Почему вы в условие цикла, вставляете datetime значение? а не значение просчитываемых баров

Потому, что он хочет найти момент, когда i_Time получит какое-нибудь значение.

 
PapaYozh #:

Потому, что он хочет найти момент, когда i_Time получит какое-нибудь значение.

Из последнего на предыдущей странице поста берите код. Там нагляднее, с датами

Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления - В новом обновлении терминала не работает функция iTime
Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления - В новом обновлении терминала не работает функция iTime
  • 2023.01.31
  • www.mql5.com
как только появляется новый бар сверх количества в истории удаляется. количество видимых индикатору баров сбрасывалось до MAXBARS. А на графике при появлении каждого нового бара сверх значения MAXBARS. Это индикатор видит и считает бары, которых в окне графика уже нет
 
PapaYozh #:

Потому, что он хочет найти момент, когда i_Time получит какое-нибудь значение.

Ну тогда логично, что будет ошибка, выход за пределы буфера.
Запрашивать не подгруженные значения которых нет.

Установил макс баров в окне Unlimited

2023.02.06 16:12:42.910 FORUM (EURUSD,M1)       i: 0   rates_total-0: 8659837   time: 31798800   iTime: 31798800   Error: 0
2023.02.06 16:12:44.676 FORUM (EURUSD,M1)       i: 0   rates_total-0: 8659837   time: 31798800   iTime: 31798800   Error: 0
2023.02.06 16:12:44.906 FORUM (EURUSD,M1)       i: 0   rates_total-0: 8659837   time: 31798800   iTime: 31798800   Error: 0
2023.02.06 16:12:45.001 FORUM (EURUSD,M1)       i: 0   rates_total-0: 8659837   time: 31798800   iTime: 31798800   Error: 0
2023.02.06 16:12:45.410 FORUM (EURUSD,M1)       i: 0   rates_total-0: 8659837   time: 31798800   iTime: 31798800   Error: 0
2023.02.06 16:12:45.549 FORUM (EURUSD,M1)       i: 0   rates_total-0: 8659837   time: 31798800   iTime: 31798800   Error: 0
2023.02.06 16:12:45.633 FORUM (EURUSD,M1)       i: 0   rates_total-0: 8659837   time: 31798800   iTime: 31798800   Error: 0
2023.02.06 16:12:45.713 FORUM (EURUSD,M1)       i: 0   rates_total-0: 8659837   time: 31798800   iTime: 31798800   Error: 0
2023.02.06 16:12:45.809 FORUM (EURUSD,M1)       i: 0   rates_total-0: 8659837   time: 31798800   iTime: 31798800   Error: 0
2023.02.06 16:12:46.179 FORUM (EURUSD,M1)       i: 0   rates_total-0: 8659837   time: 31798800   iTime: 31798800   Error: 0
2023.02.06 16:12:47.629 FORUM (EURUSD,M1)       i: 0   rates_total-0: 8659837   time: 31798800   iTime: 31798800   Error: 0
2023.02.06 16:12:47.737 FORUM (EURUSD,M1)       i: 0   rates_total-0: 8659837   time: 31798800   iTime: 31798800   Error: 0
2023.02.06 16:12:48.074 FORUM (EURUSD,M1)       i: 0   rates_total-0: 8659837   time: 31798800   iTime: 31798800   Error: 0
2023.02.06 16:12:48.147 FORUM (EURUSD,M1)       i: 0   rates_total-0: 8659837   time: 31798800   iTime: 31798800   Error: 0
2023.02.06 16:12:49.746 FORUM (EURUSD,M1)       i: 0   rates_total-0: 8659837   time: 31798800   iTime: 31798800   Error: 0


Вообще для определения  начальной даты есть ENUM

datetime firtsDate = (datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_FIRSTDATE);
 
Roman #:

Ну тогда логично, что будет ошибка, выход за пределы буфера.
Запрашивать не подгруженные значения которых нет.

Установил макс баров в окне Unlimited


Вообще для определения  начальной даты есть ENUM

Предполагается что значение i_time найдётся раньше, чем выйдем за границы буфера. Но специально для вас поправил код ))

И речь идет не об определении начальной даты, а о расчёте индикатора с использованием функций iTime, iOpen и других из этой серии.

 
Andrey Kaunov #:

Предполагается что значение i_time найдётся раньше, чем выйдем за границы буфера. Но специально для вас поправил код ))

И речь идет не об определении начальной даты, а о расчёте индикатора с использованием функций iTime, iOpen и других из этой серии.

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[])
{
   ArraySetAsSeries(time, true);
   
   //-------------------------------------------------------------------------
   //Расчёт и проверка количества просчитываемых баров
   int limit = rates_total-prev_calculated;
  
   if(limit > 1) 
      limit = rates_total-1;
      
      
   datetime arr_time=0, i_time=0;
   
   //-------------------------------------------------------------------------
   //Расчёт индикатора
   //i>0  расчёт на каждом баре
   //i>=0 расчет на каждом тике
   for(int i=limit; i>0 && !_StopFlag; i--)
   {   
      arr_time = time[i];
         
      ResetLastError();
         
      i_time = iTime(_Symbol, PERIOD_CURRENT, i);
      printf("i: %d   arr_time: %I64d   i_time: %I64d   Error: %d", i, arr_time, i_time, GetLastError());
      
   }
   
   return(rates_total);
}
2023.02.06 16:49:40.960 FORUM (EURUSD,M1)       i: 4818529   arr_time: 1264463280   i_time: 1264463280   Error: 0
2023.02.06 16:49:40.960 FORUM (EURUSD,M1)       i: 4818528   arr_time: 1264463340   i_time: 1264463340   Error: 0
2023.02.06 16:49:40.960 FORUM (EURUSD,M1)       i: 4818527   arr_time: 1264463400   i_time: 1264463400   Error: 0
2023.02.06 16:49:40.960 FORUM (EURUSD,M1)       i: 4818526   arr_time: 1264463460   i_time: 1264463460   Error: 0
2023.02.06 16:49:40.960 FORUM (EURUSD,M1)       i: 4818525   arr_time: 1264463520   i_time: 1264463520   Error: 0
2023.02.06 16:49:40.960 FORUM (EURUSD,M1)       i: 4818524   arr_time: 1264463580   i_time: 1264463580   Error: 0

Так подойдёт?
 
Roman #:


Установил макс баров в окне Unlimited

Если у вас  макс баров в окне Unlimited, возможно и не будет таких ситуаций, что iTime вернёт 0.

Но поставьте фиксированное значение. И начнутся неприятности.

К слову, функция iBars возвращает то же значение что и rates_total. При том что iTime не видит ушедшие в историю бары. Тогда, как iBars показывает, что они есть.

 
Roman #:

Так подойдёт?
Запустите мой код, и подождите появления нового бара
 
Счет неттинг или хедж это все же пользователь должен решать а не быть на стороне сервера.
 
Andrey Kaunov #:
Запустите мой код, и подождите появления нового бара

Запустил. Какую то фигню вы нагородили.
На каждом тике срабатывает цикл  в 41 итерацию.

2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 0   rates_total-0: 1000040   time: 1591095000   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 1   rates_total-1: 1000039   time: 1591095060   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 2   rates_total-2: 1000038   time: 1591095120   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 3   rates_total-3: 1000037   time: 1591095180   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 4   rates_total-4: 1000036   time: 1591095240   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 5   rates_total-5: 1000035   time: 1591095300   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 6   rates_total-6: 1000034   time: 1591095360   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 7   rates_total-7: 1000033   time: 1591095420   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 8   rates_total-8: 1000032   time: 1591095480   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 9   rates_total-9: 1000031   time: 1591095540   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 10   rates_total-10: 1000030   time: 1591095600   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 11   rates_total-11: 1000029   time: 1591095660   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 12   rates_total-12: 1000028   time: 1591095720   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 13   rates_total-13: 1000027   time: 1591095780   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 14   rates_total-14: 1000026   time: 1591095840   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 15   rates_total-15: 1000025   time: 1591095900   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 16   rates_total-16: 1000024   time: 1591095960   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 17   rates_total-17: 1000023   time: 1591096020   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 18   rates_total-18: 1000022   time: 1591096080   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 19   rates_total-19: 1000021   time: 1591096140   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 20   rates_total-20: 1000020   time: 1591096200   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 21   rates_total-21: 1000019   time: 1591096260   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 22   rates_total-22: 1000018   time: 1591096320   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 23   rates_total-23: 1000017   time: 1591096380   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 24   rates_total-24: 1000016   time: 1591096440   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 25   rates_total-25: 1000015   time: 1591096500   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 26   rates_total-26: 1000014   time: 1591096560   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 27   rates_total-27: 1000013   time: 1591096620   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 28   rates_total-28: 1000012   time: 1591096680   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 29   rates_total-29: 1000011   time: 1591096740   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 30   rates_total-30: 1000010   time: 1591096800   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 31   rates_total-31: 1000009   time: 1591096860   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 32   rates_total-32: 1000008   time: 1591096920   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 33   rates_total-33: 1000007   time: 1591096980   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 34   rates_total-34: 1000006   time: 1591097040   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 35   rates_total-35: 1000005   time: 1591097100   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 36   rates_total-36: 1000004   time: 1591097160   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 37   rates_total-37: 1000003   time: 1591097220   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 38   rates_total-38: 1000002   time: 1591097280   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 39   rates_total-39: 1000001   time: 1591097340   iTime: 0   Error: 4401
2023.02.06 17:51:40.230 FORUM (EURUSD,M1)       i: 40   rates_total-40: 1000000   time: 1591097400   iTime: 1591097400   Error: 0



Я вообще не пойму логического смысла, вашего кода )
Вам надо в цикле на старте пробежаться по всей истории или только по крайнему окну?

То что я дал выше, индикатор на старте рассчитывает всю историю.
Если на старте надо рассчитать не всю историю, а только крайнее окно,
замените этот код

   if(limit > 1) 
      limit = rates_total-1;

на этот

   if(limit > 1) 
      limit = rates_total-(rates_total-1440);

На страте посчитает крайние 1440 баров.
Если на М1, то получается сутки.

В общим этим числом регулируем крайнее окно просчитываемых баров на старте.