렌코 ATR 트렌드 역전 전략

저자:차오장, 날짜: 2024-02-01 14:30:24
태그:

img

전반적인 설명

렌코 ATR 트렌드 역전 전략은 금융 시장에서 트렌드 역전 지점을 식별하기 위해 평균 진정한 범위 (ATR) 지표와 함께 렌코 차트를 사용하는 독특한 거래 접근법입니다. 렌코 차트의 재칠 문제를 제거함으로써이 전략은 전환점을 정확하게 파악하고 거래 결정에 대한 명확한 신호를 제공할 수 있습니다.

전략 논리

렌코 브릭 세대

이 전략은 먼저 정의된 기간 동안 ATR 값을 계산하고 이 ATR을 렌코 차트의 벽돌 크기로 사용합니다. 가격 움직임이 1 ATR을 초과하면 새로운 렌코 벽돌이 그려집니다. 이러한 방식으로 렌코 차트는 시장의 변동성에 자동으로 적응 할 수 있습니다. 더 높은 변동성을위한 더 큰 벽돌 크기와 낮은 변동성을위한 작은 벽돌 크기로.

구매 및 판매 신호 생성

렌코 차트의 오픈 가격이 클로즈 가격 아래로 넘어가면 구매 신호가 생성됩니다. 반대로 오픈 가격이 클로즈 가격 위에 넘어가면 판매 신호가 생성됩니다. 이러한 신호는 잠재적 인 트렌드 역전 지점을 표시합니다.

손실 을 멈추고 이윤 을 취하는 설정

이 전략은 사용자 정의 입력 매개 변수에 기초하여 각 거래에 대한 Stop Loss 및 Take Profit 수준을 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))


더 많은