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

슈퍼트렌드 3차원 강화 전략에 따른 역동적 추세

저자:차오장, 날짜: 2025-01-17 14:37:39
태그:ATREMA슈퍼트렌드SLTS

 Dynamic Trend Following SuperTrend Triple Enhancement Strategy

전반적인 설명

이 전략은 슈퍼트렌드 지표, 기하급수적인 이동 평균 (EMA) 및 평균 진정한 범위 (ATR) 를 기반으로하는 트렌드 다음 전략이다. 이 전략은 여러 기술적 지표, 초기 스톱 로스 및 트레이일링 스톱 로스 조합을 통해 동적 트렌드 추적 및 리스크 통제를 달성합니다. 전략의 핵심은 트렌드 확인을 위해 EMA를 사용하여 트렌드 방향 변화를 캡처하고 수익을 보호하기 위해 이중 스톱 로스 메커니즘을 설정하는 데 있습니다.

전략 원칙

이 전략은 다음과 같은 핵심 요소에 기반합니다. 1. 트렌드 방향 변동을 식별하기 위한 슈퍼트렌드 지표, ATR 기간 16와 인수 3.02로 계산 2. 트렌드 방향 확인을 위한 트렌드 필터로서의 49 기간 EMA 3. 각 거래에 대한 기본 보호를 제공하는 50 포인트로 설정 된 초기 스톱 손실 4. 후속 스톱 손실은 70 지점 이윤 후에 활성화됩니다. 동적으로 가격 변화를 추적합니다.

이 시스템은 슈퍼트렌드 방향이 하향으로 전환되고 폐쇄 가격이 EMA보다 높을 때, 기존 포지션이 없는 조건에서 긴 신호를 생성합니다. 반대로, 슈퍼트렌드 방향이 하향으로 전환되고 종료 가격이 EMA보다 낮을 때 짧은 신호가 생성됩니다.

전략적 장점

  1. 다중 확인 메커니즘: 슈퍼 트렌드와 EMA의 결합 사용으로 잘못된 신호를 줄입니다.
  2. 종합적인 위험 관리: 고정 및 동적 트레일링 스톱과 함께 이중 스톱 손실 메커니즘을 사용합니다.
  3. 플렉서블 포지션 관리: 전략 결제액은 자본의 15%로 포지션 크기가 필요에 따라 조정됩니다.
  4. 강한 트렌드 적응력: 다른 시장 환경에서 스스로 조정 할 수 있으며 특히 변동적인 시장에 적합합니다.
  5. 매개 변수 최적화 잠재력: 모든 주요 매개 변수는 다른 시장 특성에 최적화 될 수 있습니다.

전략 위험

  1. 시장을 흔들리는 위험: 시장을 가로질러 거래가 빈번하고 연속적으로 중단될 수 있습니다.
  2. 슬라이드 리스크: 스톱 로스 실행 가격은 빠른 시장에서 예상보다 크게 벗어날 수 있습니다.
  3. 매개 변수 민감성: 전략의 효과는 매개 변수 설정에 민감하며 다른 시장 환경에서 조정이 필요할 수 있습니다.
  4. 트렌드 역전 위험: 트렌드 역전 시점에서 중지가 발생하기 전에 상당한 마감이 발생할 수 있습니다.
  5. 자금 관리 위험: 극심한 변동성 중에도 고정 비율로 포지션 사이징이 상당한 위험을 초래할 수 있습니다.

전략 최적화 방향

  1. 동적 매개 변수 조정: 시장 변동성에 따라 SuperTrend 및 EMA 매개 변수를 자동 조정합니다.
  2. 시장 환경 필터링: 부적절한 조건에서 거래를 중단하기 위해 시장 환경 평가 메커니즘을 추가합니다.
  3. 스톱 로스 최적화: 시장 변동에 더 잘 적응하기 위해 ATR 기반의 동적 스톱 로스 설정을 도입
  4. 포지션 관리 최적화: 변동성 기반의 동적 포지션 사이즈 시스템 개발
  5. 추가 수익 목표: 시장 변동성에 기초한 동적 수익 목표를 설정합니다.

요약

이 전략은 여러 가지 기술 지표와 위험 관리 메커니즘을 결합한 완전한 거래 전략이다. 슈퍼 트렌드 지표와 트렌드 캡처, 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


관련

더 많은