동적 갭 채우기 평균 회귀 전략: 추세 및 볼륨 필터

EMA ATR RSI MEAN REVERSION GAP FILL Trend Filter VOLUME FILTER Trailing Stop
생성 날짜: 2025-05-16 16:08:41 마지막으로 수정됨: 2025-05-16 16:10:56
복사: 0 클릭수: 329
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

동적 갭 채우기 평균 회귀 전략: 추세 및 볼륨 필터 동적 갭 채우기 평균 회귀 전략: 추세 및 볼륨 필터

개요

동적 격차 채우기 평균 회귀 전략은 일일 격차 채우기 현상에 특화된 수량 거래 시스템이다. 이 전략은 시장에서 눈에 띄는 격차가 발생한 후 이러한 격차를 채우기 위해 회귀가 있는 자연적인 경향을 기반으로 한다. 이 전략은 3분 시간 프레임에 따라 운영되며, 특정 가격 패턴, 트렌드 방향 및 거래량 확인을 사용하여 높은 확률의 거래 기회를 필터링한다.

전략 원칙

이 전략의 핵심 논리는 틈새를 발견하고 채우는 것을 중심으로 펼쳐진다:

  1. 구멍 탐지 메커니즘전략: 전략은 하루 동안 0.5% 이상의 가격 격차를 먼저 식별한다. 상거래 하루의 종결 가격과 그날의 개시 가격을 비교하여 상향 격차 또는 하향 격차를 결정한다.

  2. 트렌드 확인: 50주기 및 200주기의 지수 이동 평균을 사용하여 ((EMA) 현재 시장 추세를 결정한다. EMA50이 EMA200보다 크면만 더 많이 고려한다. EMA50이 EMA200보다 작으면만 더 많이 고려한다.

  3. 삼진 역전 모드: 전략은 3개의 연속 이 반전 모드를 형성하도록 요구한다.[2] < close[1] close[1] > close의 하강 모드。

  4. 거래량 필터선택 가능한 거래량 필터는 거래량이 20주기 평균보다 높을 때만 거래되는 것을 보장하여 신호의 신뢰성을 증가시킵니다.

  5. RSI 필터: 코스피 거래에 대해 RSI > 60 조건이 추가되어 시장이 상대적으로 과매매 상태임을 보장하고 저가 신호의 품질을 향상시킵니다.

입시 조건은 위의 모든 요소를 포함합니다.

  • 더 많이: 하향 격차 + 삼성전자 상승 패턴 + 거래량 확인 + 상승 추세
  • 공백: 상위 격차 + 삼진 하향 모드 + 거래량 확인 + 하향 추세 + RSI 과매매

전략적 이점

  1. 명확한 시장의 비정상성이 전략은 시장의 특정 비정상적인 탄소 가격 격차에 초점을 맞추고 있습니다. 이는 통계적으로 중요한 시장 현상이며 예측 우위를 제공합니다.

  2. 다중 인증 메커니즘이 전략은 틈새, 트렌드 필터링, 거래량 확인 및 가격 모형을 결합하여 가짜 신호의 가능성을 크게 줄입니다.

  3. 정확한 위험 관리: ATR을 사용하여 중지 및 수익 목표를 설정하여 위험 관리가 시장의 변동성에 적응하도록 보장합니다. 최대 달러 손실 금액을 설정하여 거래 당 위험 을 효과적으로 제어합니다.

  4. 동적 추적 손실: 거래가 2×ATR의 수익 수준에 도달하면, 추적 손실을 활성화 할 수 있습니다. 이것은 수익 거래가 일부 수익을 유지하면서 계속 작동하도록 허용합니다.

  5. 유연한 변수 설정: 전략은 여러 가지 조정 가능한 파라미터를 제공합니다 (장치 크기, ATR 배수, 최대 손실 금액 등) 거래자의 위험 선호도 및 시장 조건에 따라 최적화 할 수 있습니다.

  6. 시간 제한 보호: 최대 지분 기간을 설정하여 ((50 기둥), 거래가 오랜 시간 동안 손실 상태에서 발생하는 것을 방지하여 자금 사용 효율을 최적화합니다.

  7. 시장의 미시구조에 적합합니다.이 전략은 시장의 미시 구조와 일치하며, 하루 내 거래에 초점을 맞추고, 야간 위험을 피합니다.

전략적 위험

  1. 평균적인 승률전략: 약 46%의 승률은 손실 거래의 수가 이익 거래의 수보다 약간 더 많다는 것을 의미합니다. 전체적으로 이익이지만, 연속 손실 기간을 통과하기 위해 좋은 심리적 용인력이 필요할 수 있습니다.

  2. 시장 의존성전략은 NASDAQ (US100) 의 3분 차트에서만 적용되는 것으로 명시되어 있으며 다른 자산이나 시간 프레임에 테스트되거나 최적화되지 않았습니다. 이것은 전략의 적용 범위를 제한합니다.

  3. 매개변수 민감도: 대부분의 양적 전략과 마찬가지로, 성능은 파라미터 선택에 매우 민감할 수 있다. 과도한 최적화는 재측량 성능이 좋지만 실판 거래 성능이 좋지 않을 수 있다.

  4. 제한된 거래 빈도매일 한 번만 거래하는 것은 수익 가능성을 제한하고 특히 변동성이 낮은 날에는 다른 기회를 놓칠 수 있습니다.

  5. 틈의 빈도 위험전략은 특정 규모의 격차 발생에 의존하며, 시장 평온 기간 동안 거래 신호가 오랫동안 없을 수 있습니다.

  6. 전략적 불황의 위험: 더 많은 거래자들이 비슷한 전략을 사용함에 따라, 격차 채우는 효과는 약화되어 전략의 효율성이 떨어질 수 있습니다.

완화 조치:

  • 엄격한 자금 관리를 실시하고, 거래 당 위험 금액은 계좌의 1~2%를 초과하지 않는다.
  • 규칙적으로 재확인하고 최적화하는 정책 매개 변수
  • 다른 시장 조건에 따라 격차 값을 조정하는 것을 고려하십시오.
  • 실시간 거래에 충분한 시간을 할애하여 전략의 성과를 모니터링하십시오.

전략 최적화 방향

  1. 트렌드 필터 강화: 현재 전략은 간단한 EMA 교차를 트렌드 지표로 사용한다. ADX ((평균 방향 지수) 와 같은 더 복잡한 트렌드 식별 방법을 통합하거나, 필터링 품질을 향상시키기 위해 다중 시간 프레임 트렌드 분석을 고려할 수 있다.

  2. 입학 시점을 최적화: 현재 삼성전자 역전 패턴은 너무 단순할 수 있다. 진입 시기를 최적화하기 위해 도표 형식, 지지/저항 수준 또는 가격 행동 분석과 같은 기술 확인을 추가하는 것을 고려하십시오.

  3. 동적 중지 및 수익 목표: 고정된 ATR 배수를 사용하는 것이 합리적이지만 시장의 변동성이나 일간 시간에 따라 동적으로 조정할 수 있습니다. 예를 들어, 높은 변동성 기간에 ATR 배수를 증가하거나 거래 시간에 따라 위험 매개 변수를 조정합니다.

  4. 기계 학습 강화: 기계 학습 모델을 통해 역사적인 격차를 채우는 성공률의 특성을 분석하는 것 (예: 격차의 크기, 시장 조건, 시간 등) 은 전략의 성능을 더욱 향상시킬 수 있습니다.

  5. 거래 빈도를 높여라: 같은 거래일 내에 여러 개의 거래를 허용하기 위해 전략을 수정하는 것을 고려하십시오. 특히 현재 거래가 종료되고 새로운 유효한 신호가 발생했을 때. 이것은 전체 수익을 증가시킬 수 있지만 과도한 거래를 도입하지 않도록 신중한 테스트가 필요합니다.

  6. 관련 시장 신호 통합: 관련 시장의 통합 (예: 선물, ETF 또는 관련 산업 지수) 의 신호를 확인으로 고려하십시오.

  7. 시간 필터: 시장은 다른 시간대에 다르게 행동할 수 있다. 거래 시간에 기반한 필터를 추가하는 것은 전략의 성능을 향상시킬 수 있다. 예를 들어 시장 개시와 종결의 높은 변동성 기간을 회피한다.

요약하다

동적 격차 채우기 평균 회귀 전략 (Dynamic Gap Filling Mean Return Strategy) 은 시장의 격차 회귀를 이용하는 통계적 경향에 초점을 맞춘 정교하게 설계된 일일 거래 시스템이다. 이 전략은 격차 탐지, 트렌드 확인, 거래량 필터링 및 가격 패턴 식별을 결합하여 다단계 거래 의사 결정 프레임워크를 만듭니다.

전략의 핵심 장점은 명확하게 정의된 입시 규칙, ATR 기반의 위험 관리 및 여러 확인 메커니즘에 있다. 승률은 중간 (~ 46%) 이지만, 정확한 리스크 수익 설정 (~ 2: 1의 리스크 수익 비율) 을 통해 전략은 재검토에서 긍정적인 수익을 낼 수 있다.

이 전략은 특정 시장의 특성을 활용하려는 거래자들에게 특히 적합하며, 특히 NASDAQ의 일일 거래에 관심이 있는 투자자들에게 적합합니다. 그러나 잠재적인 사용자는 전략의 한계에 주의해야하며, 시장 의존성과 변수 민감성을 포함합니다.

제안된 최적화 조치를 실행함으로써, 특히 트렌드 필터를 강화하고 진입 시기를 변경함으로써, 이 전략은 성능과 안정성을 더욱 향상시킬 수 있습니다. 시장 조건의 변화에 따라 매개 변수를 정기적으로 재평가하고 조정하는 것이 장기적인 성공을 유지하는 데 중요합니다.

결국, 이 전략은 시장의 특정 행동 패턴을 체계적으로 포착하기 위해 기술적 분석과 통계적 개념을 결합한 균형 잡힌 수량 거래 방법을 나타냅니다.

전략 소스 코드
/*backtest
start: 2025-04-15 00:00:00
end: 2025-05-14 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("Gap Fill Mean Reversion Strategy – NASDAQ 3-Minute", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// === INPUTS ===
gapPct        = input.float(0.5, title="Minimum Gap (%)") / 100
useVolume     = input.bool(true, title="Use Volume Filter")
atrMultTP     = input.float(2.0, title="TP Multiplier (ATR)")
atrMultSL     = input.float(1.0, title="SL Multiplier (ATR)")
trailStartATR = input.float(2.0, title="Trailing Trigger (ATR)")
trailOffsetATR = input.float(1.0, title="Trailing Offset (ATR)")
maxSLusd      = input.float(100, title="Max Stop Loss (USD)")
maxBars       = input.int(50, title="Max Bars in Trade")

// === INDICATORS ===
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
trendUp = ema50 > ema200
trendDown = ema50 < ema200

rsi = ta.rsi(close, 14)
rsiShortCond = rsi > 60

// === GAP DETECTION ===
prevClose = request.security(syminfo.tickerid, "D", close[1])
todayOpen = request.security(syminfo.tickerid, "D", open)
gapUp     = todayOpen > prevClose * (1 + gapPct)
gapDown   = todayOpen < prevClose * (1 - gapPct)

// === VOLUME FILTER ===
volumeOK = not useVolume or (volume > ta.sma(volume, 20))

// === 3-CANDLE REVERSAL CONFIRMATION ===
threeDown = close[2] > close[1] and close[1] > close
threeUp   = close[2] < close[1] and close[1] < close

// === ENTRY CONDITIONS ===
longCond  = gapDown and threeUp and volumeOK and trendUp
shortCond = gapUp and threeDown and volumeOK and trendDown and rsiShortCond

// === ATR AND CALCULATIONS ===
atr = ta.atr(14)
entryPrice = strategy.opentrades > 0 ? strategy.opentrades.entry_price(0) : na
inLong = strategy.position_size > 0
inShort = strategy.position_size < 0

// === TRAILING STOP CONDITIONS ===
trailTrigger = atr * trailStartATR
trailOffset = atr * trailOffsetATR

longTrailCond = inLong and close > entryPrice + trailTrigger
shortTrailCond = inShort and close < entryPrice - trailTrigger

// === STOP LOSS DISTANCE (fixed USD limit applied) ===
slDistance = math.min(atr * atrMultSL, maxSLusd / syminfo.pointvalue)

// === ENTRIES ===
if (longCond)
    strategy.entry("Gap Long", strategy.long)

if (shortCond)
    strategy.entry("Gap Short", strategy.short)

// === EXITS ===
// LONG
if (longTrailCond)
    strategy.exit("Trail Long", from_entry="Gap Long", trail_points=trailOffset, trail_offset=trailOffset)
else if (inLong)
    strategy.exit("SL/TP Long", from_entry="Gap Long", stop=entryPrice - slDistance, limit=entryPrice + atr * atrMultTP)

// SHORT
if (shortTrailCond)
    strategy.exit("Trail Short", from_entry="Gap Short", trail_points=trailOffset, trail_offset=trailOffset)
else if (inShort)
    strategy.exit("SL/TP Short", from_entry="Gap Short", stop=entryPrice + slDistance, limit=entryPrice - atr * atrMultTP)

// === MAXIMUM TRADE DURATION CONTROL ===
strategy.close("Gap Long", when=inLong and (bar_index - strategy.opentrades.entry_bar_index(0)) >= maxBars)
strategy.close("Gap Short", when=inShort and (bar_index - strategy.opentrades.entry_bar_index(0)) >= maxBars)

// === VISUALS ===
plotshape(longCond, title="Long Signal", location=location.belowbar, style=shape.triangleup, color=color.green)
plotshape(shortCond, title="Short Signal", location=location.abovebar, style=shape.triangledown, color=color.red)
plot(ema50, color=color.orange, title="EMA 50")
plot(ema200, color=color.blue, title="EMA 200")