
이 전략은 가격의 움직임과 거래량에 기반한 거래 시스템으로, 강력한 상승 이후의 미세한 회귀 기회를 식별하는 데 중점을 둔다. 전략은 크게 상승한 녹색 선이 된 이후의 단기 회귀를 모니터링하여, 가격 반전 신호가 발생했을 때 거래에 진입한다. 시스템은 거래의 정확성을 높이기 위해 거래량, ATR 변동률 및 회귀 폭 제한을 포함한 여러 가지 필터링 조건을 사용합니다.
전략의 핵심 논리는 시장 동력의 지속 원칙에 기초하고 있으며, 주로 다음과 같은 핵심 요소를 포함하고 있다.
이는 합리적으로 설계된 트렌드 추적 전략이며, 엄격한 조건 필터링과 위험 관리를 통해 시장에서 우수한 거래 기회를 잡을 수 있습니다. 전략의 성공에 핵심은 매개 변수의 최적화와 시장 환경에 대한 적응적 조정입니다. 실물 거래 전에 충분한 피드백 검증을 수행하고 특정 거래 품종의 특성에 따라 매개 변수를 조정하는 것이 좋습니다.
/*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!")