리소스 로딩... 로딩...

EMA 동적 스톱 로스 거래 전략

저자:차오장, 날짜: 2024-06-17 16:17:31
태그:EMARSIMACD

img

전반적인 설명

이 전략은 상대적 강도 지수 (RSI) 및 이동 평균 컨버전스 디버전스 (MACD) 지표에 의해 확인 된 20 일 및 200 일 지수 지수 이동 평균 (EMA) 의 크로스오버를 기반으로 구매 및 판매 신호를 생성합니다. 이 전략은 거래 위험을 관리하고 이익을 잠금하기 위해 동적 스톱 로스 및 고정 수익 목표 방법을 사용합니다.

전략 원칙

  1. 20일 EMA와 200일 EMA를 계산합니다. 20일 EMA가 200일 EMA를 넘을 때 구매 신호가 생성되며, 20일 EMA가 200일 EMA를 넘을 때 판매 신호가 생성됩니다.
  2. EMA 크로스오버 신호를 확인하기 위해 RSI와 MACD를 사용한다. 구매 신호는 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")


관련

더 많은