DEV Community на русском
Подписаться
Значение request.security(), которого пока нет
Когда стратегия прибыльна в бэктесте, но убыточна в реальной торговле, часто винят проскальзывание, но сначала следует проверить конкретную причину в функции request.security() Pine Script. Эта проблема, задокументированная TradingView, касается использования данных более высоких таймфреймов. По умолчанию request.security() использует barmerge.lookahead_off, предотвращая утечку будущих данных. Однако установка lookahead=barmerge.lookahead_on для избежания предполагаемого отставания на один бар вводит критический недостаток.Эта настройка позволяет историческим бэкфиллам включать данные, которые еще не доступны в реальной торговле. Например, стратегия, сравнивающая текущую цену с закрытием более высокого таймфрейма, будет использовать будущее закрытие в бэктесте для внутридневных баров. В реальной торговле этих будущих данных нет, что приводит к расхождениям.Проблема коварна, потому что ее трудно заметить в реальной торговле. Во время реальной торговли обе серии, lookahead_on и lookahead_off, показывают одинаковые значения, поскольку будущих данных нет. Тем не менее, как только бар реального времени закрывается и становится историческим, он "перерисовывается", пересчитываясь с полной исторической записью, отклоняясь от того, что наблюдалось в реальной торговле. Это означает, что сессия реальной торговли, которая казалась работающей, может полностью измениться при перезагрузке графика.Схожий вариант возникает, когда request.security() используется для таймфреймов, равных разрешению графика или ниже его. Настройка lookahead затем определяет, какое значение внутри бара возвращается, что потенциально может привести к несоответствию между бэктестом и реальным исполнением. Для диагностики этого пользователи скриптов должны проверить все вызовы request.security() на наличие "lookahead_on". Если они найдены, убедитесь, что применен явный исторический сдвиг.Кроме того, подтвердите выбор внутри бара для запросов на том же или более низком таймфрейме. Прямым признаком перерисовки является изменение значений на недавно закрытых барах после перезагрузки скрипта. Это решающее различие между исторически доступными данными и тем, что можно узнать в реальной торговле, жизненно важно для надежной производительности стратегии.