이 전략은 이동 평균 (MA) 의 기울기와 MA에 대한 가격의 상대적 위치에 따라 거래 결정을 내립니다. MA 기울기가 최소 기울기 문턱보다 크고 가격이 MA보다 높을 때 전략은 긴 위치를 시작합니다. 또한 전략은 리스크를 관리하기 위해 트레일링 스톱 로스를 사용하고 특정 조건 하에서 재입구를 허용합니다. 전략은 역동적 인 스톱 로스 및 재입구 메커니즘을 통해 수익과 위험을 최적화하면서 상승 추세의 기회를 포착하는 것을 목표로합니다.
이 전략은 유동 평균의 기울기와 유동 평균에 대한 가격의 상대적 위치에 따라 트렌드를 결정한다. 트레이일링 스톱 로스 (Trailing Stop Loss) 와 조건부 재입구 메커니즘을 사용하여 트레이드를 관리한다. 전략의 장점은 트렌드를 따르는 능력, 동적 스톱 로스 보호 및 재입구 기회를 포착하는 데 있다. 그러나 전략에는 매개 변수 민감성, 트렌드 인식 오류, 스톱 로스 빈도, 재입구 위험과 같은 잠재적 인 단점도 있다. 최적화 방향에는 트렌드 인식, 스톱 로스 방법, 재입구 조건 및 포지션 사이징을 정제하는 것이 포함된다. 전략을 실제 적용할 때 특정 시장 특성과 거래 스타일에 따라 신중하게 평가하고 조정하는 것이 중요합니다.
/*backtest start: 2024-05-01 00:00:00 end: 2024-05-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("MA Incline Strategy with Trailing Stop-Loss and Conditional Re-Entry", overlay=true, calc_on_every_tick=true) // Input parameters windowSize = input.int(10, title="Window Size") maLength = input.int(150, title="Moving Average Length") minSlope = input.float(0.001, title="Minimum Slope") trailingStopPercentage = input.float(2.8, title="Trailing Stop Percentage (%)") / 100 reEntryPercentage = input.float(4.2, title="Re-Entry Percentage Above MA (%)") / 100 // Calculate the moving average ma = ta.sma(close, maLength) // Calculate the slope of the moving average over the window size previousMa = ta.sma(close[windowSize], maLength) slopeMa = (ma - previousMa) / windowSize // Check conditions isAboveMinSlope = slopeMa > minSlope isAboveMa = close > ma // Variables to track stop loss and re-entry condition var bool stopLossOccurred = false var float trailStopPrice = na // Buy condition buyCondition = isAboveMinSlope and isAboveMa and ((not stopLossOccurred) or (stopLossOccurred and low < ma * (1 + reEntryPercentage))) // Execute strategy if (buyCondition and strategy.opentrades == 0) if (stopLossOccurred and close < ma * (1 + reEntryPercentage)) strategy.entry("Long", strategy.long) stopLossOccurred := false else if (not stopLossOccurred) strategy.entry("Long", strategy.long) // Trailing stop-loss if (strategy.opentrades == 1) // Calculate the trailing stop price trailStopPrice := close * (1 - trailingStopPercentage) // Use the built-in strategy.exit function with the trailing stop strategy.exit("Trail Stop", "Long", stop=close * (1 - trailingStopPercentage)) // Exit condition sellCondition = ta.crossunder(close, ma) if (sellCondition and strategy.opentrades == 1) strategy.close("Long") // Check if stop loss occurred if (strategy.closedtrades > 0) lastExitPrice = strategy.closedtrades.exit_price(strategy.closedtrades - 1) if (not na(trailStopPrice) and lastExitPrice <= trailStopPrice) stopLossOccurred := true // Reset stop loss flag if the price crosses below the MA if (ta.crossunder(close, ma)) stopLossOccurred := false