렌코 평균 진폭 범위 기반 추세 반전 전략


생성 날짜: 2024-02-01 14:30:24 마지막으로 수정됨: 2024-02-01 14:30:24
복사: 0 클릭수: 1467
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

렌코 평균 진폭 범위 기반 추세 반전 전략

개요

렌코 평균 실제 파장의 트렌드 반전 전략 (Renko ATR Trend Reversal Strategy) 은 렌코 차트와 평균 실제 파장의 ATR 지표를 결합하여 금융 시장의 트렌드 반전점을 식별하기 위한 독특한 거래 전략이다. 이 전략은 렌코 차트의 지연 그리기 문제를 제거하여 전환점을 정확하게 포착하여 거래 결정을위한 명확한 신호를 제공합니다.

전략 원칙

Renko 블록 생성

이 전략은 먼저 일정 주기 내의 ATR의 값을 계산하고, 이 ATR을 기준으로 렌코 도표의 블록 크기를 설정한다. 가격이 하나의 ATR을 넘어서면 새로운 렌코 블록이 그려진다. 이 방법으로, 렌코 도표는 시장의 변동 정도에 자동으로 적응할 수 있으며, 높은 변동이 있을 때 더 큰 블록 크기를 설정하고, 낮은 변동이 있을 때 더 작은 블록 크기를 설정한다.

구매 및 판매 신호 생성

렌코의 개시 가격 아래에서 개시 가격을 통과하면 구매 신호가 발생하고, 렌코의 개시 가격 위에서 개시 가격을 통과하면 판매 신호가 발생한다. 이러한 신호는 잠재적인 트렌드 반전의 지점을 나타냅니다.

손해 중지 및 정지 설정

이 전략은 사용자가 정의한 중지 손실 비율과 중지 중지 비율에 따라, 렌코 개시 가격을 기준으로 한 거래의 중지 손실 가격과 중지 가격 값을 설정하고, 각 거래의 위험과 수익을 제어한다.

우위 분석

뒤떨어진 그림을 없애기

이 전략은 렌코의 개시 가격과 종료 가격을 수동으로 계산함으로써 지연 도화의 문제를 제거하고, 신호의 발생을 보다 정확하고 적시에 가능하게 한다.

시장의 변동에 자동 적응

ATR 지표에 기반한 Renko 블록 크기의 설정은 전략이 다른 시장 조건의 가격 변동률에 자동으로 적응할 수 있게 해준다.

동적 정지 손해 차단 설정

이 전략은 각각의 거래에 대해 동적인 중지 및 중지 메커니즘을 설정하고, 시장의 변동 정도에 따라 위험을 제어할 수 있다.

간소화 도표 보기

렌코 그래프 자체는 시장의 소음을 제거하고, 트렌드 반전이 발생했을 때 명확하고 간결한 시각적 효과를 제공합니다.

위험 분석

매개변수 최적화 위험

사용자는 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))