Time[0] на первом тике иногда глючит. - страница 2

 
Всем спасибо!
 
Taras Slobodyanik:

если rates_total-prev_calculated>1 то это значит что произошло обновление истории, добавилось много новых баров, это значит что нужно пересчитать всё заново (все бары).

И эти новые бары могут появится где угодно, не обязательно в конце истории и последовательно.

давно собирался свой шаблон для индикаторов онлайн проверить, написал такой код:

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[])
  {
//---
   int limit;
    if(prev_calculated == 0) {
      limit = rates_total - 1;    //--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
      Print("limit = ",limit);
   }
   else limit = rates_total - prev_calculated + 1;
//--- return value of prev_calculated for next call
   return(rates_total);
  }

то, что мой шаблон корректно работает при переключении ТФ, при смене счета, при смене торгового инструмента я давно знаю

попробовал отключить сетевую карту в Виндовс, индикатор предварительно бросил на график ТФ М1, включил сетевую карту через минут 5, в логе получил как и при первом вызове индикатора rates_total - 1 , т.е. терминал сбрасывает prev_calculated в ноль и при обрыве связи 

 
Igor Makanu:

давно собирался свой шаблон для индикаторов онлайн проверить, написал такой код:

то, что мой шаблон корректно работает при переключении ТФ, при смене счета, при смене торгового инструмента я давно знаю

попробовал отключить сетевую карту в Виндовс, индикатор предварительно бросил на график ТФ М1, включил сетевую карту через минут 5, в логе получил как и при первом вызове индикатора rates_total - 1 , т.е. терминал сбрасывает prev_calculated в ноль и при обрыве связи 

а при прокрутке чарта назад, когда подгружаются новые бары?
или только идет подгрузка баров (построение истории)
а если есть "дыры" в истории, и они подгружаются

вариантов может быть много, я не надеюсь что бары появляются только в конце и только последовательно

 
Taras Slobodyanik:

а при прокрутке чарта назад, когда подгружаются новые бары?
или только идет подгрузка баров (построение истории)
а если есть "дыры" в истории, и они подгружаются

вариантов может быть много, я не надеюсь что бары появляются только в конце и только последовательно

в MQL4 нет такой подгрузки - я проверял на евро на М1  пишет  limit = 7331680 , что и есть максимально доступная история по евро если установлено большое число в окне настроек, в МТ5 там есть подгрузка


ЗЫ: возможно нужно тесты сделать если ТФ не синхронизирован и дыры в истории и будет подгрузка при прокрутке колесиком - позже проверю, не охота сейчас историю удалять в терминале

 
Igor Makanu:

в MQL4 нет такой подгрузки - я проверял на евро на М1  пишет  limit = 7331680 

как это нет?
открываем М1 на неиспользуемом символе и нажимаем "Home"

и дырки явно видны если не запускать терминал 1-2 месяца
 

вот, кстати, клиент жаловался, что индикатор неправильно рисует - какие-то прямоугольники

1

(это уже я написал коммент)

Д1 загрузился, а Н1 - нет.

 
Taras Slobodyanik:

как это нет?
открываем М1 на неиспользуемом символе и нажимаем "Home"

и дырки явно видны если не запускать терминал 1-2 месяца

проверю сегодня на ноуте, он как раз неделю не включался, но в принципе как говорят береженого....

нужно добавить в мой шаблон примерно так:

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

подумаю еще над этим

 

