РАЗРАБОТЧИКАМ. О СЕРЬЁЗНЫХ ОШИБКАХ В MQL.

 
РАЗРАБОТЧИКАМ. О СЕРЬЁЗНЫХ ОШИБКАХ В MQL.
Здравствуйте !

В процессе написания собственного эксперта в MetatTrader 3.14 я натолкнулся на некоторое несоответсвие: так, при запуске моего эксперта, значения индикатороа iSAR( 0.02, 0.2, 0 ) и Close отличаются от значений этих параметров, отображаемых на графике, разумеется для одинаковых баров.

В качестве иллюстрации я хотел бы привести текст простейшего тестового эксперта, отображающего в журнале время текущего бара, а также SAR и Close для этого бара.

/*[[
Name := Close Test Expert
Author := Copyright © 2002, Company
Link := www.company.com/http://www.company.com/ /> Lots := 1.00
Stop Loss := 0
Take Profit := 0
Trailing Stop := 0
]]*/

Variable: prevtime(0), SARCurrent(0);

If prevtime = Time Then exit;
prevtime = Time;

SARCurrent = iSAR(0.02, 0.2, 0);

print(TimeToStr(Time), " SAR: ", SARCurrent , " Close:", Close);

Эксперт, запущенный на графике EURUSD,H4 вычисляет значение SAR, отличное от отображаемого на графике.
То же самое касается вычисления параметра Close: его значение отличается от отображемого значения на графике, в чём Вы
без труда можете убедиться сами, запустив данный тестовый эксперт.

При более тчательном анализе оказалось следующее: во время работы эксперта при вызове Close на самом деле вызывается значение Open.

Что же касается iSAR, то этот индикатор даёт неправильные значения на каждом первом баре при переломе тенденции - он как-бы продолжает старую кривую, в то время как индикатор SAR, отображаемый на графике, уже изменил своё положение (стал выше/ниже) относительно цены Close;

Будьте добры, проясните пожалуйста ситуацию.
 
объясняем ситуацию
в самом начале эксперта Вы поставили условие, которое разрешает эксперту отработать всего один раз за бар и именно когда этот бар только начал формироваться. это означает, что текущее значение Close равняется текущему значению Open (бар-то только что открылся!)
в Вашей ситуации надо анализировать не текущие значения, а предыдущие (со смещением 1)
 
Попутный вопрос
Простите, но мне, как человеку, ранее не писавшему эксперты кое-что всё-таки не понятно. Вы пишете: "в самом начале эксперта Вы поставили условие, которое разрешает эксперту отработать всего один раз за бар". Продублируйте пожалуйста это условие из приведённого мной кода.

И ещё один вопрос. В настоящее время передо мной стоит задача написания торговой системы на основе SAR. Как Вы понимаете, анализировать торговой системе предыдущий бар не имеет смысла, ибо она по определению работает "здесь и сейчас". И поэтому торговой системе необходимо анализировать именно текущий бар, а не предыдущий. Я, как человек новый в написания экспертов, может быть чего-то не понимаю - это нормально. Помогите мне пожалуйста разобраться с этим вопросом.

Я прекрасно понимаю, что за экспертами стоит большое будущее и я благнодарен Вам за их создание, но пока я не пойму, как они работают, я не смогу их использовать в своём трейдинге.

С уважением, Сергей.
 
Вы использовали пример кода из "особенностей написания эксперта"
If prevtime = Time Then exit;
prevtime = Time;

этот фрагмент переводится на русский язык примерно следующим образом: "если время открытия текущего бара равно ранее запомненному времени открытия бара, то значит мы уже этот бар обрабатывали и выходим из программы. а если эти времена не равны, то сначала мы запомним время открытия текущего бара, а потом немного поработаем".
если Вы уберёте приведённый фрагмент из эксперта, то будете работать "здесь и сейчас"
 
Спасибо за разъясниения, теперь всё работает как в аптеке :-)))
 
Попутный вопрос
В своём тестовом эксперте, после того, как я убрал блок

prevtime = Time Then exit;
prevtime = Time;

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

В связи с этим я хотел бы спросить, как часто и при каких условиях выполняется код эксперта на одном и том же баре?
 
эксперт запускается с приходом каждого ценового тика
как правило бар формируется на основе нескольких тиков. чем больше период, тем больше тиков. Volume показывет, сколько тиков было в пределах данного бара