Исходный код
Для решения проблемы перерисовки мы создадим алгоритм, который рассчитывает виртуальные уровни Ренко на каждом баре стандартного таймфрейма. С помощью цикла 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: Счетчик кирпичей, сформированных на текущем баре. Положительное значение указывает на восходящее движение, отрицательное — на нисходящее.
Как запустить
Для запуска и тестирования стратегии выполните следующие действия:
- Откройте платформу TradingView и перейдите на вкладку Pine Editor в нижней панели.
- Скопируйте представленный выше код и вставьте его в редактор.
- Нажмите кнопку Add to Chart (Добавить на график).
- Важно: Применяйте стратегию только на стандартных свечных графиках (например, японские свечи или бары на таймфреймах 1m, 5m или 1h). Не переключайте сам тип графика TradingView на Renko, иначе бэктест снова станет нерелевантным из-за внутренней механики платформы.
Использование эмуляции Ренко внутри стандартных свечей полностью решает проблему заглядывания в будущее. Однако помните, что ложные пробои все еще возможны. Чтобы улучшить результаты вашей торговой системы, вы можете применить методы фильтрации, описанные в статье Фильтрация ложных пробоев уровней в Pine Script v5: RSI и Объем.
Если вы планируете масштабировать стратегию на несколько активов и анализировать их взаимосвязь, вам поможет наш материал Матрицы в Pine Script v5: Расчет корреляции криптовалют.
Кроме того, кирпичи Ренко отлично подходят для выявления глобальной структуры рынка. Для автоматизации этого процесса рекомендуем ознакомиться с руководством Автоматическое определение рыночной структуры (BOS и CHoCH) в Pine Script v5.




