정량적 모멘텀을 기반으로 한 마이크로 리트레이스먼트 돌파 전략

ATR SMA OCA VOLUME
생성 날짜: 2025-02-19 16:32:46 마지막으로 수정됨: 2025-02-19 17:25:25
복사: 0 클릭수: 335
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

정량적 모멘텀을 기반으로 한 마이크로 리트레이스먼트 돌파 전략 정량적 모멘텀을 기반으로 한 마이크로 리트레이스먼트 돌파 전략

개요

이 전략은 가격의 움직임과 거래량에 기반한 거래 시스템으로, 강력한 상승 이후의 미세한 회귀 기회를 식별하는 데 중점을 둔다. 전략은 크게 상승한 녹색 선이 된 이후의 단기 회귀를 모니터링하여, 가격 반전 신호가 발생했을 때 거래에 진입한다. 시스템은 거래의 정확성을 높이기 위해 거래량, ATR 변동률 및 회귀 폭 제한을 포함한 여러 가지 필터링 조건을 사용합니다.

전략 원칙

전략의 핵심 논리는 시장 동력의 지속 원칙에 기초하고 있으며, 주로 다음과 같은 핵심 요소를 포함하고 있다.

  1. 거래량과 ATR 배수를 통해 강력한 상승을 식별하여 평균보다 1.5배 이상의 거래량과 20만 개 이상의 거래량을 요구합니다.
  2. 중독 후 회귀 과정을 모니터링하고, 최대 3 개의 연속 적색 을 제한합니다.
  3. 최대 회수율을 50%로 설정하고, 그 이상의 경우 거래 기회를 포기합니다.
  4. 이 시점 이후, 가격이 초고점을 넘으면 더 많은 신호를 쏘아 올립니다.
  5. OCO 주문 포트폴리오를 사용하여 지분을 관리하고, 중지 및 수익 목표를 포함합니다.
  6. 리코드 하위점 아래로 스톱로스를 설정하고, 리스크의 2배에 해당하는 수익을 목표로 합니다.

전략적 이점

  1. 가격 운동과 거래량의 이중 확인을 결합하여 신호의 신뢰성을 향상시킵니다.
  2. 엄격한 회귀 조건 필터링으로 가짜 침투 함정을 방지합니다.
  3. 객관적인 기술 지표를 사용하여 주관적인 판단의 영향을 줄입니다.
  4. 명확한 위험 제어 장치, 고정된 위험-수익 비율 설정
  5. 시스템 자동화 수준이 높고, 여러 품종의 대량 거래에 적합하다.
  6. 좋은 확장성, 새로운 필터링 조건을 쉽게 추가

전략적 위험

  1. 시장의 급격한 변동이 있을 때 종종 잘못된 신호를 유발할 수 있습니다.
  2. 고위 강도 주가 회귀율이 예상 한계를 넘을 수 있다
  3. 거래량 조건은 다양한 시장 환경에 따라 동적으로 조정되어야 합니다.
  4. 스톱패스 세팅이 가깝고 시장 소음에 영향을 받을 수 있습니다.
  5. 이윤의 목표가 너무 과격할 수도 있고, 완전히 달성하기 어려울 수도 있습니다.
  6. 전략의 안정성을 검증하기 위해 더 많은 표본이 필요합니다.

전략 최적화 방향

  1. 동선 시스템이나 트렌드 지표와 같은 트렌드 필터를 도입하여 주 트렌드 방향으로 거래하는 것을 보장합니다.
  2. 동적으로 거래량 하락을 조정하여 시장의 다른 주기에 적응
  3. ATR의 배수를 고려할 수 있는 정지 위치 설정을 최적화
  4. 시간 필터를 추가하여 시장 개시와 종료의 변동을 피하십시오.
  5. 다중 시간 주기 확인을 도입하여 신호 신뢰도를 높인다.
  6. 시장 상황에 따라 전략 파라미터를 조정하는 적응 파라미터 시스템을 개발합니다.

요약하다

