강화된 동적 채널 돌파 추세 추종 거래 시스템

DONCHIAN ATR SMA RSI 趋势跟踪 波动率管理 风险控制 多级入场 动态止损
생성 날짜: 2025-03-05 09:49:33 마지막으로 수정됨: 2025-03-05 09:49:33
복사: 3 클릭수: 565
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

강화된 동적 채널 돌파 추세 추종 거래 시스템 강화된 동적 채널 돌파 추세 추종 거래 시스템

개요

증강형 동적 채널 돌파 트렌드 추적 거래 시스템은 고전적인 해수욕 거래 시스템을 기반으로 한 종합적인 양적 거래 전략이며, 여러 기술 지표로 현대화되어 있습니다. 이 시스템은 주로 돈치안 채널을 사용하여 가격 돌파를 식별하며, 평평선 (SMA) 을 결합하여 시장 추세 방향을 판단하고, 상대적으로 약한 지표 (RSI) 필터링 현장 신호, 그리고 평균 실제 파도 (ATR) 위험을 관리하고 포지션 크기를 관리합니다. 이 시스템은 과학적인 다단위 현장 메커니즘을 설계하여 유리한 추세에서 포지션을 추가 할 수 있으며, ATR 기반의 동적 정지 시스템 손실을 보호합니다.

전략 원칙

