EMA 이동평균선에 기반한 교차시장 추세 추적 전략 양방향 동적 손절매


생성 날짜: 2024-01-29 09:57:20 마지막으로 수정됨: 2024-01-29 09:57:20
복사: 0 클릭수: 587
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

EMA 이동평균선에 기반한 교차시장 추세 추적 전략 양방향 동적 손절매

개요

이 전략은 EMA 평균에 기반한 황금 포크 도드 포크를 양방향으로 추적하고 동적인 장단 포지션 스톱 로드를 설정하여 트렌드 상황을 포착합니다.

전략 원칙

  1. 계산 빠른 EMA 라인 ((5일) 과 느린 EMA 라인 ((20일)
  2. 빠른 선이 아래쪽에서 느린 선을 통과할 때, 더 많은 일을; 빠른 선이 위쪽에서 아래쪽에서 느린 선을 통과할 때, 공백
  3. 더 많은 것을 할 때, 동적 스톱 손실 라인을 입시 가격으로 설정합니다.(1-Longer Stop Loss Percentage) 포지션 종료 후, 입시 가격으로 동적 중지 라인을 설정합니다(1 + 단기상거래 손실 비율)
  4. 가격에 대응하는 스톱 라인을 터치하면 스톱 오프합니다.

우위 분석

  1. EMA 평균은 트렌드를 추적하는 능력이 강하며, 양방향 크로스 형성 타이머를 통해 트렌드 기회를 효과적으로 잠금 할 수 있습니다.
  2. 동적으로 스톱 라인을 계산하여 수익을 달성한 후 시장에 출시하여 트렌드 수익을 최대화 할 수 있습니다.
  3. 부가적인 필터링 조건으로 VWP를 사용하여, 포착을 방지하고, 신호 품질을 향상시킵니다.

위험 분석

  1. 순수 트렌드 전략, 시장의 흔들림에 쉽게 휘둘릴 수 있다
  2. 너무 느슨하게 중지하면 손실이 커질 수 있습니다.
  3. EMA 평균선 생성 신호의 지연성이 시상 최고 지점을 놓칠 수 있다

ATR을 이용하여 위험을 관리하거나, 단기 손실을 막는 전략을 최적화하거나, 다른 지표와 함께 Noise-Filter 거래를 통해 최적화할 수 있다.

최적화 방향

  1. ATR 또는 DONCH와 같은 동적 중지 지표와 결합하여 시장에 더 적합한 중지 라인을 설정합니다.
  2. 다른 기술 지표 필터링 신호를 추가하여 MACD, KDJ 등과 같은 오류를 줄여줍니다.
  3. 최적화 변수, 최적의 속속 평균선 길이 조합을 찾습니다
  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)