동적 이동 평균 추세 추종 및 변동성 적응형 나스닥 선물 거래 전략

EMA VWAP ATR TP SL BE MNQ
생성 날짜: 2025-02-24 10:25:47 마지막으로 수정됨: 2025-02-27 16:44:56
복사: 1 클릭수: 499
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

동적 이동 평균 추세 추종 및 변동성 적응형 나스닥 선물 거래 전략 동적 이동 평균 추세 추종 및 변동성 적응형 나스닥 선물 거래 전략

개요

이것은 나스닥 100 미니 퓨처스를 위해 특별히 설계된 일일 거래 전략이다. 전략의 핵심은 양평선 시스템을 사용하여 거래량 가중 평균 가격 ((VWAP) 을 트렌드 확인으로 결합하고 실제 변동의 폭 ((ATR) 을 통해 스톱 로스를 동적으로 조정한다. 이 전략은 자금을 안전하게 유지하면서 엄격한 위험 제어와 동적인 포지션 관리를 통해 시장 추세를 포착한다.

전략 원칙

이 전략은 다음과 같은 핵심 구성 요소를 기반으로 합니다.

  1. 신호 시스템은 9주기 및 21주기 지수 이동 평균 ((EMA) 의 교차를 사용하여 트렌드 방향을 식별한다. 단기 평균선이 장기 평균선을 상향으로 가로지르면 다중 신호가 발생하고, 반대로 공백 신호가 발생한다.
  2. VWAP를 트렌드 확인 지표로 사용하여, 가격이 VWAP 위에 위치해야 더 많은 포지션을 열 수 있고, VWAP 아래에 위치하면 빈 포지션을 열 수 있습니다.
  3. 리스크 관리 시스템은 ATR 기반의 동적 스톱로드를 사용하며, 다중 포지션 스톱로드는 2배의 ATR, 빈 포지션은 1.5배의 ATR로 설정된다.
  4. 수익 목표는 비대칭적인 디자인을 채택하고, 다중 포지션은 3:1의 수익 위험 비율을 사용하고, 빈 포지는 2:1의 수익 위험 비율을 사용합니다.
  5. 이동 상쇄 및 보전 상쇄 메커니즘이 설정되어 있으며, 가격이 목표 수익의 50%에 도달하면 상쇄 지점은 비용 지점으로 이동한다.

전략적 이점

  1. 동적 적응성 - ATR을 통해 중지 및 이동 중지 파라미터를 조정하여 전략이 다양한 시장 변동 환경에 자동으로 적응 할 수 있습니다.
  2. 리스크 관리가 완벽합니다. 거래당 리스크는 1500달러 이하로 제한되며, 7500달러의 주당 최대 손실 제한이 설정되어 있습니다.
  3. 비대칭 수익 디자인 - 시장의 특성을 고려하여 다공간 전략은 다른 수익 위험 비율과 포지션 크기를 적용하여 실제 시장 상황에 더 적합합니다.
  4. 다중 확인 메커니즘 - EMA 교차 및 VWAP 확인과 결합하여 가짜 침입 신호를 효과적으로 줄인다.
  5. 완전한 손해 방지 시스템 - 고정 손해, 이동 손해 및 보증 손해 방지 삼중 보호 포함.

전략적 위험

  1. 흔들림 시장 위험 - 가로판 흔들림 시장에서, 평행선 교차 신호는 더 많은 가짜 신호를 생성할 수 있다.
  2. 슬라이드 포인트 위험 - 빠른 시점에 실제 거래 가격이 신호 가격과 큰 편차가 있을 수 있다.
  3. 체계적 위험 - 시장에서 중요한 사건이 발생했을 때, 손해 차단이 무효화 될 수 있다.
  4. 과도한 거래 위험 - 자주 신호는 거래 비용을 증가시킬 수 있습니다.
  5. 자금 관리 위험 - 초기 자금이 적으면 전체 포지션 관리 계획을 효과적으로 수행 할 수 없습니다.

전략 최적화 방향

  1. 거래량 필터 도입 - 거래량이 조건을 충족할 때만 거래를 실행하는 거래량 확인 메커니즘을 추가할 수 있다.
  2. 최적화 시간 필터링 - 특정 거래 시간 창을 추가하는 것을 고려하여 큰 변동이있는 개시 및 종료 시기를 피하십시오.
  3. 동적 조정 파라미터 - 다른 시장 환경에 따라 평균 선주기 및 ATR 배수를 자동으로 조정할 수 있다.
  4. 시장 정서 지표 증가 - 거래 빈도 및 포지션 크기를 조정하기 위해 VIX와 같은 변동성 지표를 도입한다.
  5. 모바일 스톱을 개선 - 더 유연한 모바일 스톱 알고리즘을 설계하여 트렌드를 파악하는 능력을 향상시킬 수 있습니다.

요약하다

이 전략은 평선 시스템과 VWAP의 결합을 통해 안정적인 트렌드 추적 시스템을 구축하고, 다층의 위험 제어 메커니즘을 통해 자금을 보호한다. 전략의 가장 큰 특징은 그것의 적응성과 위험 관리 능력이다. ATR을 통해 동적으로 다양한 파라미터를 조정하여 다양한 시장 환경에서 안정적인 성능을 유지할 수 있다.

전략 소스 코드
/*backtest
start: 2024-02-25 00:00:00
end: 2025-02-22 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("Nasdaq 100 Micro - Optimized Risk Management", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// === INPUTS ===
riskPerTrade = input(1500, title="Max Risk Per Trade ($)")
profitTarget = input(3000, title="Target Profit Per Trade ($)")
maxWeeklyLoss = input(7500, title="Max Weekly Loss ($)")
emaShort = input(9, title="Short EMA Period")
emaLong = input(21, title="Long EMA Period")
vwapEnabled = input(true, title="Use VWAP?")
contractSizeMax = input(50, title="Max Micro Contracts per Trade")
atrLength = input(14, title="ATR Length")

// === INDICATORS ===
emaFast = ta.ema(close, emaShort)
emaSlow = ta.ema(close, emaLong)
vwapLine = ta.vwap(close)
atrValue = ta.atr(atrLength)

// === CONDITIONS ===
// Long Entry: EMA Crossover + Above VWAP
longCondition = ta.crossover(emaFast, emaSlow) and (not vwapEnabled or close > vwapLine)

// Short Entry: EMA Crossunder + Below VWAP
shortCondition = ta.crossunder(emaFast, emaSlow) and (not vwapEnabled or close < vwapLine)

// Position Size Calculation (Adjusted for Shorts)
riskPerPoint = 5 // MNQ Micro Futures = $5 per point per contract
stopLossPointsLong = atrValue * 2   // More room for longs
stopLossPointsShort = atrValue * 1.5 // Tighter for shorts
contractsLong = math.min(contractSizeMax, math.floor(riskPerTrade / (stopLossPointsLong * riskPerPoint)))
contractsShort = math.min(math.floor(contractsLong * 0.75), contractSizeMax) // Shorts use 75% of long size

// Stop Loss & Take Profit
longSL = close - stopLossPointsLong
longTP = close + (stopLossPointsLong * 3) // 1:3 Risk-Reward for longs
shortSL = close + stopLossPointsShort
shortTP = close - (stopLossPointsShort * 2) // 1:2 Risk-Reward for shorts

// === BREAK-EVEN STOP MECHANISM ===
longBE = close + (stopLossPointsLong * 1.5) // If price moves 50% to TP, move SL to entry
shortBE = close - (stopLossPointsShort * 1) // More aggressive on shorts

// === TRAILING STOP LOGIC ===
trailStopLong = close - (atrValue * 1.5)
trailStopShort = close + (atrValue * 1)

// === EXECUTION ===
// Check for weekly loss limit
weeklyLoss = strategy.netprofit < -maxWeeklyLoss

if (longCondition and not weeklyLoss)
    strategy.entry("Long", strategy.long, contractsLong)
    strategy.exit("TakeProfitLong", from_entry="Long", limit=longTP, stop=longSL, trail_points=atrValue * 1.5, trail_offset=atrValue * 0.5)
    strategy.exit("BreakEvenLong", from_entry="Long", stop=longBE, when=close >= longBE)

if (shortCondition and not weeklyLoss)
    strategy.entry("Short", strategy.short, contractsShort)
    strategy.exit("TakeProfitShort", from_entry="Short", limit=shortTP, stop=shortSL, trail_points=atrValue * 1, trail_offset=atrValue * 0.5)
    strategy.exit("BreakEvenShort", from_entry="Short", stop=shortBE, when=close <= shortBE)

// === STOP TRADING IF WEEKLY LOSS EXCEEDED ===
if (weeklyLoss)
    strategy.close_all()