동적 추적 파동 추세 전략

EMA SMA HLC MA
생성 날짜: 2024-12-20 16:17:27 마지막으로 수정됨: 2024-12-20 16:17:27
복사: 3 클릭수: 413
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

동적 추적 파동 추세 전략

개요

이 전략은 WaveTrend 지표와 트렌드 추적을 기반으로 한 정량화 거래 시스템이다. WaveTrend 지표와 이동 평균을 결합하여 완전한 거래 의사 결정 프레임워크를 형성한다. 전략은 EMA와 SMA를 사용하여 파동 트렌드 값과 시장 전체의 추세를 계산하고, 오버 바이 오버 소매 시점을 설정하여 시장 전환점을 식별하고, 트렌드 필터와 결합하여 거래의 정확성을 향상시킵니다.

전략 원칙

이 전략의 핵심은 다음과 같은 단계로 이루어집니다.

  1. 먼저 HLC의 평균값을 계산합니다. (최고값, 최저값, 그리고 종료값의 평균값)
  2. HLC의 평균값을 EMA로 평평하게 처리하여 ESA 라인을 얻는다.
  3. HLC 평균값과 ESA 라인 사이의 오차를 계산하고 EMA를 사용하여 평형화
  4. 편차를 기반으로 K값을 계산하고, 두 번의 EMA 평준화를 통해 최종 TCI 라인을 얻는다.
  5. SMA를 사용하여 트렌드 필터로 장기 트렌드 라인을 계산합니다.
  6. TCI 라인이 트렌드 방향에 부합하는 오버 바이 오버 셀 수준을 돌파하면 거래 신호가 생성됩니다.

전략적 이점

  1. 신호 신뢰성: WaveTrend 지표와 트렌드 필터를 결합하여 가짜 신호를 효과적으로 감소시킵니다.
  2. 리스크 관리가 완벽합니다: 명확한 오버 구매 오버 판매 마이너스를 설정하여 적시에 손실을 막습니다.
  3. 유연성: 다양한 시장 조건에 따라 전략 매개 변수가 유연하게 조정됩니다.
  4. 운영 논리가 명확하다: 입출입 조건이 명확하고 실행하기 쉽다.
  5. 종합 분석: 단기 변동과 장기 동향을 동시에 고려하여 거래의 안정성을 향상시킵니다.

전략적 위험

  1. 추세 전환 위험: 급격한 변동 시장에서 지연될 수 있다.
  2. 매개변수 민감도: 매개변수 조합이 다르면 완전히 다른 결과가 나올 수 있습니다.
  3. 시장 적응성: 불안정한 시장에서 거래가 자주 발생할 수 있습니다.
  4. 자금 관리: 시장의 변동에 대응하기 위해 포지션을 합리적으로 통제해야 합니다.
  5. 기술 의존: 기술 의존 지표는 기본적인 요소를 무시할 수 있습니다.

전략 최적화 방향

  1. 변동성 필터를 추가: 높은 변동성 기간 동안 거래 마이너스를 조정
  2. 다주기 분석을 도입: 다른 시간 주기를 결합한 신호의 정확도 향상
  3. 최적화 매개 변수가 적응: 시장 상태에 따라 동적으로 지표 매개 변수를 조정
  4. 정지 손실을 개선: 동적 정지 손실 메커니즘을 추가
  5. 트랜지밍 확인: 트랜지밍 분석을 결합하여 신호 신뢰성을 향상

요약하다

이 전략은 WaveTrend 지표와 트렌드 필터를 능숙하게 결합하여 안정적인 거래 시스템을 구축합니다. 전략은 운영의 간결성을 유지하면서 시장에 대한 전체적인 분석을 수행합니다.

전략 소스 코드
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mojomarv

//@version=6
strategy("WaveTrend with Trend Filter", shorttitle="WaveTrend Trend", overlay=false, initial_capital = 100000)

// Inputs for the WaveTrend indicator
inputLength = input.int(10, title="Channel Length", minval=1)
avgLength = input.int(21, title="Average Length", minval=1)
obLevel = input.float(45, title="Overbought Level")
osLevel = input.float(-45, title="Oversold Level")
showSignals = input.bool(true, title="Show Buy/Sell Signals")

// Trend filter input
maLength = input.int(500, title="Trend MA Length", minval=1)

// Calculate WaveTrend values
hlc_avg = (high + low + close) / 3  // Renamed from hlc3 to hlc_avg
esa = ta.ema(hlc_avg, inputLength)
d = ta.ema(math.abs(hlc_avg - esa), inputLength)
k = (hlc_avg - esa) / (0.015 * d)
ci = ta.ema(k, avgLength)
tci = ta.ema(ci, avgLength)

// Moving average for trend detection
trendMA = ta.sma(close, maLength)

// Determine trend
bullishTrend = close > trendMA
bearishTrend = close < trendMA

// Generate signals with trend filter
crossUp = ta.crossover(tci, osLevel)
crossDown = ta.crossunder(tci, obLevel)

// Plot WaveTrend
plot(tci, title="WaveTrend Line", color=color.new(color.blue, 0), linewidth=2)
hline(obLevel, "Overbought", color=color.red, linestyle=hline.style_dotted)
hline(osLevel, "Oversold", color=color.green, linestyle=hline.style_dotted)
hline(0, "Zero Line", color=color.gray, linestyle=hline.style_solid)

// Plot moving average for trend visualization
plot(trendMA, title="Trend MA", color=color.orange, linewidth=1)

// Plot buy and sell signals
plotshape(showSignals and crossUp, title="Buy Signal", location=location.belowbar, style=shape.labelup, color=color.new(color.green, 0), size=size.small)
plotshape(showSignals and crossDown, title="Sell Signal", location=location.abovebar, style=shape.labeldown, color=color.new(color.red, 0), size=size.small)

// Alerts
alertcondition(crossUp, title="Buy Alert", message="WaveTrend Buy Signal (Trend Confirmed)")
alertcondition(crossDown, title="Sell Alert", message="WaveTrend Sell Signal (Trend Confirmed)")
alertcondition(bullishTrend, title="bull", message="WaveTrend Sell Signal (Trend Confirmed)")
alertcondition(bearishTrend, title="bear", message="WaveTrend Sell Signal (Trend Confirmed)")

// Strategy logic
if crossUp and bullishTrend
    strategy.entry("Long", strategy.long)

if crossDown
    strategy.close("Long")

if crossDown and bearishTrend
    strategy.entry("Short", strategy.short)

if crossUp
    strategy.close("Short")