Repainting (перерисовка)

Denis Kotelnykov · April 13, 2022

Друзья, пришло несколько жалоб на некорректную работу сигналов. Мы начали разбираться в проблеме и выявили следующее: используя некоторые встроенные в TradingView-библиотеках функции, можно столкнуться с такой проблемой как Repainting (перерисовка) - поведение скрипта, заставляющее исторические вычисления вести себя по-разному по сравнению с расчетами в реальном времени. Короткий пример для понимания: код отправляет сигнал, когда текущая цена бара будет выше цены открытия. Ничего не гарантирует, что цена не будет то ниже, то выше несколько раз за 45м бар. А значит можно получить уведомление, зайти, и увидеть, что сигнал пропал, ведь цена уже опустилась.

Поведение при перерисовке широко распространено и может быть вызвано многими факторами. По оценке самого TradingView, более 95% существующих индикаторов грешат этим. Широко используемые индикаторы, такие как MACD, RSI, Ишимоку, большинство скриптов и стратегий, скрипты использующие calc_on_evey_tick = true, использующие перерисовку request.security() и другие - показывают одно значение на исторических барах, но при работе в реальном времени они будут выдавать другие результаты. Это поведение нельзя протестировать на исторических барах, потому что они не хранят промежуточные значения, а только открытие, закрытие, макс и мин цены.

Отдельно хочется упомянуть индикатор VuManChu. Который, к слову, бесплатный клон Market Cipher. Там используются почти все функции, которые приводят к перерисовке. Такие как security (Запросить другой инструмент/интервал), barmerge.lookahead_on (Стратегия объединения для запрашиваемой позиции данных), на счет последнего TradingView отзывается как «недопустимый» в стратегиях.

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

Для пользователей скрипта:

Вы можете решить использовать другие индикаторы с перерисовкой, если понимаете как они ведут себя, и это поведение соответствует требованиям вашей торговой методологии. Не будьте одним из тех новичков в трейдинге, “перерисовка” сама по себе не дискредитирует скрипт. Это только показывает ваше непонимание как рассчитываются значения и бектесты.

Теперь вопрос “перерисовывается ли Reverie?” ничего не значит. Следовательно, на него нельзя дать содержательный ответ. Почему? Потому что это должно быть квалифицировано. Вместо этого можно было бы спросить:

  • Вы ждете, пока закроется бар реального времени, прежде чем отображать ваши маркеры входа / выхода?
  • Да. В последнем обновлении это было исправлено.
  • Ждут ли оповещения окончания бара реального времени перед запуском?
  • Да, хотя сам TradingView не всегда обновляет график вместе с оповещением.
  • Будет ли ваш индикатор отображаться в реальном времени так же, как на исторических барах?
  • Да, В последнем обновлении это было исправлено.
  • Извлекаете ли вы информацию с помощью вызовов request.security()?
  • Нет, это так же было исправлено и информацию из нестандартных таймфреймов или графиков мы не используем.

Twitter, Facebook