이는 합리적으로 설계된 트렌드 추적 전략이며, 엄격한 조건 필터링과 위험 관리를 통해 시장에서 우수한 거래 기회를 잡을 수 있습니다. 전략의 성공에 핵심은 매개 변수의 최적화와 시장 환경에 대한 적응적 조정입니다. 실물 거래 전에 충분한 피드백 검증을 수행하고 특정 거래 품종의 특성에 따라 매개 변수를 조정하는 것이 좋습니다.

전략 소스 코드
/*backtest
start: 2024-02-19 00:00:00
end: 2025-02-17 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BNB_USDT"}]
*/

//@version=6
strategy(title="Micropullback Detector w/ Stop Buy & Exits", shorttitle="MicroPB Det+Exits", overlay=true)

// USER INPUTS
volLookback = input.int(20, "Volume SMA Period", minval=1)
volMultiplier = input.float(1.5, "Volume Multiplier for High Volume", minval=1.0)
largeCandleATR = input.float(0.5, "Fraction of ATR to define 'Large Candle'", minval=0.1)
maxRedPullback = input.int(3, "Max Consecutive Red Candles in Pullback")
maxRetracementPc = input.float(50, "Max Retracement % for pullback", minval=1.0, maxval=100.0)

// CALCULATIONS
fastAtr = ta.atr(14)
avgVolume = ta.sma(volume, volLookback)
isLargeGreenCandle = (close > open) and ((close - open) > fastAtr * largeCandleATR) and (volume > avgVolume * volMultiplier) and (volume > 200000)

// HELPER FLAGS
isGreen = close >= open
isRed   = close < open

// STATE VARIABLES
var int   state = 0
var float waveStartPrice   = na
var float waveHighestPrice = na
var float largestGreenVol  = na
var int   consecutiveRedPulls = 0
var bool  triggerSignal    = false
var float wavePullbackLow  = na

if barstate.isnew
    triggerSignal:=false
    if state==0
        wavePullbackLow:=na
        if isLargeGreenCandle
            state:=1
            waveStartPrice:=open
            waveHighestPrice:=high
            largestGreenVol:=volume
            consecutiveRedPulls:=0
    else if state==1
        if isGreen
            waveHighestPrice:=math.max(waveHighestPrice,high)
            if volume>largestGreenVol
                largestGreenVol:=volume
        else
            state:=2
            consecutiveRedPulls:=1
            wavePullbackLow:=low
    else if state==2
        if isRed
            if volume>largestGreenVol
                state:=0
            consecutiveRedPulls+=1
            if consecutiveRedPulls>=maxRedPullback+1
                state:=0
            retracementLevel=waveStartPrice+(maxRetracementPc/100.0)*(waveHighestPrice-waveStartPrice)
            wavePullbackLow:=math.min(wavePullbackLow,low)
            if close<retracementLevel
                state:=0
        else
            consecutiveRedPulls:=0
            if high>high[1]
                triggerSignal:=true
                state:=3
    else if state==3
        state:=0

// Plot shapes for signals (last 1440 bars ~ 1 day at 1-min TF)
plotshape(isLargeGreenCandle, title="Large Green Candle", style=shape.diamond, location=location.belowbar, color=color.new(color.blue, 0), offset=0, size=size.small, show_last=1440)
plotshape(triggerSignal, title="MicroPB Entry", style=shape.arrowdown, location=location.abovebar, color=color.new(color.green, 0), offset=0, size=size.large, show_last=1440)

// ENTRY & EXITS
if triggerSignal
    // Stop Buy above the previous bar's high
    entryPrice = high[1]
    strategy.order("MicroPullback Long", strategy.long, limit=entryPrice, oca_name="MicroPullback")

    // Stoploss slightly below pullback low
    stopPrice = wavePullbackLow - 2*syminfo.mintick

    // Risk & take-profit calculations
    risk = entryPrice - stopPrice
    tpPrice = entryPrice + 2 * risk

    // Exit: stop or TP
    strategy.exit("SL+TP", "MicroPullback Long", stop=stopPrice, limit=tpPrice, qty_percent=100)

// ALERT
alertcondition(triggerSignal, title="MicroPullback LONG", message="Micropullback Long Signal Detected!")