Стратегии смотрят в будущее

Сегодня подписчик прислал мне ссылку на стратегию с очень большой доходностью. Я посмотрел её исходный код и вскоре понял что она "подглядывает в будущее". То есть на реальной практике эта стратегия не будет так хорошо работать, как хорошо она работает на бектестах. И вот с этой пакостью можно бороться. Как заставить стратегии на TradingView не подглядывать в будущее? Об этом статья.

Я скорее всего не знаю все способы "подглядывания в будущее", которые можно реализовать на языке программирования, который тут используется (PineScrypt называется), но пока видел только 2 способа. Такие строчки в исходном коде стратегии или индикатора (если исходный код открыт) должны "насторожить".

Способ один - отрицательные свечки

Стратегия может получать, например, high-цену текущей свечки. Тут ничего плохого нет. Например, это может выглядеть так:

"price = high"

Так же она может смотреть значения предыдущих свечек, что не плохо, ведь прошлое то уже известно. Цифра какую свечку смотреть заключается в квадратные скобки. Например так:

Тут нельзя в статью вставлять квадратные скобки оказывается, поэтому я вставил фигурные скобки вместо квадратных.

"price = high{2}" (смотрит какой high был две свечки назад)

Но и в будущее она тоже может смотреть, если это значение отрицательное. Например так:

"price = close{-3}" (смотрит по какой цене закроется третья свечка в будущем)

Соответственно, если в стратегии есть такие отрицательные значения в квадратных скобках, то это фейк, а не стратегия. Она точно не будет работать в реальной практике нормально.

Способ два - через безопасность

В этом языке есть команда "Security()". Она позволяет смотреть цены другого инструмента, либо того же самого, но в другом таймфрейме. И если она смотрит тот же инструмент для получения open-цены свечки, то всё ОК. Но вот другие цены так смотреть нельзя, потому что это уже будущее. Например так:

"price = security(tickerid, 'D', close)"

В данном примере стратегия/индикатор смотрит на цену закрытия дня. Однако, увидеть она эту цену может в любой свечке, в том числе на часовой. То есть в первый час дня такая стратегия будет знать по какой цене закроется день. То есть видеть будущее на 23 часа вперед. Нам такое не годится.

Простое решение

У языка есть версии. Обычно версия языка задается в самом начале скрипта. Обычно используется версия 2 или 3. Так вот версия 3 не разрешает стратегии/индикатору заглядывать в будущее. То есть надо найти это:

//version=2

И поменять на 3. Вот так:

//version=3

Всё. Проблема решена. Теперь будущее она не может знать.

Реальный пример

Вот стратегия "Heikin Ashi Strategy V2" от пользователя breizh29. Там стоит версия 2 и код такой, какой позволяет смотреть будущее. В оригинальной версии стратегии она дает доходность 776% для биткойна.

Далее я меняю версию на 3, и тестирую с точно такими же настройками, и получается доходность 263%. То есть проигрывает рынку, так как рынок за тот же период дал 344%. То есть эта проигрышная стратегия, но за счет заглядывания в будущее выглядит как выигрышная.

Закрытый исходный код

У многих стратегий и индикаторов нельзя посмотреть исходный код (автор закрыл его). Но тут есть еще один "манёвр". Заглядывающие в будущее стратегии обычно смотрят в каком-то таймфрейме. Поэтому, чем меньший таймфрейм Вы ставите на тестах, тем больше будет доходность у такой нечестной стратегии. То есть в нормальной ситуации доходность у стратегии не должна увеличиваться при каждом уменьшении таймфрейма. Это вот такой косвенный признак обмана.

PS: я не делаю в своих скриптах "заглядывание в будущее".
Trend Analysis

Мои профили:

Отказ от ответственности