다중 기간 Donchian 지표 추세 추종 및 발산 거래 전략

DC MA Trend momentum volatility SIGNAL
생성 날짜: 2025-02-21 10:38:06 마지막으로 수정됨: 2025-02-21 10:38:06
복사: 0 클릭수: 448
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

다중 기간 Donchian 지표 추세 추종 및 발산 거래 전략 다중 기간 Donchian 지표 추세 추종 및 발산 거래 전략

개요

이 전략은 다중 주기의 돈치안 통로 지표를 기반으로 트렌드 추적 시스템을 구축한다. 다양한 시간 주기의 돈치안 통로 돌파를 분석하여 주 트렌드와 지역 트렌드의 조화 관계를 결합하여 시각적으로 직관적인 트렌드 띠 모양의 그래프를 형성한다. 전략은 트렌드의 강도 약도를 표시하기 위해 색상의 심층 변화를 사용합니다. 녹색은 상승 추세를 나타내고, 빨간색은 하락 추세를 나타냅니다. 색상이 더 깊으면 추세가 더 분명합니다.

전략 원칙

전략의 핵심은 돈치안 채널 (Donchian Channel) 지표에 기초하여 트렌드를 판단하는 것이다. 돈치안 채널은 최고 가격 채널과 최저 가격 채널로 구성되어 있으며, 현재 가격과 채널의 위치 관계를 비교하여 트렌드를 판단한다. 주로 다음과 같은 몇 가지 핵심 구성 요소를 포함한다:

  1. 주요 트렌드 판단: 20주기 동치안 통로를 활용하여, 가격이 상도를 돌파하면 상승 트렌드를 형성하고, 하도를 돌파하면 하향 트렌드를 형성
  2. 지역 경향 판단: 주 경향 프레임 워크 아래에서 더 짧은 주기를 사용하는 동천 통로에서 지역 경향의 방향을 판단
  3. 트렌드 띠 모양 도표: 10개의 다른 주기에서 둥장 통로 조합을 통해 트렌드 띠가 형성되고, 색은 진한 채로 트렌드 강도를 나타냅니다.
  4. 거래 신호: 상향의 주류는 더 많은 상장, 하향의 주류는 공백 상장, 역향은 평형 상장

전략적 이점

  1. 추세를 객관적으로 판단한다: 가격 돌파구를 기반으로 추세를 판단하고, 주관적인 판단으로 인한 편향을 피한다.
  2. 다중주기 확인: 다른 주기의 트렌드를 중첩하여 트렌드 판단의 정확도를 높인다.
  3. 시각 효과 직관: 트렌드 밴드의 색상 변경 직관 시장 상태를 표시
  4. 거래 규칙이 명확하다: 입출입 신호가 명확하고, 프로그래밍이 용이하다
  5. 적응성: 거래 품종 특성에 따라 변수를 조정할 수 있으며, 전략 성능을 최적화할 수 있습니다.

전략적 위험

  1. 트렌드 리버스 위험: 트렌드 리버스 포인트에서 큰 회수일 수 있다
  2. 위축 시장은 적용되지 않습니다. 위축 시동은 잘못된 신호를 발생시킬 수 있습니다.
  3. 매개 변수 민감성: 다른 매개 변수 설정은 전략 효과에 큰 영향을 미칩니다.
  4. 슬라이포인트 효과: 자주 거래하는 거래가 슬라이포인트에 영향을 미칠 수 있습니다.
  5. 체계적 위험: 시장의 갑작스러운 현상이 큰 손실을 초래할 수 있습니다.

전략 최적화 방향

  1. 트렌드 강도 필터링을 증가: ADX와 같은 트렌드 강도 지표를 도입하여 약한 트렌드 신호를 필터링합니다.
  2. 최적화된 스톱 레지스 설정: ATR에 기반한 스톱 레지스 위치 조정, 위험 제어 능력을 향상
  3. 트랜지먼트 확인: 트렌드의 유효성을 확인하기 위해 트랜지먼트 분석을 결합합니다.
  4. 변동율 적응을 도입: 시장 변동율에 따라 동적으로 조정되는 파라미트
  5. 포지션 관리를 개선: 트렌드 강도에 따라 포지션 규모를 동적으로 조정

