이 전략은 슈퍼트렌드 지표, 기하급수적인 이동 평균 (EMA) 및 평균 진정한 범위 (ATR) 를 기반으로하는 트렌드 다음 전략이다. 이 전략은 여러 기술적 지표, 초기 스톱 로스 및 트레이일링 스톱 로스 조합을 통해 동적 트렌드 추적 및 리스크 통제를 달성합니다. 전략의 핵심은 트렌드 확인을 위해 EMA를 사용하여 트렌드 방향 변화를 캡처하고 수익을 보호하기 위해 이중 스톱 로스 메커니즘을 설정하는 데 있습니다.
이 전략은 다음과 같은 핵심 요소에 기반합니다. 1. 트렌드 방향 변동을 식별하기 위한 슈퍼트렌드 지표, ATR 기간 16와 인수 3.02로 계산 2. 트렌드 방향 확인을 위한 트렌드 필터로서의 49 기간 EMA 3. 각 거래에 대한 기본 보호를 제공하는 50 포인트로 설정 된 초기 스톱 손실 4. 후속 스톱 손실은 70 지점 이윤 후에 활성화됩니다. 동적으로 가격 변화를 추적합니다.
이 시스템은 슈퍼트렌드 방향이 하향으로 전환되고 폐쇄 가격이 EMA보다 높을 때, 기존 포지션이 없는 조건에서 긴 신호를 생성합니다. 반대로, 슈퍼트렌드 방향이 하향으로 전환되고 종료 가격이 EMA보다 낮을 때 짧은 신호가 생성됩니다.
이 전략은 여러 가지 기술 지표와 위험 관리 메커니즘을 결합한 완전한 거래 전략이다. 슈퍼 트렌드 지표와 트렌드 캡처, EMA와 방향 확인, 이중 스톱 로스 메커니즘과 결합하여 유리한 리스크-어워드 비율을 달성합니다. 전략의 최적화 잠재력은 주로 동적 매개 변수 조정, 시장 환경 평가 및 위험 관리 시스템 강화에 있습니다. 실제 응용에서는 철저한 역사 데이터 백테스팅을 수행하고 특정 거래 도구 특성에 따라 매개 변수를 조정하는 것이 좋습니다.
/*backtest start: 2024-01-17 00:00:00 end: 2025-01-15 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy(" nifty supertrend triton", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Input parameters atrPeriod = input.int(16, "ATR Length", step=1) factor = input.float(3.02, "Factor", step=0.01) maPeriod = input.int(49, "Moving Average Period", step=1) trailPoints = input.int(70, "Trailing Points", step=1) // Points after which trailing stop activates initialStopLossPoints = input.int(50, "Initial Stop Loss Points", step=1) // Initial stop loss of 50 points // Calculate Supertrend [_, direction] = ta.supertrend(factor, atrPeriod) // Calculate EMA ema = ta.ema(close, maPeriod) // Variables to track stop loss levels var float trailStop = na var float entryPrice = na var float initialStopLoss = na // To track the initial stop loss // Generate buy and sell signals if ta.change(direction) < 0 and close > ema if strategy.position_size == 0 // Only open a new long position if no current position strategy.entry("Buy", strategy.long) entryPrice := close // Record the entry price for the long position initialStopLoss := entryPrice - initialStopLossPoints // Set initial stop loss for long position trailStop := na // Reset trailing stop for long if ta.change(direction) > 0 and close < ema if strategy.position_size == 0 // Only open a new short position if no current position strategy.entry("Sell", strategy.short) entryPrice := close // Record the entry price for the short position initialStopLoss := entryPrice + initialStopLossPoints // Set initial stop loss for short position trailStop := na // Reset trailing stop for short // Apply initial stop loss for long positions if (strategy.position_size > 0) // Check if in a long position if close <= initialStopLoss // If the price drops to or below the initial stop loss strategy.close("Buy", "Initial Stop Loss Hit") // Exit the long position // Apply trailing stop logic for long positions if (strategy.position_size > 0) // Check if in a long position if (close - entryPrice >= trailPoints) // If the price has moved up by the threshold trailStop := na(trailStop) ? close - trailPoints : math.max(trailStop, close - trailPoints) // Adjust trailing stop upwards if not na(trailStop) and close < trailStop // If the price drops below the trailing stop strategy.close("Buy", "Trailing Stop Hit") // Exit the long position // Apply initial stop loss for short positions if (strategy.position_size < 0) // Check if in a short position if close >= initialStopLoss // If the price rises to or above the initial stop loss strategy.close("Sell", "Initial Stop Loss Hit") // Exit the short position // Apply trailing stop logic for short positions if (strategy.position_size < 0) // Check if in a short position if (entryPrice - close >= trailPoints) // If the price has moved down by the threshold trailStop := na(trailStop) ? close + trailPoints : math.min(trailStop, close + trailPoints) // Adjust trailing stop downwards if not na(trailStop) and close > trailStop // If the price rises above the trailing stop strategy.close("Sell", "Trailing Stop Hit") // Exit the short position