이 전략의 원리는 몇 가지 핵심 기술 지표를 중심으로 펼쳐집니다.

  1. 돈치안 채널: 두 개의 다른 주기를 사용하는 동치안 통로, 더 긴 주기 (기본 15) 는 가격 돌파구를 식별하고 진입 신호를 유발하기 위해 사용되며, 더 짧은 주기 (기본 5) 는 퇴출 지점을 결정하기 위해 사용된다.

  2. 트렌드 확인 메커니즘: 200주기 간단한 이동 평균 ((SMA) 을 트렌드 필터로 사용하여, 가격이 SMA 위에 있을 때만 더 많은 것을 고려하고, 가격이 SMA 아래에 있을 때만 더 많은 것을 고려하십시오.

  3. RSI 필터상대적으로 약한 지표 (RSI) 를 2차 필터로 사용하여 과도한 과매매 또는 과매매 영역에 진입하는 것을 방지하여 역 거래 위험을 줄입니다.

  4. 동적 위치 관리: ATR을 기반으로 거래당 포지션 크기를 계산하여 다양한 변동 환경의 위험 틈을 일관되게 보장합니다. 구체적인 계산 방법은 위험 자금 (계좌 자금의 2%) 을 (ATR 곱하기 가격) 으로 나누는 것입니다.

  5. 다단계 입학제도: 가격이 우호적인 방향으로 ATR의 0.5배로 움직일 때, 포지션을 증가시킬 수 있으며, 최대 4개의 포지션을 보유하여 피라미드형의 포지션 구조를 형성한다.

  6. 동적 손해 방지 시스템ATR 기반의 스톱을 설정하고, 초기 스톱은 입시 가격의 2배의 ATR 거리로 설정하고, 트래킹 스톱 메커니즘을 적용하여 스톱은 가격이 유리한 방향으로 이동함에 따라 조정한다.

입학 조건은 다음과 같습니다.

  • 더 많이: 가격이 지난 15주기의 최고점을 돌파하고 가격이 200SMA 이상이며 RSI가 70보다 낮을 때
  • 공백: 가격 하락이 지난 15 주기의 최저점을 넘어 200SMA 아래로 떨어지고 RSI가 30보다 높을 때.

탈퇴 조건:

  • 더 많은 탈퇴: 가격 하락이 지난 5주기의 최저치를 넘어갈 때
  • 공백출장: 가격 고점이 지난 5주기의 최고점을 돌파했을 때.

전략적 이점

  1. 트렌드를 확인한 다층 필터링둥근 통로, 이동 평균 및 RSI 지표와 결합하여 다층적인 필터링 시스템을 생성하여 진입 신호의 품질을 크게 향상시키고 가짜 돌파구로 인한 손실을 줄입니다.

  2. 자율적인 포지션 관리ATR 기반의 포지션 계산 방법은 전략이 시장의 변동성에 따라 포지션 크기를 조정할 수 있도록합니다. 높은 변동성 환경에서 포지션을 줄이고 낮은 변동성 환경에서 포지션을 증가시켜 위험을 일관성 있게 제어합니다.

  3. 점진적인 창고 구축 메커니즘: 피라미드형 상장 방식은 트렌드 확인 후 포지션을 증가시켜 수익 잠재력을 높여 주면서 초기 포지션은 작아 위험을 효과적으로 제어한다.

  4. 동적 정지 보호ATR 기반의 추적 스톱은 시장의 실제 변동에 따라 스톱 위치를 조정하여 조기 스톱을 효과적으로 방지하고 트렌드 역전 시 수익을 적시에 보호 할 수 있습니다.

  5. 유연한 변수 설정전략: 전략은 여러 가지 조정 가능한 파라미터를 제공 합니다. 그 중에는 唐通道周期, ATR周期, RSI 值 등이 있습니다.

  6. 명확한 거래 규칙전략 규칙이 명확하고 완전히 체계화되어 있으며 주관적 판단과 감정적 영향을 줄여 거래 규율을 유지하는 데 도움이 됩니다.

전략적 위험

  1. 시장의 부진: 트렌드 추적 시스템으로서, 이 전략은 명확한 트렌드가 없는 흔들리는 시장에서 빈번한 가짜 신호와 작은 손실을 초래할 수 있으며, 이른바 “ 손실”을 형성한다. 해결책은 추가적인 시장 환경 필터를 추가하거나, 흔들리는 시장이 확인될 때 일시적으로 거래를 중단하는 것이다.

  2. 슬라이드 포인트와 유동성 위험: 급속한 시장에서, 특히 추가 유닛을 추가할 때, 슬라이드 포인트 증가와 유동성이 부족한 문제가 발생할 수 있습니다. 최대 슬라이드 포인트 제한을 설정하고 낮은 유동성 시간대의 거래를 피함으로써 완화 할 수 있습니다.

  3. 변수 최적화 과잉과잉 최적화 파라미터로 인해 전략이 역사 데이터에서 잘 작동하지만 실생활에서 좋지 않은 결과를 초래할 수 있습니다. 전향 검증 및 안정성 테스트를 사용하여 다양한 파라미터 설정 하에서 전략의 성능을 평가하는 것이 좋습니다.

  4. 단일 시장 의존: 단일 시장에서만 적용하면 전략이 특정 시장의 위험에 노출 될 수 있습니다. 전략이 여러 개의 관련이없는 시장에 적용되어 다중 시장 포트폴리오를 형성하여 위험을 분산시키는 것을 고려할 수 있습니다.

  5. 비상사태 위험: 시장의 갑작스러운 사건으로 인해 가격이 급격히 상승하여, 스톱로스 설정을 초과하여 예상 이상의 손실을 초래할 수 있습니다. 최대 위험 제한을 설정하고 옵션 보호와 같은 다른 위험 관리 도구를 사용하여 영향을 줄일 수 있습니다.

전략 최적화 방향

  1. 시장 상태는 적응합니다.: 시장 상태를 식별하는 메커니즘을 도입하여 전략이 트렌드 시장과 흔들림 시장을 구별하고 서로 다른 시장 상태에 따라 자동으로 매개 변수 또는 거래 행동을 조정할 수 있습니다. ADX ((평균 방향 지수) 를 추가하여 트렌드 강도를 측정하거나 브린 대역폭과 같은 변동률 지표를 사용하여 시장 상태를 판단 할 수 있습니다.

  2. 다중 시간 프레임 분석: 더 긴 시간 주기의 신호를 통합하여 추가 필터로 사용한다. 예를 들어, 해상선 트렌드 방향과 시간선 트렌드 방향이 일치하는 경우에만 들어간다. 이는 신호 품질을 향상시킨다.

  3. 손해 방지 전략의 개선: 지지 저항점, 변동율 비율 또는 시간 쇠퇴 인자 등의 방법을 기반으로 손해 차단 전략을 개선하여 손해 차단을 더 유연하고 효율적으로 만들 수 있습니다. 특히 다른 저축 단위로 다른 손해 차단 수준을 설정하여 이익을 더 잘 보호 할 수 있습니다.

  4. 가맹점 전략의 최적화: 현재 포지션 메커니즘은 고정된 ATR 배수를 기반으로 하고 있으며, 트렌드 강도에 따라 포지션 조건을 동적으로 조정하는 것을 고려할 수 있으며, 강한 트렌드에서는 더 적극적으로 포지션, 약한 트렌드에서는 더 보수적으로 포지션한다.

  5. 기계학습 모델을 통합합니다.: 기계 학습 알고리즘을 도입하여 최적의 입시 시점을 예측하거나, 예를 들어, 무작위 숲을 사용하거나, 다양한 기술 지표에 대한 분류를 지원하는 벡터 머신을 사용하여, 성공 가능성이 높은 거래 기회를 식별하는 등 최적의 변수 선택.

  6. 변동율 조정 장치의 증대: 시장의 변동성이 눈에 띄게 변할 때 전략의 매개 변수를 자동으로 조정하여 전략이 다른 시장 환경에 적응할 수 있도록 한다. 예를 들어, 높은 변동성 환경에서 돈치안 통로 주기와 ATR 배수를 증가시켜 잘못된 신호를 줄인다.

요약하다

강화형 동적 채널 브레이크 트렌드 추적 거래 시스템은 고전적인 트렌드 추적 개념과 현대 기술 지표를 결합한 포괄적 인 양적 거래 전략입니다. 동치안 채널 식별 브레이크를 활용하여 SMA와 RSI 필터링 신호를 결합하고 ATR 기반의 포지션 관리 및 동적 상쇄를 통해 원시 해파리 거래 시스템의 간결성을 유지하면서 적응력과 위험 제어 능력을 크게 향상시킵니다.

이 전략은 중·장기 경향이 뚜렷한 시장에 특히 적합하며, 여러 층의 신호 필터링과 점진적 포지션 구축을 통해 주요 추세를 효과적으로 포착하고 위험을 관리할 수 있다. 불안정한 시장에서 성능이 좋지 않을 수 있지만, 제안된 최적화 방향, 특히 시장 상태의 자조와 다중 시간 프레임 분석을 통해 전략의 탄력성과 적응력을 더욱 높일 수 있다.

이 전략은 양적 거래자를 위해 균형 잡힌 프레임 워크를 제공하며, 명확한 규칙 체계를 포함하여 체계적으로 구현 할 수 있으며, 개인 위험 선호와 특정 시장 특성에 맞게 충분한 변수 조정 공간을 남깁니다. 지속적인 모니터링과 최적화를 통해 이 전략은 장기적으로 효과적인 트렌드 추적 도구가 될 잠재력을 가지고 있습니다.

전략 소스 코드
/*backtest
start: 2024-03-05 00:00:00
end: 2025-03-03 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("Enhanced Turtle Trading for BTC 1H", overlay=true)

// --- Adjustable Parameters ---
donchianPeriodEntry = input.int(15, "Donchian Entry Period", minval=1)
donchianPeriodExit = input.int(5, "Donchian Exit Period", minval=1)
atrPeriod = input.int(10, "ATR Period", minval=1)
capitalRisk = input.float(2.0, "Risk per Trade (%)", minval=0.1, step=0.1) / 100
volumeUnits = input.int(4, "Max Units per Position", minval=1)
smaPeriod = input.int(200, "SMA Trend Period", minval=1)
rsiPeriod = input.int(14, "RSI Period", minval=1)
rsiOverbought = input.int(70, "RSI Overbought Level", minval=0, maxval=100)
rsiOversold = input.int(30, "RSI Oversold Level", minval=0, maxval=100)
atrMultiplierStop = input.float(2.0, "ATR Multiplier for Stop", minval=0.1, step=0.1)
atrMultiplierAdd = input.float(1.0, "ATR Multiplier for Adding Units", minval=0.1, step=0.1)

// --- Calculations ---
donchianHiEntry = ta.highest(high, donchianPeriodEntry)
donchianLoEntry = ta.lowest(low, donchianPeriodEntry)
donchianHiExit = ta.highest(high, donchianPeriodExit)
donchianLoExit = ta.lowest(low, donchianPeriodExit)
atr = ta.atr(atrPeriod)
sma = ta.sma(close, smaPeriod)
rsi = ta.rsi(close, rsiPeriod)

// --- Trend Filter ---
uptrend = close > sma
downtrend = close < sma

// --- Entry Conditions with Filters ---
longEntry = high > donchianHiEntry[1] and uptrend and rsi < rsiOverbought
shortEntry = low < donchianLoEntry[1] and downtrend and rsi > rsiOversold

// --- Exit Conditions ---
longExit = low < donchianLoExit[1]
shortExit = high > donchianHiExit[1]

// --- Position Sizing ---
capitalPerUnit = strategy.equity * capitalRisk
unitsSize = math.floor(capitalPerUnit / (atr * close))

// --- Conditions for Adding Units ---
addUnitLong = strategy.position_size > 0 and strategy.position_size / unitsSize < volumeUnits and high > strategy.position_avg_price + atrMultiplierAdd * atr
addUnitShort = strategy.position_size < 0 and math.abs(strategy.position_size) / unitsSize < volumeUnits and low < strategy.position_avg_price - atrMultiplierAdd * atr

// --- Plots ---
plot(donchianHiEntry, "Donchian High Entry", color=color.new(color.green, 0))
plot(donchianLoEntry, "Donchian Low Entry", color=color.new(color.red, 0))
plot(donchianHiExit, "Donchian High Exit", color=color.new(color.lime, 50))
plot(donchianLoExit, "Donchian Low Exit", color=color.new(color.orange, 50))
plot(sma, "SMA Trend", color=color.new(color.blue, 0))

// --- Trade Management ---
// Long Entry
if (longEntry and strategy.position_size <= 0)
    strategy.close_all()
    strategy.entry("Long Entry", strategy.long, qty=unitsSize)

// Short Entry
if (shortEntry and strategy.position_size >= 0)
    strategy.close_all()
    strategy.entry("Short Entry", strategy.short, qty=unitsSize)

// Adding Units
if (addUnitLong)
    strategy.entry("Add Long", strategy.long, qty=unitsSize)
if (addUnitShort)
    strategy.entry("Add Short", strategy.short, qty=unitsSize)

// Exits
if (longExit and strategy.position_size > 0)
    strategy.close_all()
if (shortExit and strategy.position_size < 0)
    strategy.close_all()

// --- Stop Loss and Trailing Stop ---
longStopPrice = strategy.position_avg_price - atrMultiplierStop * atr
shortStopPrice = strategy.position_avg_price + atrMultiplierStop * atr

var float longTrailingStop = na
var float shortTrailingStop = na

if (strategy.position_size > 0)
    longTrailingStop := math.max(longTrailingStop[1], longStopPrice)
    strategy.exit("Long Stop", "Long Entry", stop=longTrailingStop)
    strategy.exit("Long Stop", "Add Long", stop=longTrailingStop)

if (strategy.position_size < 0)
    shortTrailingStop := math.min(shortTrailingStop[1], shortStopPrice)
    strategy.exit("Short Stop", "Short Entry", stop=shortTrailingStop)
    strategy.exit("Short Stop", "Add Short", stop=shortTrailingStop)