Бэктест стратегии на ренко-графиках в Pine Script v5 без перерисовки

Бэктест стратегии на ренко-графиках в Pine Script v5 без перерисовки Pine Script
Пошаговое руководство по реализации бэктеста Renko-стратегий внутри стандартных свечей в Pine Script v5. Избавьтесь от lookahead-bias и перерисовки раз и навсегда.
Суть: Стандартные графики Ренко в TradingView не имеют жесткой привязки ко времени, что приводит к критической перерисовке (lookahead bias) при бэктестах. Единственный способ провести честное историческое тестирование — математически эмулировать кирпичи Ренко внутри обычных свечей (OHLC) на Pine Script v5. Это гарантирует исполнение ордеров по реальным историческим ценам.

Исходный код

Для решения проблемы перерисовки мы создадим алгоритм, который рассчитывает виртуальные уровни Ренко на каждом баре стандартного таймфрейма. С помощью цикла while скрипт корректно обрабатывает даже сильные ценовые импульсы, которые могут сформировать несколько кирпичей внутри одной стандартной свечи.

//@version=5
strategy("Renko on Standard Candles", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Входные параметры
boxSizeInput = input.float(10.0, title="Размер кирпича (в пунктах)")
useATR = input.bool(false, title="Использовать ATR для размера кирпича")
atrLength = input.int(14, title="Период ATR")

// Расчет размера кирпича
float boxSize = useATR ? ta.atr(atrLength) : boxSizeInput

// Состояние Ренко (сохраняется между барами)
var float rClose = na
var float rOpen = na
var int rDir = 0 // 1 = Вверх, -1 = Вниз

// Инициализация на первом баре
if barstate.isfirst
    rClose := close
    rOpen := close - boxSize
    rDir := 1

int bricks = 0
float p = close

// Эмуляция движения цены внутри текущего бара
bool updating = true
int safetyLimit = 0
while updating and safetyLimit < 100
    safetyLimit := safetyLimit + 1
    if rDir == 1
        if p >= rClose + boxSize
            rOpen := rClose
            rClose := rClose + boxSize
            bricks := bricks + 1
        else if p <= rClose - 2.0 * boxSize
            rOpen := rClose - boxSize
            rClose := rClose - 2.0 * boxSize
            rDir := -1
            bricks := bricks - 2
        else
            updating := false
    else // rDir == -1
        if p <= rClose - boxSize
            rOpen := rClose
            rClose := rClose - boxSize
            bricks := bricks - 1
        else if p >= rClose + 2.0 * boxSize
            rOpen := rClose + boxSize
            rClose := rClose + 2.0 * boxSize
            rDir := 1
            bricks := bricks + 2
        else
            updating := false

// Торговая логика на основе виртуальных кирпичей
if bricks > 0
    strategy.entry("Long", strategy.long)
else if bricks < 0
    strategy.entry("Short", strategy.short)

// Визуализация уровней Ренко на стандартном графике
plot(rClose, title="Виртуальный Ренко Close", color=rDir == 1 ? color.green : color.red, linewidth=2)

Разбор параметров

  • boxSizeInput: Фиксированная высота кирпича Ренко в пунктах. Используется, если отключена динамическая оценка волатильности.
  • useATR: Логический переключатель, позволяющий адаптировать размер кирпича под текущую волатильность рынка с помощью индикатора ATR.
  • rClose и rOpen: Переменные состояния, которые хранят виртуальные уровни цен закрытия и открытия Ренко. Они обновляются только при достижении ценой пороговых значений.
  • rDir: Направление последнего сформированного кирпича. Это критически важно, так как для разворота тренда цене необходимо пройти расстояние в два размера кирпича (2.0 * boxSize) в противоположную сторону.
  • bricks: Счетчик кирпичей, сформированных на текущем баре. Положительное значение указывает на восходящее движение, отрицательное — на нисходящее.

Как запустить

Для запуска и тестирования стратегии выполните следующие действия:

  1. Откройте платформу TradingView и перейдите на вкладку Pine Editor в нижней панели.
  2. Скопируйте представленный выше код и вставьте его в редактор.
  3. Нажмите кнопку Add to Chart (Добавить на график).
  4. Важно: Применяйте стратегию только на стандартных свечных графиках (например, японские свечи или бары на таймфреймах 1m, 5m или 1h). Не переключайте сам тип графика TradingView на Renko, иначе бэктест снова станет нерелевантным из-за внутренней механики платформы.

Использование эмуляции Ренко внутри стандартных свечей полностью решает проблему заглядывания в будущее. Однако помните, что ложные пробои все еще возможны. Чтобы улучшить результаты вашей торговой системы, вы можете применить методы фильтрации, описанные в статье Фильтрация ложных пробоев уровней в Pine Script v5: RSI и Объем.

Если вы планируете масштабировать стратегию на несколько активов и анализировать их взаимосвязь, вам поможет наш материал Матрицы в Pine Script v5: Расчет корреляции криптовалют.

Кроме того, кирпичи Ренко отлично подходят для выявления глобальной структуры рынка. Для автоматизации этого процесса рекомендуем ознакомиться с руководством Автоматическое определение рыночной структуры (BOS и CHoCH) в Pine Script v5.

Оцените статью
FinFluct