"Будьте бдительны! Индикаторы врут!"
Вот так новость !
Что же теперь делать ?
Алекс. Эта тема уже неоднократно обсуждалась. Что вы хотите услышать? Вопрос в чем?
Да собственно ни в чём...
Хотелось бы конечно, что бы разработчики подправили данную ситуацию, но МТ5 поставил жирный крест на МТ4...
Да собственно ни в чём...
Хотелось бы конечно, что бы разработчики подправили данную ситуацию, но МТ5 поставил жирный крест на МТ4...
На MQL5 забанен, поэтому пишу здесь насчет "накопительного обновления для MT4".
Цитата отсюда:
Я вчера, когда смотрел код, неверно выразился по поводу разной стоимость пункта в зависимости от направления.
Точнее сказать, что TickValue при конвертации в целевую валюту зависит от того, убыточна она или нет. То есть, если мы получили убыток в 1 пипс, то нам надо его выкупить по цене Ask, а если прибыль в 1 пипс, то продать по цене Bid. Оценочная функция MODE_TICKVALUE использует только один вариант.
Сегодня после проверок нашли проблему в конвертации кроссов в валюту депозита - спасибо за расследование. В МетаТрейдер 5 такой проблемы нет.
Мы исправим ошибку в крупном обновлении платформы MetaTrader 4 в феврале (нужно многое сделать синхронно).
Мне очень стыдно, извините.
Запустил представленный там проверочный скрипт на текущем билде MT4. Ничего не изменилось:
- MODE_TICKVALUE считается неправильно.
- Утверждения разработчиков, что параметр TickValue является оценочным по прежнему не соответствует действительности. Именно по этому параметру MT4 до сих пор считает прибыль. А это значит из п.1., что до сих пор MT4 считает прибыль неправильно.
- При перестановке входных параметров в функции OrderCloseBy меняется прибыль:
OrderCloseBy(Ticket1, Ticket2); // Если поменять местами тикеты, прибыль будет иной - ошибка!
MT5 не проверял. Замечу, что в тестере MT5 параметр для расчета прибыли TickValue зафиксирован. Т.е. результаты MT5-тестера носят оценочный характер не только из-за эмуляции тиковой истории, но и из-за неправильного расчета TickValue.
Например, если вы прогоняете советник на EURGBP в MT5 тестере, то для корректного расчета прибыли вам нужно иметь также данные по GBPUSD, чтобы конвертить GBP-прибыль в USD (валюта депозита). Этого, к сожалению, нет.
В альтернативном тестере по тикам такого не происходит. Т.е. если вы хотите тестировать EURGBP, то обязательно подцепится и GBPUSD.
P.S. Если кого-то волнуют данные казусы, скопируйте на MQL5-форум.
На MQL5 забанен, поэтому пишу здесь насчет "накопительного обновления для MT4".
Проверьте, я не вижу, чтобы ник hrenfx был забанен на MQL5.
Там тоньше настраиваются права, нежели здесь: у меня нет права там отвечать публично, в ЛС и в сервисдеск. Остальное - не пробовал.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В общем история началась с типового ЗигЗага. Появлялись у него периодически "горбы" и несовпадение с ценовыми экстремумами. Можно было списать на глюки алгоритма.
Но позже стало это проявляться и на других алгоритмах ЗигЗага:
Написал я быстренько сервисный индикатор (он немного не доработанный - содержит мелкие ошибки) и с его помощью выявил, что при кратковременных разрывах связи с сервером (около 1-2 минут) или же просто при обновлении котировок задним числом (факт скользкий, до конца не изученный), функция IndicatorCounted() никак не реагирует на изменение цены баров, уже просчитанных данной функцией.
А вообще, что эта за функция и с чем её едят?
В штатном режиме IndicatorCounted() всегда на 1 единицу меньше Bars на тике старого бара и на 2 меньше на первом полученном тике нового бара.
Так вот! Анализ показывает, что на пришедшем тике для нашей ситуации IndicatorCounted()=10, Bars=11 могут быть изменены цены (любые - и Close и Open и т.д.) для уже просчитанных баров - 4, 5 и даже 10! Вот к примеру лог, сгенерированный индикатором:
GetTickCount;Bars;IndicatorCounted;Nom;Open;High;Low;Close;Volume
195079749;66175;66173;1;1.29427;1.29429;1.29416;1.29423;33
195079749;66175;66173;8;;1.29433;;;43
Его трактовка такова: был когда то бар с индексом 1 и перечисленными ценами. И через некоторое время он уже стал баром номер 8 (естественный процесс при открытых торгах по инструменту)))))), с другой ценой High бара и при этом это произошло в обход функции IndicatorCounted()!!!
Такие ситуации не частое явление. Некоторые индикаторы (МА к примеру) будут просто содержать чуть не корректные данные (до полного пересчета). Но для некоторых индикаторов эти ситуации становятся смертельными (как например для ЗигЗага с верхнего скрина)!!!
В один из своих индикаторов я встроил защиту от такого безобразия... Но оно как Вы понимаете отнимает несколько индикаторных буферов и требует дополнительных вычислений на новом тике/баре.