다중파동 추세 교차 위험 관리 정량적 전략

EMA SMA
생성 날짜: 2024-12-13 10:51:31 마지막으로 수정됨: 2024-12-13 10:51:31
복사: 0 클릭수: 341
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

다중파동 추세 교차 위험 관리 정량적 전략

개요

이 전략은 WaveTrend 지표에 기반한 정량 거래 시스템으로, 동적 위험 관리 메커니즘을 결합한다. 전략은 가격 변동의 경향 강도를 계산하여, 오버 바이 오버 셀 영역에서 신호 필터링을 수행하며, 동시에 스톱 로즈, 스톱 스톱 및 추적 스톱 로즈와 같은 위험 제어 수단을 적용하여, 전체적인 거래 관리를 구현한다.

전략 원칙

전략의 핵심은 HLC3 가격으로 WaveTrend 지표를 계산하는 것이다. 우선 n1주기의 지수 이동 평균 ((EMA) 을 기준선으로 계산한 다음 가격과 기준선의 오차를 계산하고, 0.015을 계수로 통일 처리한다. 결국은 두 개의 파도선 wt1과 wt2을 얻는데, 이는 각각 빠른 선과 느린 선을 나타낸다. 거래 신호는 이 두 선과 과매도와 과매도 수준의 교차를 기반으로 생성되며, 동시에 다층의 위험 제어 시스템을 결합한다.

전략적 이점

  1. 신호 시스템은 좋은 트렌드 추적 능력을 갖추고 있으며, 이중 오버 바이 오버 셀 레벨을 통해 신호의 신뢰성을 향상시킵니다.
  2. 고정된 스톱, 고정된 스톱, 동적 추적 스톱을 포함하는 완전한 리스크 관리 시스템
  3. 다양한 시장 상황에 따라 최적화 할 수 있도록 변수가 조정 가능합니다.
  4. 변동률 자조제와 결합하여 전략의 적응성을 향상시킵니다.
  5. 계층적으로 설계된 신호 시스템으로 가짜 신호의 영향을 효과적으로 줄여줍니다.

전략적 위험

  1. 급격하게 변동하는 시장에서 빈번하게 손실이 발생할 수 있는 상황
  2. 잘못된 매개 변수 설정으로 인해 거래 비용이 너무 높을 수 있습니다.
  3. 위축 시장에서 너무 많은 가짜 신호가 발생할 수 있습니다.
  4. 위험과 이익의 불균형을 방지하기 위해 합리적인 중지 및 중지 비율을 설정해야 합니다.
  5. 트래킹 스톱은 빠른 반전 시 큰 회수로 이어질 수 있습니다.

전략 최적화 방향

  1. 거래의 신뢰성을 높이기 위한 신호 확인을 위한 거래량 지표 도입
  2. 다른 시장 환경에 더 잘 적응하도록 스톱 손실 파라미터를 최적화
  3. 트렌드 강도 필터를 늘리고, 수평 시장의 거래 횟수를 줄입니다.
  4. 시장의 변동에 따라 자동으로 중지 위치를 조정하는 동적 중지 메커니즘을 추가하는 것을 고려하십시오
  5. 시간 필터를 도입하여 불리한 거래 시간에 포지션을 열지 마십시오.

요약하다

이 전략은 WaveTrend 지표와 완성된 위험 관리 시스템을 결합하여 보다 포괄적인 양적 거래 전략을 구현한다. 전략의 핵심 장점은 유연성이 강하고 위험이 통제 가능하다는 데 있다. 그러나 여전히 거래자가 실제 시장 상황에 따라 매개 변수를 최적화하고 전략을 개선해야 한다. 지속적인 최적화와 개선으로 이 전략은 실제 거래에서 안정적인 수익을 얻을 것으로 보인다.

전략 소스 코드
/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="WaveTrend [LazyBear] with Risk Management", shorttitle="WT_LB_RM", overlay=true)

// Input Parameters
n1 = input.int(10, "Channel Length")
n2 = input.int(21, "Average Length")
obLevel1 = input.int(60, "Over Bought Level 1")
obLevel2 = input.int(53, "Over Bought Level 2")
osLevel1 = input.int(-60, "Over Sold Level 1")
osLevel2 = input.int(-53, "Over Sold Level 2")

// Risk Management Inputs
stopLossPercent = input.float(50.0, "Stop Loss (%)", minval=0.1, maxval=100)
takeProfitPercent = input.float(5.0, "Take Profit (%)", minval=0.1, maxval=100)
trailingStopPercent = input.float(3.0, "Trailing Stop (%)", minval=0.1, maxval=100)
trailingStepPercent = input.float(2.0, "Trailing Stop Step (%)", minval=0.1, maxval=100)

// WaveTrend Calculation
ap = hlc3 
esa = ta.ema(ap, n1)
d = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ta.ema(ci, n2)
 
wt1 = tci
wt2 = ta.sma(wt1, 4)

// Plotting Original Indicators
plot(0, color=color.gray)
plot(obLevel1, color=color.red)
plot(osLevel1, color=color.green)
plot(obLevel2, color=color.red, style=plot.style_line)
plot(osLevel2, color=color.green, style=plot.style_line)

plot(wt1, color=color.green)
plot(wt2, color=color.red, style=plot.style_line)
plot(wt1-wt2, color=color.blue, style=plot.style_area, transp=80)

// Buy and Sell Signals with Risk Management
longCondition = ta.crossover(wt1, osLevel1) or ta.crossover(wt1, osLevel2)
shortCondition = ta.crossunder(wt1, obLevel1) or ta.crossunder(wt1, obLevel2)

// Strategy Entry with Risk Management
if (longCondition)
    entryPrice = close
    stopLossPrice = entryPrice * (1 - stopLossPercent/100)
    takeProfitPrice = entryPrice * (1 + takeProfitPercent/100)
    
    strategy.entry("Long", strategy.long)
    strategy.exit("Long Exit", "Long", 
                  stop=stopLossPrice, 
                  limit=takeProfitPrice, 
                  trail_price=close * (1 + trailingStopPercent/100), 
                  trail_offset=close * (trailingStepPercent/100))

if (shortCondition)
    entryPrice = close
    stopLossPrice = entryPrice * (1 + stopLossPercent/100)
    takeProfitPrice = entryPrice * (1 - takeProfitPercent/100)
    
    strategy.entry("Short", strategy.short)
    strategy.exit("Short Exit", "Short", 
                  stop=stopLossPrice, 
                  limit=takeProfitPrice, 
                  trail_price=close * (1 - trailingStopPercent/100), 
                  trail_offset=close * (trailingStepPercent/100))