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

다중 시간 프레임 SMA 트렌드 다이내믹 스톱 로스 전략

저자:차오장, 날짜: 2024-06-03 10:57:05
태그:SMA추세

img

전반적인 설명

이 전략은 시장 트렌드를 포착하기 위해 여러 시간 프레임에서 간단한 이동 평균 (SMA) 을 사용합니다. 단기 및 장기 SMA의 상대적 위치를 비교하여 구매 및 판매 신호를 생성합니다. 이 전략은 또한 잘못된 신호를 필터링하고 거래 정확도를 향상시키기 위해 트렌드 확인 조건을 사용합니다. 또한 리스크 관리를 위해 수익을 취하고 손실을 중지하는 기능을 통합합니다.

전략 원칙

  1. 시장 트렌드의 방향을 결정하기 위해 단기 및 장기 SMA를 계산합니다.
  2. 단기 SMA가 장기 SMA를 넘을 때 구매 신호를 생성하고 단기 SMA가 장기 SMA를 넘을 때 판매 신호를 생성합니다.
  3. 트렌드 확인 조건을 사용하여 잘못된 신호를 필터링합니다. 주요 트렌드가 상승할 때만 구매를 실행하고 주요 트렌드가 하락할 때만 판매를 실행합니다.
  4. 거래 위험을 제어하기 위해 수익을 취하고 손실을 멈추는 기능을 구현합니다. 가격이 미리 정의된 수익을 취하거나 손실을 멈추는 수준에 도달하면 포지션을 닫습니다.
  5. 트렌드 확인 조건에 따라 포지션을 동적으로 조정합니다. 주요 트렌드가 변경되면 트렌드 역전으로 인한 손실을 피하기 위해 즉시 포지션을 닫습니다.

전략적 장점

  1. 트렌드 추적: 다른 시간 프레임에서 SMA를 활용함으로써 전략은 주요 시장 트렌드를 효과적으로 포착하고 다양한 시장 조건에 적응합니다.
  2. 트렌드 확인: 트렌드 확인 조건의 도입은 잘못된 신호를 필터링하여 거래 신호의 신뢰성을 향상시키고 유효하지 않은 거래를 줄입니다.
  3. 리스크 관리: 내장된 수익 및 스톱 로스 기능은 거래 위험을 제어하고 투자자 자본을 보호하는 데 도움이됩니다.
  4. 동적 조정: 트렌드 확인 조건에 따라 포지션이 동적으로 조정되며, 전략이 시장 변화에 적시에 대응하고 트렌드 역전으로 인한 손실을 완화 할 수 있습니다.

전략 위험

  1. 매개 변수 최적화 위험: 전략의 성능은 SMA 기간 및 수익/손실 수준을 취하는 것과 같은 매개 변수 선택에 달려 있습니다. 부적절한 매개 변수 설정은 최적 이하의 전략 성능으로 이어질 수 있습니다.
  2. 불안정한 시장 위험: 불안정한 시장 조건에서 빈번한 거래 신호는 과도한 거래로 인해 거래 비용과 위험을 증가시킬 수 있습니다.
  3. 예상치 못한 사건의 위험: 예상치 못한 주요 사건에 직면하면 시장은 심각한 변동성을 경험할 수 있으며 전략은 신속하게 대응할 수 없으며 상당한 손실을 초래할 수 있습니다.

전략 최적화 방향

  1. 추가 기술 지표 포함: 추세 식별의 정확성과 안정성을 향상시키기 위해 MACD 및 RSI와 같은 다른 기술 지표를 결합하십시오.
  2. 매개 변수 선택 최적화: 역사적 데이터 백테스팅 및 매개 변수 최적화를 통해, SMA 기간의 최적의 조합, 수익/손실 수준을 취하고, 전략 성능을 향상시키기 위한 다른 매개 변수를 찾습니다.
  3. 리스크 관리 개선: 더 발전된 리스크 관리 기술, 예를 들어 동적 스톱 로스 및 포지션 사이징을 도입하여 리스크 노출을 더 통제합니다.
  4. 다른 시장 조건에 적응: 시장 변동성과 트렌드 강도에 따라 전략 매개 변수를 동적으로 조정하여 다른 시장 조건에 적응 할 수 있습니다.

결론

이 다중 시간 프레임 SMA 트렌드 추적 전략은 동적 스톱 로스로 시장 트렌드를 캡처하기 위해 다른 시간 프레임에 있는 SMA를 활용하고, 트렌드 확인 조건을 사용하여 잘못된 신호를 필터링하고, 트렌드 추적 및 리스크 관리 목표를 달성하기 위해 수익/손실 중지 및 동적 위치 조정 기능을 통합합니다. 전략에는 특정 장점이 있지만, 여전히 매개 변수 최적화, 불안정한 시장 및 예기치 않은 이벤트와 같은 위험에 직면합니다. 미래의 최적화는 추가 기술 지표를 통합하고, 매개 변수 선택을 최적화하고, 리스크 관리를 개선하고, 전략의 안정성과 수익성을 높이기 위해 다른 시장 조건에 적응하는 데 초점을 맞출 수 있습니다.


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

//@version=5
strategy("market slayer v3", overlay=true)