요약하다

이 전략은 다중 주기 동치안 통로의 혁신적인 응용을 통해, 시각적 효과에 돋보이는, 논리적으로 명확한 트렌드 추적 거래 시스템을 구축한다. 이 전략의 핵심 장점은 복잡한 트렌드 분석 과정을 시각화하여 거래자가 시장 움직임을 직관적으로 파악하는 데 있습니다. 합리적인 매개 변수 최적화 및 위험 제어 조치를 통해 이 전략은 실전 응용 가치있다.

전략 소스 코드
/*backtest
start: 2024-06-12 00:00:00
end: 2025-02-19 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Donchian Trend Ribbon Strategy", shorttitle="DonchianTrendRibbonStrat", overlay=true, precision=0)

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Parameters
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dlen = input.int(defval=20, title="Donchian Channel Period", minval=10)

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Helper function to determine color
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
f_color(mainTrend, localTrend) =>
    // mainTrend = 1 => uptrend, -1 => downtrend
    // localTrend = 1 => local uptrend, -1 => local downtrend
    // Return color based on whether local trend aligns with the main trend
    color c = na
    if mainTrend == 1
        c := localTrend == 1 ? color.new(color.lime, 0) : color.new(color.lime, 60)
    else if mainTrend == -1
        c := localTrend == -1 ? color.new(color.red, 0) : color.new(color.red, 60)
    else
        c := na
    c

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Function dchannel - determines main trend (1 or -1)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dchannel(len) =>
    float hh = ta.highest(len)
    float ll = ta.lowest(len)
    var int tr = 0
    tr := close > hh[1] ? 1 : close < ll[1] ? -1 : nz(tr[1])

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Function dchannelalt - determines local trend and returns color
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dchannelalt(len, maintrend) =>
    float hh = ta.highest(len)
    float ll = ta.lowest(len)
    var int tr = 0
    tr := close > hh[1] ? 1 : close < ll[1] ? -1 : nz(tr[1])
    f_color(maintrend, tr)

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Calculate main trend
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
maintrend = dchannel(dlen)

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Plotting the Donchian Trend Ribbon
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
plot( 5,  color=dchannelalt(dlen - 0, maintrend),  style=plot.style_columns, histbase= 0)
plot(10, color=dchannelalt(dlen - 1, maintrend),   style=plot.style_columns, histbase= 5)
plot(15, color=dchannelalt(dlen - 2, maintrend),   style=plot.style_columns, histbase=10)
plot(20, color=dchannelalt(dlen - 3, maintrend),   style=plot.style_columns, histbase=15)
plot(25, color=dchannelalt(dlen - 4, maintrend),   style=plot.style_columns, histbase=20)
plot(30, color=dchannelalt(dlen - 5, maintrend),   style=plot.style_columns, histbase=25)
plot(35, color=dchannelalt(dlen - 6, maintrend),   style=plot.style_columns, histbase=30)
plot(40, color=dchannelalt(dlen - 7, maintrend),   style=plot.style_columns, histbase=35)
plot(45, color=dchannelalt(dlen - 8, maintrend),   style=plot.style_columns, histbase=40)
plot(50, color=dchannelalt(dlen - 9, maintrend),   style=plot.style_columns, histbase=45)

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Trading Logic (STRATEGY)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool goLong  = (maintrend == 1)
bool goShort = (maintrend == -1)

// Entry signals
if goLong
    strategy.entry("Long", strategy.long)

if goShort
    strategy.entry("Short", strategy.short)

// Close positions when trend changes
if strategy.position_size > 0 and goShort
    strategy.close("Long")

if strategy.position_size < 0 and goLong
    strategy.close("Short")