Стратегия реверсии тренда Renko ATR

Автор:Чао Чжан, Дата: 2024-02-01 14:30:24
Тэги:

img

Обзор

Стратегия реверсии тренда Ренко ATR - это уникальный торговый подход, который использует графики Ренко в сочетании с индикатором среднего истинного диапазона (ATR) для выявления точек реверсии тренда на финансовых рынках.

Логика стратегии

Поколение Ренко Брик

Стратегия сначала рассчитывает значение ATR за определенный период и использует этот ATR в качестве размера кирпича для диаграммы Ренко. Новые кирпичи Ренко выбираются, когда движение цен превышает один ATR. Таким образом, диаграмма Ренко может автоматически адаптироваться к волатильности рынка, с большими размерами кирпича для более высокой волатильности и меньшими размерами кирпича для периодов более низкой волатильности.

Покупка и продажа генерации сигнала

Сигнал покупки генерируется, когда открытая цена графика Ренко пересекает ниже цены закрытия. Наоборот, сигнал продажи генерируется, когда открытая цена пересекает цену закрытия. Эти сигналы обозначают потенциальные точки обратного тренда.

Снижение потерь и установка прибыли

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

Анализ преимуществ

Избавление от переокраски

Ручно рассчитывая цены открытия и закрытия, переокраска исключается, что делает сигналы более точными и своевременными.

Авто-адаптация к волатильности

Размер блока, основанный на ATR, позволяет стратегии автоматически адаптироваться к различным условиям волатильности рынка.

Динамическая остановка потерь и получение прибыли

Динамический механизм установки уровней стоп-лосса и уровень получения прибыли позволяет лучше контролировать риск на основе волатильности рынка.

Чистый график

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

Анализ рисков

Риски оптимизации параметров

Пользователи должны оптимизировать такие параметры, как период ATR, процент остановки потери и процент получения прибыли для различных рыночных условий.

Риски событий

Крупные новостные события или выпуски политики могут привести к быстрому сдвигу с уровня остановки потерь или снижению уровня прибыли, что приводит к большим потерям.

Риски неудачной реверсии

В некоторых случаях сигнализируемая обратная картина может не осуществиться, что приводит к проигрышу сделок.

Возможности для расширения

Использование нескольких временных рамок

Более высокие временные рамки могут быть использованы для оценки направления общей тенденции.

Комбинация других показателей

Использование импульса, волатильности или других индикаторов в сочетании может улучшить качество сигнала и избежать ложных сигналов.

Динамическая корректировка прибыли

Коэффициент прибыли может быть динамически скорректирован на основе волатильности рынка и расстояния между начальной и текущей ценами.

Заключение

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


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='[tradinghook] - Renko Trend Reversal Strategy', shorttitle='[tradinghook] - Renko TRS', overlay=true ,initial_capital = 100, commission_value = 0.05, default_qty_value = 5)

// INPUTS
renkoATRLength = input.int(10, minval=1, title='ATR Length')
stopLossPct = input.float(3, title='Stop Loss Percentage', step=0.1)
takeProfitPct = input.float(20, title='Take Profit Percentage', step=0.1)
startDate = input(timestamp("01 July 2023 00:00"), title="Start Date")
endDate = input(timestamp("31 Dec 2025 23:59"), title="End Date")
enableShorts = input.bool(true, title="Enable Shorts")

var float stopLossPrice = na
var float takeProfitPrice = na

atr = ta.atr(renkoATRLength)

// thanks to https://www.tradingview.com/script/2vKhpfVH-Renko-XZ/ for manually calculating renkoClose and renkoOpen in order to remove repaint
getRenkoClose() =>
    p1 = 0.0
    p1 := close > nz(p1[1]) + atr ? nz(p1[1]) + atr : close < nz(p1[1]) - atr ? nz(p1[1]) - atr : nz(p1[1])
    p1

Renko3() =>
    p3 = 0.0
    p3 := open > nz(p3[1]) + atr ? nz(p3[1]) + atr : open < nz(p3[1]) - atr ? nz(p3[1]) - atr : nz(p3[1])
    p3

getRenkoOpen() =>
    open_v = 0.0
    Br_2 = Renko3()
    open_v := Renko3() != Renko3()[1] ? Br_2[1] : nz(open_v[1])
    open_v

renkoOpen = getRenkoOpen()
renkoClose = getRenkoClose()

// COLORS
colorGreen = #089981
colorRed = #F23645
bgTransparency = 95
bgColorRed = color.new(colorRed, bgTransparency)
bgColorGreen = color.new(colorGreen, bgTransparency)
lineColor = renkoClose < renkoOpen ?  colorRed : colorGreen 
bgColor = renkoClose < renkoOpen ?  bgColorRed : bgColorGreen 

// PLOTS
plot(renkoOpen, title="Renko Open", style=plot.style_line, linewidth=2, color=lineColor)
bgcolor(bgColor)

// SIGNALS
isWithinTimeRange = true
buySignal = ta.crossunder(renkoOpen, renkoClose) and isWithinTimeRange
sellSignal = ta.crossover(renkoOpen, renkoClose) and isWithinTimeRange and enableShorts

if (buySignal)
    stopLossPrice := renkoOpen * (1 - stopLossPct / 100)
    takeProfitPrice := renkoOpen * (1 + takeProfitPct / 100)
    strategy.entry("Long", strategy.long)
    strategy.exit("ExitLong", "Long", stop = stopLossPrice, limit = takeProfitPrice, comment="SL: " + str.tostring(stopLossPrice) + ", TP: " + str.tostring(takeProfitPrice))
if (sellSignal)
    stopLossPrice := renkoOpen * (1 + stopLossPct / 100)
    takeProfitPrice := renkoOpen * (1 - takeProfitPct / 100)
    strategy.entry("Short", strategy.short)
    strategy.exit("ExitShort", "Short", stop = stopLossPrice, limit = takeProfitPrice, comment="SL: " + str.tostring(stopLossPrice) + ", TP: " + str.tostring(takeProfitPrice))


Больше