다기간 동적 모멘텀 변동성 포착 전략

EMA SMA MCB WaveTrend RISK-REWARD POSITION SIZING Channel Breakout Hourly Confirmation
생성 날짜: 2025-04-16 14:53:29 마지막으로 수정됨: 2025-04-16 14:53:29
복사: 0 클릭수: 404
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

다기간 동적 모멘텀 변동성 포착 전략 다기간 동적 모멘텀 변동성 포착 전략

개요

다중 시간대 동적 변동 변동 캡처 전략은 단선 거래자를 위해 고안된 2분 수준에서 효율적으로 시장 변동을 캡처하는 양적 거래 방법이다. 이 전략은 평평선 채널, 동적 변동 지표와 다중 시간대 확인 메커니즘을 교묘하게 결합하여 전체 거래 시스템을 형성한다. 전략의 핵심은 200 평평선 구성된 가격 채널을 사용하여 시장의 큰 추세 방향을 결정하는 데 있으며, 개선된 WaveTrend 지표를 사용하여 시장의 오버 구매 오버 판매 영역의 역전 기회를 캡처하고 12EMA를 통해 정확한 입장 신호 필터로 사용합니다.

전략 원칙

이 전략의 핵심 원칙은 다단계 신호 확인과 정확한 위험 제어에 기반하며, 구체적으로 다음과 같은 논리를 구현한다:

  1. 트렌드 판단층전략: 200 평균선을 사용 하 여 고 가격과 낮은 가격으로 가격 통로를 구성 하 고 시간 차트 종결 가격과 결합하여 큰 트렌드 방향을 판단 합니다. 시간 종결 가격이 통로의 위쪽에있을 때, 시스템 편향은 더 많이; 시간 종결 가격이 통로의 아래쪽에있을 때, 시스템 편향은 공백합니다.

  2. 동량 변동층전략: WaveTrend 지표의 개선된 버전을 사용하여 시장 동력의 변화를 캡처합니다. WaveTrend 지표는 사용자 정의 함수를 통해f_wavetrend계산 결과, 여기에는 변동하는 트렌드 라인 ((wt1) 와 신호 라인 ((wt2)) 이 포함되어 있습니다. 지표가 초과 구매 수준 ((50) 또는 초과 판매 수준 ((-50) 에 도달하면, 시스템은 극한 가격을 기록하고 지속적인 초과 구매 초과 판매 상태를 계산합니다.

  3. 입국 확인 층이 전략은 여러 조건이 있는 입국 신호를 결합합니다.

    • 여러 조건: 시간 레벨의 가격이 채널 위 + (오버셀 상태 지속 지정 항목 수 또는 WaveTrend 지표 금叉) + 현재 종료 가격은 12EMA보다 크다
    • 공백 조건: 경로 아래의 시간수준 가격 + (오버 바이 상태가 계속되는 특정 항목 또는 웨이브 트렌드 지표 사다리) + 12 EMA 이하의 현재 폐쇄 가격
  4. 위험 관리전략: 동적 스톱로스 및 위험 기반 포지션 계산 방법:

    • 다중 스톱로스는 극저위점과 200저가 평균선으로 설정됩니다.*0.998의 작은 값
    • 하위 스톱 손실은 극한 고점과 200 고값 평균선으로 설정됩니다.*1.002의 큰 값
    • 포지션 크기는 사전 위험 금액을 리스크 단위로 나누어서 계산합니다.
  5. 수익 목표: 시스템은 기본 설정된 리스크-이익비율 (기본의 3배) 에 따라 수익 목표 위치를 자동으로 설정한다.

전략적 이점

  1. 다단계 인증 메커니즘: 전략은 여러 시간대, 여러 지표의 확인 메커니즘을 통합하여 신호 품질을 크게 향상시킵니다. 시간 차트 트렌드 방향과 단기 운동 지표의 결합을 통해 가짜 신호를 효과적으로 감소시킵니다.

  2. 동적 위험 관리: 고정 점수의 중지 손실 설정에 비해, 이 전략의 동적 중지 방법은 시장 구조에 더 적합하며, 극한 점수와 평균선을 결합하여 거래 당 더 합리적인 위험 경계를 제공합니다.

  3. 정확한 위치 제어: 전략은 고정된 위험 금액에 기반한 포지션 계산 방법을 채택하고, 시장의 변동률이 어떻게 변하든, 일관된 위험 구멍을 유지할 수 있으며, 단일 거래의 과도한 손실을 효과적으로 방지한다.

  4. 적응력: 기하변수적 설계를 통해, 전략은 다른 시장 환경에 적응할 수 있다. 사용자는 EMA 길이를 조정할 수 있으며, 초과 판매 시점, 위험 금액 및 위험 수익률과 같은 기하변수를 조정하여 전략을 특정 시장에 더 잘 적응시킬 수 있다.

  5. 시각적 지원전략: 전략은 평균선 통로, 동력 파형, 트렌드 배경 색상 및 입문 표시를 포함한 풍부한 시각적 요소를 제공하여 거래자가 시장 상태와 전략 논리를 더 직관적으로 이해할 수 있도록 도와줍니다.

전략적 위험

이 전략은 여러 장점이 있지만, 다음과 같은 잠재적인 위험도 있습니다.

  1. 트렌드 변화의 위험: 전략은 시간 단위의 트렌드 확인을 사용하지만, 주요 뉴스 또는 블랙 스 사건의 영향으로 시장이 급격히 반전되어 스톱 손실이 신속하게 유발 될 수 있습니다. 중요한 경제 데이터 또는 뉴스 발표 전에 거래를 중지하거나 추가 변동율 필터를 추가하는 것이 해결책입니다.

  2. 낮은 유동성 위험: 거래량이 낮은 시장이나 시간 동안, 슬라이드 증가 또는 거래의 어려움이 발생할 수 있으며, 전략의 성과에 영향을 미칩니다. 주요 거래 시간 동안이 전략을 사용하는 것이 권장되며 시장 유동성이 낮은 품종을 피하십시오.

  3. 매개변수 최적화 위험: 과잉 최적화 파라미터는 전략이 역사 테스트에서 우수한 성능을 보이지만 실생활에서 좋지 않은 효과를 초래할 수 있다. 과잉 적합성을 피하기 위해 파라미터의 신뢰성을 평가하기 위해 전향 검증 방법과 안정성 테스트를 사용하는 것이 좋습니다.

  4. 연속적인 손실 위험: 전략에 엄격한 위험 통제가 있음에도 불구하고, 연속적인 손실이 발생할 수 있습니다. 특히 불안정한 시장에서. 최대 일일 손실과 최대 연속적인 손실 횟수의 제한을 설정하고, 필요하다면 거래를 중단하여 시장 환경을 재평가하는 것이 좋습니다.

  5. 기술 의존의 위험전략은 EMA 및 WaveTrend과 같은 기술 지표에 의존하며, 특정 시장 조건에서 실패 할 수 있습니다. 전략의 안정성을 높이기 위해 기본 필터 또는 다른 비관계 지표를 추가하는 것이 고려 될 수 있습니다.

전략 최적화 방향

정책 코드의 심층 분석을 바탕으로 다음과 같은 측면에서 최적화를 할 수 있습니다.

  1. 시간 필터 도입: 현재 전략은 거래 시간 요소를 고려하지 않으며, 시간 필터를 추가하여 시장 개시 및 종료 전의 높은 변동성을 피하거나 특정 효율적인 거래 시간에 집중할 수 있습니다.

  2. 동적 변수는 스스로 적응합니다.: 시장의 변동률에 따라 자동으로 오버 바이 오버 판매 마이너스 및 확인 항목을 조정하여 전략이 다양한 시장 환경에서 최적의 성능을 유지하도록 할 수 있습니다. 예를 들어, ATR 지표를 사용하여 마이너스를 조정하여 높은 변동률의 시장에서 마이너스를 높이고 낮은 변동률의 시장에서 마이너스를 낮출 수 있습니다.

  3. 다중 지표 통합 점수기존의 웨이브 트렌드 지표 외에도 RSI, MACD 또는 CCI와 같은 보조 지표를 도입하여 통합 스코어 시스템을 구축할 수 있습니다.

  4. 수익 목표 동적 조정: 현재 전략은 고정된 리스크 수익을 사용하여 수익 목표를 설정하는 것보다 저항 지점이나 변동률을 지원하는 동적 수익 목표를 고려하여 시장 구조에 더 잘 적응 할 수 있습니다.

  5. 일부 수익 메커니즘: 분기적 청산 메커니즘을 증가시키고, 특정 수익을 달성한 후에 수익의 일부를 잠금하고, 나머지 포지션은 더 큰 시장을 포착하기 위해 계속 유지되며, 위험 제어와 수익을 극대화 할 필요성을 균형 잡습니다.

  6. 거래 비용 최적화: 전략은 거래 비용 요소를 고려하지 않고, 슬라이드 포인트와 수수료 설정을 추가하고, 불필요한 거래 횟수를 줄이고, 순이익 성과를 높이기 위해 입점 논리를 최적화할 수 있다.

요약하다

다시간 동적 변동 변동 캡처 전략은 구조가 완벽하고 논리가 명확한 단선 거래 시스템으로, 평평한 경로, 동적 변동 지표 및 다시간 변동 확인 메커니즘을 결합하여 거래자에게 고품질의 입문 신호를 제공합니다. 이 전략의 가장 큰 특징은 동적 스톱 손실 설정 및 위험 기반의 위치 통제를 포함하는 포괄적 인 위험 관리 시스템입니다.

시장 변동과 변수 최적화와 같은 잠재적인 위험에도 불구하고, 시간 필터, 동적 변수 자조, 다중 지표 통합 점수와 같은 최적화 조치를 도입함으로써 전략의 안정성과 적응성을 더욱 향상시킬 수 있습니다. 이 전략은 특히 효율적인 단선 거래를 추구하는 동시에 위험 통제에 중점을 둔 정량 거래자에게 적합합니다.

합리적으로 매개 변수를 설정하고 지속적으로 모니터링하고 최적화하면 이 전략은 거래자의 무기군에서 중요한 도구가 될 수 있으며, 급격하게 변동하는 시장에서 거래 기회를 잡을 수 있도록 도와 안정적인 수익을 창출 할 수 있습니다.

전략 소스 코드
/*backtest
start: 2025-03-16 00:00:00
end: 2025-04-15 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("Enhanced Momentum Wave Catcher", overlay=true,
  default_qty_type=strategy.cash,
  default_qty_value=10000,
  initial_capital=10000,
  currency="USD")

// Inputs
fastEmaLength = input.int(12, "12 EMA Length", minval=1)
slowEmaHighLength = input.int(200, "200 High EMA Length", minval=1)
slowEmaLowLength = input.int(200, "200 Low EMA Length", minval=1)
oversoldLevel = input.int(-50, "Oversold Level")
overboughtLevel = input.int(50, "Overbought Level")
riskAmount = input.float(100.0, "Risk Amount ($)", minval=1.0)
rrRatio = input.float(3.0, "Risk-Reward Ratio", minval=0.1)
confirmationBars = input.int(1, "Confirmation Bars After Extreme", minval=0)

// Calculate EMAs
fastEma = ta.ema(close, fastEmaLength)
slowEmaHigh = ta.ema(high, slowEmaHighLength)
slowEmaLow = ta.ema(low, slowEmaLowLength)

// Hourly close
hourlyClose = request.security(syminfo.tickerid, "60", close)

// Enhanced Momentum Wave Calculation
f_wavetrend(src, chlen, avg, malen) =>
    esa = ta.ema(src, chlen)
    de = ta.ema(math.abs(src - esa), chlen)
    ci = (src - esa) / (0.015 * de)
    wt1 = ta.ema(ci, avg)
    wt2 = ta.sma(wt1, malen)
    wtCrossUp = ta.crossover(wt1, wt2)
    wtCrossDown = ta.crossunder(wt1, wt2)
    [wt1, wt2, wtCrossUp, wtCrossDown]

[wt1, wt2, wtCrossUp, wtCrossDown] = f_wavetrend(hlc3, 9, 12, 3)

// Track extremes with improved detection
var int oversoldBars = 0
var int overboughtBars = 0
var float extremeLow = na
var float extremeHigh = na

// Enhanced extreme detection
if wt2 <= oversoldLevel
    oversoldBars := oversoldBars + 1
    extremeLow := na(extremeLow) ? low : math.min(low, extremeLow)
else
    oversoldBars := 0
    extremeLow := na

if wt2 >= overboughtLevel
    overboughtBars := overboughtBars + 1
    extremeHigh := na(extremeHigh) ? high : math.max(high, extremeHigh)
else
    overboughtBars := 0
    extremeHigh := na

// Hourly Channel Status
var bool hourlyAboveChannel = false
var bool hourlyBelowChannel = false

if barstate.isconfirmed
    if hourlyClose > slowEmaHigh
        hourlyAboveChannel := true
        hourlyBelowChannel := false
    else if hourlyClose < slowEmaLow
        hourlyAboveChannel := false
        hourlyBelowChannel := true

// Entry Conditions with improved wave detection
longCondition = hourlyAboveChannel and (oversoldBars > confirmationBars or wtCrossUp) and close > fastEma
shortCondition = hourlyBelowChannel and (overboughtBars > confirmationBars or wtCrossDown) and close < fastEma

// Dynamic Stops
longStop = math.min(extremeLow, slowEmaLow * 0.998)
shortStop = math.max(extremeHigh, slowEmaHigh * 1.002)

// Position Sizing
calculatePositionSize(entryPrice, stopPrice) =>
    riskPerUnit = math.abs(entryPrice - stopPrice)
    riskPerUnit > 0 ? riskAmount / riskPerUnit : na

// Execute Trades
if longCondition and not na(longStop)
    strategy.entry("Long", strategy.long, qty=calculatePositionSize(close, longStop))
    strategy.exit("Long Exit", "Long", stop=longStop, limit=close + (rrRatio * (close - longStop)))

if shortCondition and not na(shortStop)
    strategy.entry("Short", strategy.short, qty=calculatePositionSize(close, shortStop))
    strategy.exit("Short Exit", "Short", stop=shortStop, limit=close - (rrRatio * (shortStop - close)))

// Enhanced Visuals
plot(fastEma, "12 EMA", color=color.orange, linewidth=2)
plot(slowEmaHigh, "200 High EMA", color=color.red, linewidth=1)
plot(slowEmaLow, "200 Low EMA", color=color.green, linewidth=1)

// Wave visualization
plot(wt2, "Momentum Wave", color=#7E57C2, linewidth=2)
hline(oversoldLevel, "Oversold", color=color.red, linestyle=hline.style_dashed)
hline(overboughtLevel, "Overbought", color=color.green, linestyle=hline.style_dashed)

// Channel status
bgcolor(hourlyAboveChannel ? color.new(color.green, 90) : 
       hourlyBelowChannel ? color.new(color.red, 90) : 
       color.new(color.gray, 90))

// Entry markers
plotshape(longCondition, "Long Entry", style=shape.triangleup, 
         location=location.belowbar, color=color.green, size=size.small)
plotshape(shortCondition, "Short Entry", style=shape.triangledown, 
         location=location.abovebar, color=color.red, size=size.small)