// Input parameters
showConfirmationTrend = input(title='Show Trend', defval=true)
confirmationTrendTimeframe = input.timeframe(title='Main Trend', defval='240')
confirmationTrendValue = input(title='Main Trend Value', defval=2)
showConfirmationBars = input(title='Show Confirmation Bars', defval=true)
topCbarValue = input(title='Top Confirmation Value', defval=60)
short_length = input.int(10, minval=1, title="Short SMA Length")
long_length = input.int(20, minval=1, title="Long SMA Length")
takeProfitEnabled = input(title="Take Profit Enabled", defval=false)
takeProfitValue = input.float(title="Take Profit (points)", defval=20, minval=1)
stopLossEnabled = input(title="Stop Loss Enabled", defval=false)
stopLossValue = input.float(title="Stop Loss (points)", defval=50, minval=1)

// Calculate SMAs
short_sma = ta.sma(close, short_length)
long_sma = ta.sma(close, long_length)

// Generate buy and sell signals based on SMAs
buy_signal = ta.crossover(short_sma, long_sma)
sell_signal = ta.crossunder(short_sma, long_sma)

// Plot SMAs
plot(short_sma, color=color.rgb(24, 170, 11), title="Short SMA")
plot(long_sma, color=color.red, title="Long SMA")

// Confirmation Bars
f_confirmationBarBullish(cbValue) =>
    cBarClose = close
    slowConfirmationBarSmaHigh = ta.sma(high, cbValue)
    slowConfirmationBarSmaLow = ta.sma(low, cbValue)
    slowConfirmationBarHlv = int(na)
    slowConfirmationBarHlv := cBarClose > slowConfirmationBarSmaHigh ? 1 : cBarClose < slowConfirmationBarSmaLow ? -1 : slowConfirmationBarHlv[1]
    slowConfirmationBarSslDown = slowConfirmationBarHlv < 0 ? slowConfirmationBarSmaHigh : slowConfirmationBarSmaLow
    slowConfirmationBarSslUp = slowConfirmationBarHlv < 0 ? slowConfirmationBarSmaLow : slowConfirmationBarSmaHigh
    slowConfirmationBarSslUp > slowConfirmationBarSslDown

fastConfirmationBarBullish = f_confirmationBarBullish(topCbarValue)
fastConfirmationBarBearish = not fastConfirmationBarBullish
fastConfirmationBarClr = fastConfirmationBarBullish ? color.green : color.red

fastConfirmationChangeBullish = fastConfirmationBarBullish and fastConfirmationBarBearish[1]
fastConfirmationChangeBearish = fastConfirmationBarBearish and fastConfirmationBarBullish[1]

confirmationTrendBullish = request.security(syminfo.tickerid, confirmationTrendTimeframe, f_confirmationBarBullish(confirmationTrendValue), lookahead=barmerge.lookahead_on)
confirmationTrendBearish = not confirmationTrendBullish
confirmationTrendClr = confirmationTrendBullish ? color.green : color.red

// Plot trend labels
plotshape(showConfirmationTrend, style=shape.square, location=location.top, color=confirmationTrendClr, title='Trend Confirmation Bars')
plotshape(showConfirmationBars and (fastConfirmationChangeBullish or fastConfirmationChangeBearish), style=shape.triangleup, location=location.top, color=fastConfirmationChangeBullish ? color.green : color.red, title='Fast Confirmation Bars')
plotshape(showConfirmationBars and buy_signal and confirmationTrendBullish, style=shape.triangleup, location=location.top, color=color.green, title='Buy Signal')
plotshape(showConfirmationBars and sell_signal and confirmationTrendBearish, style=shape.triangledown, location=location.top, color=color.red, title='Sell Signal')

// Generate trade signals
buy_condition = buy_signal and confirmationTrendBullish and not (strategy.opentrades > 0)
sell_condition = sell_signal and confirmationTrendBearish and not (strategy.opentrades > 0)

strategy.entry("Buy", strategy.long, when=buy_condition, comment ="BUY CALLS")
strategy.entry("Sell", strategy.short, when=sell_condition, comment ="BUY PUTS")

// Take Profit
if (takeProfitEnabled)
    strategy.exit("Take Profit Buy", from_entry="Buy", profit=takeProfitValue)
    strategy.exit("Take Profit Sell", from_entry="Sell", profit=takeProfitValue)

// Stop Loss
if (stopLossEnabled)
    strategy.exit("Stop Loss Buy", from_entry="Buy", loss=stopLossValue)
    strategy.exit("Stop Loss Sell", from_entry="Sell", loss=stopLossValue)

// Close trades based on trend confirmation bars
if strategy.opentrades > 0
    if strategy.position_size > 0
        if not confirmationTrendBullish
            strategy.close("Buy", comment ="CLOSE CALLS")
    else
        if not confirmationTrendBearish
            strategy.close("Sell", comment ="CLOSE PUTS")

// Define alert conditions as booleans
buy_open_alert = buy_condition
sell_open_alert = sell_condition
buy_closed_alert = strategy.opentrades < 0
sell_closed_alert = strategy.opentrades > 0

// Alerts
alertcondition(buy_open_alert, title='Buy calls', message='Buy calls Opened')
alertcondition(sell_open_alert, title='buy puts', message='buy Puts Opened')
alertcondition(buy_closed_alert, title='exit calls', message='exit calls ')
alertcondition(sell_closed_alert, title='exit puts', message='exit puts Closed')

관련

더 많은