동적 이중 이동 평균 후속 정지 전략

저자:차오장, 날짜: 2024-02-26 11:13:17
태그:

img

전반적인 설명

이 전략은 이중 EMA 라인을 기반으로 하는 동적 트레일링 스톱 전략이다. 시장 트렌드 방향을 결정하기 위해 9일 및 20일 EMA를 사용하고, 거짓 브레이크를 필터링하기 위해 RSI 지표와 결합한다. 또한 동적 스톱 손실을 계산하고 수익 수준을 취하기 위해 ATR 지표를 사용합니다. 이 전략은 중장기 보유에 적합합니다.

전략 논리

이 전략은 9일 EMA를 단기 라인 및 20일 EMA를 중장기 라인으로 사용하여 가격 트렌드를 결정합니다. 가격이 단기 라인을 넘어서고 종료 가격이 이전 날의 최고보다 높을 때, RSI가 70보다 낮고 20일 EMA 마이너스 1 ATR보다 높게 닫을 때 길게됩니다. 가격이 단기 라인을 넘어서고 종료 가격이 이전 날의 최저보다 낮을 때, RSI가 30보다 높고 종료 가격이 20일 EMA 마이너스 1 ATR보다 높을 때 짧게됩니다.

스톱 로스는 종료 가격 마이너스 1.5배 ATR로 설정된다. 영업이익은 종료 가격 더하기 ATR을 취업이익 계수로 곱하여 설정된다. 또한 트렌드 트레일링 스톱 로스를 설정하기 위해 2배 ATR을 사용합니다.

이점 분석

  1. 두 개의 EMA를 사용하여 주요 시장 트렌드를 결정, 소음에 의해 압력을 피합니다
  2. 가짜 브레이크를 필터하는 RSI 표시기를 결합하여 입력 정확도를 향상시킵니다.
  3. 동적 스톱 로스 및 수익 취득 시장 변동성에 적응합니다.
  4. 트렌드 후속 스톱 손실은 수익을 극대화합니다.

위험 분석

  1. EMA 라인은 지연 효과, 단기 기회를 놓칠 수 있습니다.
  2. 부적절한 RSI 매개 변수 설정은 항목을 놓칠 수 있습니다.
  3. 부적절한 스톱 손실/이익 취득 비율은 너무 느슨하거나 엄격할 수 있습니다.
  4. 시장의 격렬한 변동 중에 스톱 로스가 침투될 수 있습니다.

최적화 방향

  1. 최적의 매개 변수를 찾기 위해 다른 EMA 조합을 테스트
  2. 입력 정확성과 포획 기회를 균형을 맞추기 위해 RSI 매개 변수를 최적화
  3. 최적의 구성을 찾기 위해 다른 스톱 로스/프로프트 취업 비율을 테스트
  4. 중지 손실 침투 가능성을 줄이기 위해 더 많은 필터 조건을 추가

요약

전체적으로 이것은 비교적 안정적인 중장기 보유 전략이다. 단기 소음에 영향을 받지 않도록 주요 시장 추세를 결정하기 위해 이중 EMA를 사용합니다. RSI의 추가는 또한 어느 정도 잘못된 브레이크를 필터링합니다. 또한, 동적 스톱 로스 / 취득 메커니즘은 시장 변동성에 따라 전략을 조정할 수 있습니다. 그러나 여전히 이동 평균의 지연 및 스톱 로스 침투 가능성과 같은 위험이 있습니다. 우리는 실제 응용 과정에서 매개 변수 조정 및 최적화를 통해 최적의 구성을 찾아야합니다.


/*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=4
strategy("CJTrade", overlay=true)

short = ema(close, 9)
medium = ema(close, 20)
long = ema(close, 50)
very_long = ema(close, 200)

plot(short, color=color.gray, linewidth=1)
plot(medium, color=color.red, linewidth=1)
plot(long, color=color.black, linewidth=1)
plot(very_long, color=color.blue, linewidth=1)

rsiValue = rsi(close, 14)

near20EMA = close > medium - atr(14)

longCond = crossover(close[1], short) and close >= high[1] and rsiValue < 70 and near20EMA
shortCond = crossunder(close[1], short) and close <= low[1] and rsiValue > 30 and near20EMA

strategy.entry("Long", strategy.long, when=longCond)
strategy.entry("Short", strategy.short, when=shortCond)

atrValue = atr(14)
stopLossLevel = close - atrValue * 1.5

// Dynamic take profit level based on ATR
takeProfitMultiplier = input(2, title="Take Profit Multiplier", minval=0.1, maxval=10, step=0.1)
takeProfitLevel = close + atrValue * takeProfitMultiplier

// Trailing stop loss for long positions
longTrailingStop = close - atrValue * 2
strategy.exit("LongTrailingStop", from_entry="Long", loss=longTrailingStop)

// Trailing stop loss for short positions
shortTrailingStop = close + atrValue * 2
strategy.exit("ShortTrailingStop", from_entry="Short", loss=shortTrailingStop)

strategy.exit("Take Profit/Stop Loss", from_entry="Long", loss=stopLossLevel, profit=takeProfitLevel)
strategy.exit("Take Profit/Stop Loss", from_entry="Short", loss=stopLossLevel, profit=takeProfitLevel)


더 많은