Сегодня подписчик прислал мне ссылку на стратегию с очень большой доходностью. Я посмотрел её исходный код и вскоре понял что она "подглядывает в будущее". То есть на реальной практике эта стратегия не будет так хорошо работать, как хорошо она работает на бектестах. И вот с этой пакостью можно бороться. Как заставить стратегии на TradingView не подглядывать в будущее? Об этом статья.
Я скорее всего не знаю все способы "подглядывания в будущее", которые можно реализовать на языке программирования, который тут используется (PineScrypt называется), но пока видел только 2 способа. Такие строчки в исходном коде стратегии или индикатора (если исходный код открыт) должны "насторожить".
Способ один - отрицательные свечки
Стратегия может получать, например, high-цену текущей свечки. Тут ничего плохого нет. Например, это может выглядеть так:
"price = high"
Так же она может смотреть значения предыдущих свечек, что не плохо, ведь прошлое то уже известно. Цифра какую свечку смотреть заключается в квадратные скобки. Например так:
Тут нельзя в статью вставлять квадратные скобки оказывается, поэтому я вставил фигурные скобки вместо квадратных.
"price = high{2}" (смотрит какой high был две свечки назад)
Но и в будущее она тоже может смотреть, если это значение отрицательное. Например так:
"price = close{-3}" (смотрит по какой цене закроется третья свечка в будущем)
Соответственно, если в стратегии есть такие отрицательные значения в квадратных скобках, то это фейк, а не стратегия. Она точно не будет работать в реальной практике нормально.
Способ два - через безопасность
В этом языке есть команда "Security()". Она позволяет смотреть цены другого инструмента, либо того же самого, но в другом таймфрейме. И если она смотрит тот же инструмент для получения open-цены свечки, то всё ОК. Но вот другие цены так смотреть нельзя, потому что это уже будущее. Например так:
"price = security(tickerid, 'D', close)"
В данном примере стратегия/индикатор смотрит на цену закрытия дня. Однако, увидеть она эту цену может в любой свечке, в том числе на часовой. То есть в первый час дня такая стратегия будет знать по какой цене закроется день. То есть видеть будущее на 23 часа вперед. Нам такое не годится.
Простое решение
У языка есть версии. Обычно версия языка задается в самом начале скрипта. Обычно используется версия 2 или 3. Так вот версия 3 не разрешает стратегии/индикатору заглядывать в будущее. То есть надо найти это:
Всё. Проблема решена. Теперь будущее она не может знать.
Реальный пример
Вот стратегия "Heikin Ashi Strategy V2" от пользователя breizh29. Там стоит версия 2 и код такой, какой позволяет смотреть будущее. В оригинальной версии стратегии она дает доходность 776% для биткойна.
Далее я меняю версию на 3, и тестирую с точно такими же настройками, и получается доходность 263%. То есть проигрывает рынку, так как рынок за тот же период дал 344%. То есть эта проигрышная стратегия, но за счет заглядывания в будущее выглядит как выигрышная.
Закрытый исходный код
У многих стратегий и индикаторов нельзя посмотреть исходный код (автор закрыл его). Но тут есть еще один "манёвр". Заглядывающие в будущее стратегии обычно смотрят в каком-то таймфрейме. Поэтому, чем меньший таймфрейм Вы ставите на тестах, тем больше будет доходность у такой нечестной стратегии. То есть в нормальной ситуации доходность у стратегии не должна увеличиваться при каждом уменьшении таймфрейма. Это вот такой косвенный признак обмана.
PS: я не делаю в своих скриптах "заглядывание в будущее".
Bilgiler ve yayınlar, TradingView tarafından sağlanan veya onaylanan finansal, yatırım, işlem veya diğer türden tavsiye veya tavsiyeler anlamına gelmez ve teşkil etmez. Kullanım Şartları'nda daha fazlasını okuyun.