이중 EMA 크로스오버의 동적 스톱 로스 기반 전략에 따른 경향

저자:차오장, 날짜: 2024-01-29 09:57:20
태그:

img

전반적인 설명

이 전략은 양방향 트렌드를 따라 EMA 라인의 황금 십자와 죽은 십자 등을 활용하고, 시장의 트렌드 움직임을 포착하기 위해 장기 및 단위 포지션에 대한 동적 스톱 로스 라인을 설정합니다.

전략 논리

  1. 빠른 EMA 라인 (5일) 및 느린 EMA 라인 (20일) 을 계산합니다.
  2. 빠른 선이 아래로부터 느린 선 위에 넘어가면 길게; 빠른 선이 위에서 느린 선 아래로 넘어가면 짧게
  3. 롱 엔트리 후, 엔트리 가격에 동적 스톱 손실을 설정 * (1 - 롱 스톱 손실 비율); 쇼트 엔트리 후, 엔트리 가격에 동적 스톱 손실을 설정 * (1 + 쇼트 스톱 손실 비율)
  4. 가격이 스톱 로스 레벨에 도달하면 스톱 로스 상태의 출구 포지션

이점 분석

  1. EMA 라인은 트렌드를 추적하는 데 더 강력한 능력을 가지고 있습니다. 이중 크로스오버는 트렌드 기회를 효과적으로 잡기 위한 타이밍 도구로 작동합니다.
  2. 동적 스톱 손실은 이익과 함께 움직이며 트렌드 포착 수익을 극대화합니다.
  3. vwap의 추가 필터는 윙사우에 갇히지 않고 신호 품질을 향상시킵니다.

위험 분석

  1. 순수한 트렌드 전략으로서, 그것은 시장에 취약합니다.
  2. 너무 느슨한 스톱 손실은 손실을 증가시킬 수 있습니다.
  3. EMA 크로스오버 신호의 지연 특성으로 가장 좋은 입구 지점을 놓칠 수 있습니다.

ATR 기반 리스크 관리, 스톱 로스 규칙을 최적화, 필터 지표 등을 추가하는 등의 개선은 전략을 개선하는 데 도움이 될 수 있습니다.

개선 방향

  1. 더 나은 적응 스톱을 설정하기 위해 ATR 또는 DONCH와 같은 동적 스톱 손실 지표를 통합
  2. 나쁜 거래를 피하기 위해 MACD, KDJ와 같은 더 많은 필터 지표를 추가하십시오.
  3. 가장 좋은 EMA 길이 조합을 찾기 위해 매개 변수를 최적화
  4. 최적의 매개 변수를 발견하기 위해 기계 학습 방법을 사용

결론

결론적으로, 이것은 전략을 따르는 매우 전형적인 추세입니다. 동적 스톱 손실과 함께 이중 EMA 크로스오버는 트렌드 이윤을 효과적으로 잠금 할 수 있습니다. 한편, 지연 신호 및 광범위한 스톱과 같은 위험은 여전히 존재합니다. 매개 변수 조정, 위험 관리, 필터 추가 등을 통해 더 나은 결과를 얻을 수 있습니다.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy("EMA Crossover Strategy", shorttitle="EMAC", overlay=true,calc_on_every_tick=true)

// Input parameters
shortEmaLength = input(5, title="Short EMA Length")
longEmaLength = input(20, title="Long EMA Length")
priceEmaLength = input(1, title="Price EMA Length")

// Set stop loss level with input options (optional)
longLossPerc = input.float(0.05, title="Long Stop Loss (%)",
     minval=0.0, step=0.1) * 0.01

shortLossPerc = input.float(0.05, title="Short Stop Loss (%)",
     minval=0.0, step=0.1) * 0.01

// Calculating indicators
shortEma = ta.ema(close, shortEmaLength)
longEma = ta.ema(close, longEmaLength)
//priceEma = ta.ema(close, priceEmaLength)
vwap = ta.vwap(close)

// Long entry conditions
longCondition = ta.crossover(shortEma, longEma) and close > vwap
// Short entry conditions
shortCondition = ta.crossunder(shortEma, longEma) and close > vwap

// STEP 2:
// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


if (longCondition)
    strategy.entry("Enter Long", strategy.long)
    strategy.exit("Exit Long",from_entry = "Enter Long",stop= longStopPrice)
plotshape(series=longCondition, title="Long Signal", color=color.green, style=shape.triangleup, location=location.belowbar)


if (shortCondition)
    strategy.entry("Enter Short", strategy.short)
    strategy.exit("Exit Short", from_entry = "Enter Short",stop = shortStopPrice)
plotshape(series=shortCondition, title="Short Signal", color=color.red, style=shape.triangledown, location=location.abovebar)

// Stop loss levels
//longStopLoss = (1 - stopLossPercent) * close
//shortStopLoss = (1 + stopLossPercent) * close

// Exit conditions
//strategy.exit("Long", from_entry="Long", loss=longStopLoss)
//strategy.exit("Short", from_entry="Short", loss=shortStopLoss)

// Plotting indicators on the chart
plot(shortEma, color=color.yellow, title="Short EMA")
plot(longEma, color=color.green, title="Long EMA")
plot(close, color=color.black, title="Close")
plot(vwap, color=color.purple, title="VWAP")

// Plot stop loss values for confirmation
plot(strategy.position_size > 0 ? longStopPrice : na,
     color=color.red, style=plot.style_line,
     linewidth=2, title="Long Stop Loss")

plot(strategy.position_size < 0 ? shortStopPrice : na,
     color=color.blue, style=plot.style_line,
     linewidth=2, title="Short Stop Loss")
// Plotting stop loss lines
//plot(longStopLoss, color=color.red, title="Long Stop Loss", linewidth=2, style=plot.style_line)
//plot(shortStopLoss, color=color.aqua, title="Short Stop Loss", linewidth=2, style=plot.style_line)

더 많은