EMA 동적 손절매 거래 전략

EMA RSI MACD
생성 날짜: 2024-06-17 16:17:31 마지막으로 수정됨: 2024-06-17 16:17:31
복사: 0 클릭수: 635
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

EMA 동적 손절매 거래 전략

개요

이 전략은 20일과 200일 지수 이동 평균 ((EMA) 의 교차 신호를 기반으로, 상대적으로 약한 지수 ((RSI) 와 이동 평균 수렴 분산 지수 ((MACD) 의 결합으로 확인하여 구매 및 판매 신호를 생성한다. 동시에, 이 전략은 거래 위험을 관리하고 수익을 잠금하기 위해 동적 스톱 손실과 고정 목표 수익을 사용하는 방법을 사용합니다.

전략 원칙

  1. 20일 및 200일 EMA를 계산하면, 20일 EMA 위에 200일 EMA를 넘으면 구매 신호가 발생하고, 20일 EMA 아래 200일 EMA를 넘으면 판매 신호가 발생한다.
  2. RSI와 MACD를 사용하여 EMA의 교차 신호를 확인하기 위해, RSI가 50보다 높고 MACD 라인이 신호 라인보다 높을 때만 구매를 실행합니다. RSI가 50보다 낮고 MACD 라인이 신호 라인보다 낮을 때만 판매를 실행합니다.
  3. 고정된 목표 수익률 (예: 20%) 과 초기 중지 손실률 (예: 10%) 을 설정한다.
  4. 포지션 보유 수익이 목표 수익률에 도달하면, 현 가격의 10% 이하로 중지 가격을 올리고, 동적인 중지 손실을 달성한다.
  5. 가격이 동적 스톱로스 가격에 닿을 때, 평형은 이익을 얻습니다.

전략적 이점

  1. 여러 기술 지표와 결합하여 거래 신호를 확인하여 신호의 신뢰도를 높였습니다.
  2. 동적 스톱을 사용하여 수익을 고정하면서 가격에 약간의 회수 공간을 부여하여 조기 평점을 피하십시오.
  3. 고정된 목표 수익률을 설정하여 위험을 통제하고 안정적인 수익을 달성하는 데 도움이됩니다.

전략적 위험

  1. EMA 교차 신호는 종종 가짜 신호가 발생하여 거래 비용이 증가 할 수 있습니다.
  2. 불안정한 시장에서 이 전략은 연속적인 손실이 발생할 수 있다.
  3. 고정된 목표 수익률과 중지 손실률은 다른 시장 상황에 적응할 수 없으며 시장의 변동성에 따라 조정해야 합니다.

전략 최적화 방향

  1. 신호의 정확성과 신뢰성을 높이기 위해 더 많은 기술 지표 또는 시장 감정 지표를 도입하십시오.
  2. 시장의 변동성과 자산 특성에 따라 동적으로 조정하는 적응된 목표 수익률과 정지율을 사용한다.
  3. 시장의 추세와 변동 주기와 결합하여 다른 시장 환경에서 다른 파라미터 설정을 사용합니다.

요약하다

이 전략은 EMA 교차 신호와 RSI 및 MACD 확인을 결합하고 동적 정지 및 고정 목표 수익의 위험 관리 방법을 통해 추세 시장에서 안정적인 수익을 올릴 가능성이 있습니다. 그러나 불안정한 시장에서 이 전략은 빈번한 거래와 연속적인 손실의 위험에 직면 할 수 있습니다. 따라서 전략의 적응성과 안정성을 높이기 위해 추가적인 최적화와 개선이 필요합니다.

전략 소스 코드
/*backtest
start: 2023-06-11 00:00:00
end: 2024-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA Crossover Strategy with RSI and MACD Confirmation and Dynamic Trailing Stop Loss", overlay=true)

// Calculate EMAs
ema20 = ta.ema(close, 20)
ema200 = ta.ema(close, 200)

// Calculate RSI
rsi = ta.rsi(close, 14)

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)

// Plot EMAs, RSI, and MACD on the chart
plot(ema20, color=color.blue, title="EMA 20")
plot(ema200, color=color.red, title="EMA 200")
hline(70, "Overbought", color=color.red)
hline(30, "Oversold", color=color.green)
plot(rsi, title="RSI", color=color.orange)
hline(0, "Zero Line", color=color.gray)
plot(macdLine, title="MACD Line", color=color.aqua)
plot(signalLine, title="Signal Line", color=color.fuchsia)

// Strategy parameters
targetProfitPercent = 20
trailingStopIncrement = 10

// Strategy variables
var float initialStopLevel = na
var float trailingStopLevel = na

// Strategy rules with RSI and MACD confirmation
longCondition = ta.crossover(ema20, ema200) and rsi > 50 and macdLine > signalLine
shortCondition = ta.crossunder(ema20, ema200) and rsi < 50 and macdLine < signalLine

// Execute trades
if (longCondition)
    strategy.entry("Buy Call", strategy.long)
    initialStopLevel := strategy.position_avg_price * (1 - 0.10) // Initial stop-loss at 10% below entry price

if (shortCondition)
    strategy.entry("Buy Put", strategy.short)

// Calculate profit and loss targets
takeProfit = strategy.position_avg_price * (1 + targetProfitPercent / 100) // 20% profit target

// Update trailing stop loss
if (strategy.opentrades > 0)
    if (strategy.position_size > 0) // Long position
        if (strategy.netprofit >= takeProfit)
            // Update stop-loss based on profit increments
            if (trailingStopLevel == na)
                trailingStopLevel := strategy.position_avg_price * (1 - 0.10) // Initial trailing stop at 10% below entry price
            else
                if (strategy.position_avg_price * (1 - 0.10) > trailingStopLevel)
                    trailingStopLevel := strategy.position_avg_price * (1 - 0.10) // Increase stop-loss to 10% below current price
        
        // Apply trailing stop loss
        strategy.exit("Take Profit", "Buy Call", stop=trailingStopLevel)

// Plot buy and sell signals on the chart
plotshape(series=longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")