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

 
Alexey Viktorov:

Исправьте свой код, добавьте распечатку

и когда увидите своих тараканов, сверните монитор в трубочку и засуньте… сами знаете куда.

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

 
mktr8591:

Спасибо,

я спрашивал про другой свой пост, еще раз ссылка : https://www.mql5.com/ru/forum/1111/page3028#comment_22557528

Не совсем понял ваш код. Что должно происходить после "return 0;" на следующем вызове OnCalculate?

возвращаем 0, тем самым заявляя, что мы ещё ничего не посчитали и прев калк не будет увеличиваться на 1 на следующем баре.

то есть, будем на баре, на котором начали запрашивать данные со старшего тф до тех пор, пока не вернём return(rates_total)

[Удален]  
Andrey Dik:

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

1. Спасибо всем - я стал маленько более грамотен в индикаторах )))

2. Андрей, если кто-то не понимает твоих измышлений (и я в том числе), то это значит только одно: ТЫ не правильно рисуешь картинку! Точнее - ты её рисуешь так, что многие не понимают...

 
Andrey Dik:

возвращаем 0, тем самым заявляя, что мы ещё ничего не посчитали и прев калк не будет увеличиваться на 1 на следующем баре.

то есть, будем на баре, на котором начали запрашивать данные со старшего тф до тех пор, пока не вернём return(rates_total)

из хелпа : "Параметр prev_calculated при вызове функции содержит значение, которое вернула функция OnCalculate() на предыдущем вызове."
 
mktr8591:
из хелпа : "Параметр prev_calculated при вызове функции содержит значение, которое вернула функция OnCalculate() на предыдущем вызове."

да в хелпе много чего написано, но не всегда понятно, к сожалению (не в укор разработчикам), приходиться учится, учится, учится. но. эта ветка потому и существует, что обнаруживаются порой вещи, которые не согласуются ни со справкой, ни со здравым смыслом, А100 наш герой, потому что залазит даже туда, куда бы никто не стал залазить по своей воле.))

 
Сергей Таболин:

1. Спасибо всем - я стал маленько более грамотен в индикаторах )))

2. Андрей, если кто-то не понимает твоих измышлений (и я в том числе), то это значит только одно: ТЫ не правильно рисуешь картинку! Точнее - ты её рисуешь так, что многие не понимают...

истина важнее. не всегда и не всем это бывает понятно, к сожалению.

 

Andrey Dik:

возвращаем 0, тем самым заявляя, что мы ещё ничего не посчитали и прев калк не будет увеличиваться на 1 на следующем баре.

Тогда return(rates_total) должна увелилить prev_calc на  rates_total?

 
Andrey Dik:

возвращаем 0, тем самым заявляя, что мы ещё ничего не посчитали и прев калк не будет увеличиваться на 1 на следующем баре.

сам обнуляет расчет и жалуется что он обнуляется )

 
Andrey Dik:

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

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

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

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

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


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


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

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[])
{
   double buff [];
   if(prev_calculated == 0)
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
         Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
         return 0;
      }
   }
   else
   {
      if (rates_total == prev_calculated)
      {
         if(CopyBuffer (Handle, 0, 0, 1, buff)<0) return 0;
         return rates_total;
      }
   }

   ulong t = GetMicrosecondCount ();

...... далее без изменений
 
Andrei Trukhanovich:

сам обнуляет расчет и жалуется что он обнуляется )

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