вот такой шаблон индикатора  будет корректно работать и при переключении ТФ и при подгрузке истории и...:

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[])
  {
//---
   int i,limit=rates_total-prev_calculated+1;               //--- или int limit=rates_total-prev_calculated; - чтобы не пересчитывать бар №1
   if(prev_calculated==0 || limit>1) limit=rates_total-1;   //--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
   for(i=limit; i>=0; i--) 
     { //--- В этом цикле основные вычисления. Таким образом обрабатываться будет только "свежая" информация                       
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

вот такой шаблон индикатора  будет корректно работать и при переключении ТФ и при подгрузке истории и...:

Спасибо, протестирую!

 

В OnCalculate история подгружается за несколько подходов. Первый вопрос, можно ли как то узнать что вся история наконец-то загрузилось?
Второй вопрос, видно что иногда prev_calculated становится 0, это означает что история будет продолжать подгружаться?

        20:15:25.684    Test GBPJPY,M5: initialized
0       20:15:25.684    Test GBPJPY,M5: +++ iBars: 2059 MaxBarsMod1: 528 rates_total: 2059 prev_calculated: 0
0       20:15:25.732    Test GBPJPY,M5: +++ iBars: 2571 MaxBarsMod1: 528 rates_total: 2571 prev_calculated: 0
0       20:15:25.789    Test GBPJPY,M5: +++ iBars: 3083 MaxBarsMod1: 528 rates_total: 3083 prev_calculated: 0
0       20:15:25.790    Test GBPJPY,M5: +++ iBars: 3595 MaxBarsMod1: 528 rates_total: 3595 prev_calculated: 0
0       20:15:25.791    Test GBPJPY,M5: +++ iBars: 4107 MaxBarsMod1: 528 rates_total: 4107 prev_calculated: 0
0       20:15:25.793    Test GBPJPY,M5: +++ iBars: 4619 MaxBarsMod1: 528 rates_total: 4619 prev_calculated: 0
0       20:15:25.793    Test GBPJPY,M5: +++ iBars: 4619 MaxBarsMod1: 528 rates_total: 4619 prev_calculated: 4619
0       20:15:25.854    Test GBPJPY,M5: +++ iBars: 6155 MaxBarsMod1: 529 rates_total: 6155 prev_calculated: 0
0       20:15:25.855    Test GBPJPY,M5: +++ iBars: 6155 MaxBarsMod1: 530 rates_total: 6155 prev_calculated: 6155
0       20:15:25.855    Test GBPJPY,M5: +++ iBars: 6155 MaxBarsMod1: 530 rates_total: 6155 prev_calculated: 6155
0       20:15:25.855    Test GBPJPY,M5: +++ iBars: 6155 MaxBarsMod1: 530 rates_total: 6155 prev_calculated: 6155
0       20:15:25.904    Test GBPJPY,M5: +++ iBars: 7179 MaxBarsMod1: 530 rates_total: 7179 prev_calculated: 0
0       20:15:25.907    Test GBPJPY,M5: +++ iBars: 8203 MaxBarsMod1: 531 rates_total: 8203 prev_calculated: 0
0       20:15:25.908    Test GBPJPY,M5: +++ iBars: 8203 MaxBarsMod1: 532 rates_total: 8203 prev_calculated: 8203
0       20:15:25.908    Test GBPJPY,M5: +++ iBars: 8203 MaxBarsMod1: 532 rates_total: 8203 prev_calculated: 8203
0       20:15:25.972    Test GBPJPY,M5: +++ iBars: 9227 MaxBarsMod1: 532 rates_total: 9227 prev_calculated: 0
0       20:15:25.973    Test GBPJPY,M5: +++ iBars: 9227 MaxBarsMod1: 533 rates_total: 9227 prev_calculated: 9227
0       20:15:26.019    Test GBPJPY,M5: +++ iBars: 9739 MaxBarsMod1: 533 rates_total: 9739 prev_calculated: 0
0       20:15:26.024    Test GBPJPY,M5: +++ iBars: 11314 MaxBarsMod1: 534 rates_total: 11314 prev_calculated: 0
0       20:15:26.025    Test GBPJPY,M5: +++ iBars: 11314 MaxBarsMod1: 535 rates_total: 11314 prev_calculated: 11314
0       20:15:26.025    Test GBPJPY,M5: +++ iBars: 11314 MaxBarsMod1: 535 rates_total: 11314 prev_calculated: 11314
0       20:15:26.025    Test GBPJPY,M5: +++ iBars: 11314 MaxBarsMod1: 535 rates_total: 11314 prev_calculated: 11314
0       20:15:27.227    Test GBPJPY,M5: +++ iBars: 11314 MaxBarsMod1: 535 rates_total: 11314 prev_calculated: 11314
0       20:15:30.241    Test GBPJPY,M5: +++ iBars: 11314 MaxBarsMod1: 535 rates_total: 11314 prev_calculated: 11314