Ошибки, баги, вопросы - страница 3030

 
Igor Makanu:

мы не можем себе позволить, т.к. терминал не будет формировать исторические данные онлайн на "старшем ТФ"

тут, в общем, нужно какое-либо допущение:

- или мы самостоятельно строим OHLC внутри индикатора

- или терминал нам строит самостоятельно OHLC


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


такой код попробуйте в своем втором индикаторе:

Ваш код будет молотить расчеты на каждом тике, мне это не интересно, я даже запускать не буду. Мне нужно делать расчет только ОДИН раз на каждом баре, на всех используемых индикаторах, а не на каждом тике все используемые индикаторы.

 
Andrey Dik:

Ваш код будет молотить расчеты на каждом тике, мне это не интересно, я даже запускать не буду. Мне нужно делать расчет только ОДИН раз на каждом баре, на всех используемых индикаторах, а не на каждом тике все используемые индикаторы.

мой код будет "молотить на каждом тике" только Ваш индикатор №1, где у Вас же прописано :

 if (rates_total == prev_calculated) return rates_total;

это позволит терминалу самостоятельно строить "старший ТФ"

по мне - это "дешевле", чем производить полный перерасчет индикатора №1 , что происходит в Вашем коде при синхронизации истории на "старшем ТФ"

 
Andrey Dik:

Андрей, запусти код, пожалуйста... только ты не начинай, а? с тобой бодаться я не смогу.

замени

if (SeriesInfoInteger (Symbol (), OldTF, SERIES_SYNCHRONIZED))
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
        Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
        return 0;
      }
   }
   else 
   {
     Print ("Период ", OldTF, " не синхронизирован.");
     return 0;
   }

на

if (SeriesInfoInteger (Symbol (), OldTF, SERIES_SYNCHRONIZED))
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
        Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
        return prev_calculated;
      }
   }
   else 
   {
     Print ("Период ", OldTF, " не синхронизирован.");
     return prev_calculated;
   }

и протестируй.

 
Igor Makanu:

мой код будет "молотить на каждом тике" только Ваш индикатор №1, где у Вас же прописано :

это позволит терминалу самостоятельно строить "старший ТФ"

по мне - это "дешевле", чем производить полный перерасчет индикатора №1 , что происходит в Вашем коде при синхронизации истории на "старшем ТФ"

да, но почему прев калк сбрасывается на младшем ТФ?

 
Andrey Dik:

да, но почему прев калк сбрасывается на младшем ТФ?

потому что return 0;
 
Andrey Dik:

да, но почему прев калк сбрасывается на младшем ТФ?

много вариантов, мы же реализацию не знаем


по МТ4 в прошлом году было похожее обсуждение кто то из разработчиков (кажется Слава) сказал, что каждое обращение к "старшему ТФ" инициирует синхронизацию данных если это требуется....

думаю что и в МТ5 терминал самостоятельно строит ТФ при необходимости, но если были сетевые задержки или ..... реализацию не знаем?... то терминал прежде чем отдать данные индикатору на старшем ТФ производит синхронизацию историческим данных с сервером, когда это происходит моментально, а когда, может быть, и долго , вот тогда возможно и будет прев_калкулайтед = 0

 
Igor Makanu:

много вариантов, мы же реализацию не знаем

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

 
Andrey Dik:

вы ж подтверждаете мои слова, товарисч.

Я …кодеру не товарищ. Это не подтверждение, а подсказка, не надо возвращать 0. От этого все ваши проблемы. Вы сами вызываете полный пересчёт индикатора.

 


prev_calculated вообще то не увеличивается, он всегда будет такой как мы вернем в конце расчета 

return(rates_total);


т.е. что вернули по выходу из OnCalculated() то и получим на следующем тике в prev_calculated   (за исключением prev_calculated  == 0    , это терминал делает при запуске индикатора или при синхронизации ТФ......)


Andrei Trukhanovich:

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

ну я и пишу ему об этом второй день - возьми индикаторы от  Младен и изучи - работают же , и без какой там сложной синхронизации между ТФ, а тут вот ... экономим ресурсы и не даем терминалу формировать вызываемые ТФ

 
Andrei Trukhanovich:

замени

на

и протестируй.

Не подсказывать… Всё равно не поверит.