код технич. индикатора Parabolic SAR

 

Здравствуйте. Я только недавно прочитал учебник и решил попробывать свои силы в программировании торговых алгоритмов. Решил начать с того, что:

а) прочитать статью Уайлдера про Parabolic System, б) разобраться в коде технического индикатора Parabolic SAR, входящего в состав торг. терминала - https://www.mql5.com/en/code/mt4 и в) подкорректировав код индикатора, написать на его основе его показаний свой первый пробный эксперт - как проба пера.

  Я не уверен, насколько корректно просить знающих людей разъяснить детали кода, но тем не менее, есть два момента, которые остались пока для меня неясными:

 1. В чем смысл определенной в программе флага   static bool first = true; ? Ведь во время первого исполнения программы значение counted_bars будет 0 и следовательно запустится на исполнение первый оператор if и вместе с этим значение флага first станет false до конца использования индикатора в окне, и  т.о. переменная не будет играть никакой роли в дальнейшем исполнении программы.

 2. Корректно ли в целом составлена программа? Здесь счетчик i = Bars - 2; не зависит от параметра counted_bars? 

Можно ли считать коды технич. индикаторов, представленные в разделе Code Base, проверенными и безошибочными?

 Заранее спасибо за ответы и советы... 

 

1. Подробно не смотрел - не могу добросовестно ответить, но такая конструкция используется обычно, чтобы разделить момент первого запуска индикатора и моменты пересчетов в процессе работы (докачка истории, разрывы связи и пр. - обнуление CountedBars() ) в теле ф-ии start().

2. Нет. В программах, идущих в поставке МТ, встречаются ошибки. Неоднократно отмечал.

 
Svinozavr:

1. Подробно не смотрел - не могу добросовестно ответить, но такая конструкция используется обычно, чтобы разделить момент первого запуска индикатора и моменты пересчетов в процессе работы (докачка истории, разрывы связи и пр. - обнуление CountedBars() ) в теле ф-ии start().

2. Нет. В программах, идущих в поставке МТ, встречаются ошибки. Неоднократно отмечал.



Спасибо за ответы. То есть для уверенности в правильности кода индикаторы лучше перепроверять?

А если индекс i, использующися в пересчете итераций цикла while в индикаторе не зависит от counterBars( ), то есть является не записью вида 

i=Bars-Counted_bars-1;

а например,  i=Bars-2;

то это ошибочный алгоритм, верно?

 
IlshatG:



Спасибо за ответы. То есть для уверенности в правильности кода индикаторы лучше перепроверять?

А если индекс i, использующися в пересчете итераций цикла while в индикаторе не зависит от counterBars( ), то есть является не записью вида

i=Bars-Counted_bars-1;

а например, i=Bars-2;

то это ошибочный алгоритм, верно?

Нет. В данном случае - все верно. Это сделано для расчета начальных значений индикатора и относится только к двум самым старым барам. Основной цикл пересчета начинается дальше.

Параболик работает абсолютно корректно. Другое дело, что его код можно было сделать оптимальней и более удобоваримым для чтения, а так - все ок.

))) Вы, вообще, зря взяли его для разбора - сложночитаемый код. Начните с чего-нибудь попроще. Например, с MACD.

 
Посмотрите здесь. Там есть указания на нектр. ошибки в кодах.