Еще раз о направлении пересчета в цикле

 

Постоянно вижу ошибки в кодах форумчан. Это касается как расчетов по iXXX(), так и по расчету на массиве - iXXXOnArray().

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

void start() {
   int limit=Bars-IndicatorCounted()-1;  
   if(limit>1) limit=Bars-1; 
   for(int i=0; i<limit; i++) Ind[i]=iMA(NULL,0,MA,0,Method,Price, i);
  }

Да чего там у форумчан! Эти же ошибки я заметил и в кодах стандартных индикаторов. Например, в Стохастике. Там сигнальная линия считается по iMAOnArray() в прямом цикле пересчета.

//---- signal line is simple movimg average
   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MainBuffer,Bars,DPeriod,0,MODE_SMA,i);

Разумеется, оффлайн все ок, но как только начинают поступать тики...

Я даже от разработчиков читал тут на форуме, что направление пересчета для iXXXOnArray, дескать, не играет роли. Чтоб не быть голословным, я прикрепил индикатор, где рассчитывается МА по массиву, и, в зависимости от параметра DirOfCount (true - прямой пересчет), меняется направление пересчета. Киньте этот индикатор на график вместе со стандартной МА и убедитесь, что они будут совпадать только на истории. Если же поставить обратный пересчет - все ок.

   if(DirOfCount) // прямой пересчет
      for(i=0; i<limit; i++) Ind[i]=iMAOnArray(price,0,MA,0,Method, i);
   else // обратынй пересчет
      for(i=limit;i>=0; i--) Ind[i]=iMAOnArray(price,0,MA,0,Method, i);
  }

Вот так выглядит расклад, когда после прикрепления к графику поступило три новых бара: // красный - с прямым пересчетом, синий - стандартный SMA(3)

Файлы:
 

Согласен. Сам так же поступаю. Расчет только из прошлого в настоящее. Но похоже подобные вещи скрыты в алгоритмах стандартных индикаторов.

 
Svinozavr >>:

Постоянно вижу ошибки в кодах форумчан. Это касается как расчетов по iXXX(), так и по расчету на массиве - iXXXOnArray().

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

Да чего там у форумчан! Эти же ошибки я заметил и в кодах стандартных индикаторов. Например, в Стохастике. Там сигнальная линия считается по iMAOnArray() в прямом цикле пересчета.

Разумеется, оффлайн все ок, но как только начинают поступать тики...

Я даже от разработчиков читал тут на форуме, что направление пересчета для iXXXOnArray, дескать, не играет роли. Чтоб не быть голословным, я прикрепил индикатор, где рассчитывается МА по массиву, и, в зависимости от параметра DirOfCount (true - прямой пересчет), меняется направление пересчета. Киньте этот индикатор на график вместе со стандартной МА и убедитесь, что они будут совпадать только на истории. Если же поставить обратный пересчет - все ок.

Вот так выглядит расклад, когда после прикрепления к графику поступило три новых бара: // красный - с прямым пересчетом, синий - стандартный SMA(3)

Узнаю брата Колю (с) 12 стульев.

Еслиб вы знали уважаемый Пётр сколько чашек кофе я разбил об стену изза это мелочи, бессоные ночи,

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

Вот и приходиться вместо встроенных делать такие же но более медленные функции зато работающие правильно.

 
Vinin >>:

Согласен. Сам так же поступаю. Расчет только из прошлого в настоящее. Но похоже подобные вещи скрыты в алгоритмах стандартных индикаторов.


Да. Но не все (как постоянно убеждаешься) об этом знают. Более того, в самих кодах стандартных индикаторов, осененных авторитетом разработчиков и по идее дОлжных служить примером для правильного кодирования, есть эти ошибки. А это уже - разгильдяйство, граничащее по квалификации с диверсией! )))
Впрочем, там и без этого в этих кодах ошибок хватает. Например, неправильно считается смещение в Bollinger's Bands (Bands.mq4) и еще много чего. Но это уже др.тема. Да и кого это волнует? Все равно 99.(9)% убеждены в том, что ТА не работает. Даже, судя по подходу к корректности "эталонных" кодов, так думают и сами разработчики. Бугагага!!!)))
 
Urain >>:

Узнаю брата Колю (с) 12 стульев.

Еслиб вы знали уважаемый Пётр сколько чашек кофе я разбил об стену изза это мелочи, бессоные ночи,

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

Вот и приходиться вместо встроенных делать такие же но более медленные функции зато работающие правильно.

So do I.))) Вернее - did. В свое время просто-таки взял в себя в руки и решил разобраться - как корректно использовать встр. индикаторы по массиву. Вроде выяснил...

===
"Золотой теленок" вы, наверно, имели ввиду.

 
Svinozavr писал(а) >>

Да и кого это волнует? Все равно 99.(9)% убеждены в том, что ТА не работает.

А Вы убеждены в обратном?
Причина обращения: