
이것은 일반적인 흔들림 전략이 아닙니다. 60 분 높은 시간 프레임으로 거래 구역을 결정하고 낮은 시간 프레임에서 브린 밴드 + RSI의 정확한 입구점을 찾습니다. 96 주기의 구역 식별은 20 주기의 브린 밴드와 함께 20 주기의 브린 밴드를 사용하여 전체 구역 거래 시스템을 형성합니다.
전략의 핵심 논리는 명확합니다: 가격은 HTF가 정한 범위 내에서, 부린 띠 경계에 닿을 때 RSI 오버 바이 오버 셀 신호와 협력해야 합니다. 다중 헤드 신호는 가격 ≤ 부린 하향을 요구하고 RSI ≤ 30을 요구하며, 공중 신호는 가격 ≥ 부린 상향을 요구하고 RSI ≥ 70을 요구합니다. 이 이중 확인 메커니즘은 많은 가짜 신호를 효과적으로 필터링합니다.
부린역 2.0배 표준편차는 임의의 설정이 아닙니다. 통계학은 우리에게 95%의 가격 변동이 2배 표준편차의 범위 안에 있다는 것을 알려줍니다. 이것은 한계에 도달할 확률이 5%에 불과하다는 것을 의미합니다.
20주기 브린 밴드 길이는 단기 변동성을 포착하고 과민성을 피하는 데 균형을 이룬다. 14주기보다 안정적이며 26주기보다 민감하다. 14주기 RSI와 함께, 고전적인 동력 확인 조합을 형성한다. RSI 30/70은 전통적인 20/80보다 더 보수적이며, 극한 시장 아래의 잘못된 신호를 줄인다.
0.25%의 VWAP 관용은 기발하게 설계되었다. 0.25% 이상의 VWAP에서 가격이 이탈했을 때, 전략은 거래를 중지했다. 이 작은 필터 조건은 실제 거래에서 가격이 평균에서 급격히 이탈하는 비정상적인 시기를 피할 수 있었다.
VWAP는 당일 거래량 가중 평균 가격을 나타내고, 기관 거래자의 중요한 참조 기준이다. 가격이 VWAP 근처에서 흔들릴 때, 시장은 일반적으로 비교적 균형 상태에 있으며, 간격 거래 전략이 작용하기에 더 적합하다.
전략은 두 가지의 정지 모드를 제공합니다: 중축 정지 모드 및 측면 정지. 중축 정지 모드는 더 보수적이며, 브린 벨트 중선을 목표로합니다. 측면 정지 모드는 더 적극적이며, HTF 구간의 다른 경계를 목표로합니다. 재검토 데이터는 중축 정지 모드의 승률이 더 높지만 단당 수익이 작다는 것을 보여줍니다.
0.15%의 스톱 버퍼 디자인은 합리적입니다. 스톱 포트는 HTF 간격 경계 바깥에 위치하고 있으며, 0.15%는 가격에 정상적인 변동 공간을 남기고, 실제 돌파구가 발생했을 때 적시에 스톱을 할 수 있습니다. 이 버퍼 비율은 스톱 주파수와 보호 효과를 균형을 맞추기 위해 최적화되었습니다.
최대 포지션은 계정 자금의 20%로 제한되어 있으며, 이는 적극적인 거래와 위험 통제의 균형점이다. 전통적으로 권장되는 10%에 비해 더 적극적이지만, 전략의 고주파 특성과 상대적으로 작은 중지 손실을 고려하면 20%의 포지션配置이 합리적이다.
다이내믹 포지션은 실시간 계정 순가치를 기반으로 계산되며, 각 거래의 리스크 은 상대적으로 안정적이다. 계정 순가치가 증가하면 절대 포지션은 증가하고, 순가치가 감소하면 포지션은 자동으로 축소되어 자연스러운 리스크 조정 장치가 형성된다.
이 전략은 수평 변동 시장에서 가장 잘 작동하며, 특히 변동률이 적당한 품종에 적합합니다. 강한 추세 시장에서는 가격이 HTF 범위를 쉽게 돌파하여 자주 중지되는 것이 좋지 않습니다. 극단적인 공포 또는 극단적인 탐욕의 기간을 피하기 위해 VIX 지수 15-25 범위에 사용하는 것이 좋습니다.
가장 좋은 거래 시간은 유럽-미국 겹치는 시간 (北京时间21:00-24:00), 이 때 유동성이 풍부하고 가격 변동이 상대적으로 규칙적이다. 아시아 시간대는 유동성이 부족하기 때문에 가격 점프가 발생할 수 있어 전략 실행 효과에 영향을 준다.
역사적인 회귀는 미래의 수익을 의미하지 않으며, 전략에는 연속적인 손실 위험이 있습니다. 특히 시장 구조가 크게 변할 때, 역사적인 데이터에 기반한 최적화된 파라미터가 무효가 될 수 있습니다.
검은 천둥 사건의 경우, HTF 간격은 순간적으로 무효화 될 수 있으며, 이로 인해 상쇄 손실이 제때 실행되지 않습니다. 계좌 수준의 최대 인출 제한을 설정하는 것이 권장되며, 당일 손실이 계좌 순액의 5%를 초과하면 거래를 중단합니다.
||
This isn’t your average oscillation strategy. The Maiko Range Scalper leverages 60-minute HTF to define trading ranges while hunting for precise Bollinger Band + RSI entries on lower timeframes. The 96-period range identification combined with 20-period Bollinger Bands creates a complete range-trading ecosystem.
Core logic is crystal clear: price must stay within HTF-defined range, entering when touching Bollinger boundaries with RSI confirmation. Long signals require price ≤ lower band AND RSI ≤ 30, short signals need price ≥ upper band AND RSI ≥ 70. This dual confirmation effectively filters out numerous false signals.
The 2.0x Bollinger multiplier isn’t arbitrary. Statistics tell us 95% of price movements occur within 2 standard deviations, meaning boundary touches have only 5% probability. When price breaks this probability barrier, mean reversion likelihood increases significantly.
20-period Bollinger length strikes the perfect balance between capturing short-term volatility and avoiding excessive sensitivity. More stable than 14-period, more responsive than 26-period. Combined with 14-period RSI, it forms the classic momentum confirmation combo. RSI 30⁄70 thresholds are more conservative than traditional 20⁄80, reducing false signals in extreme markets.
The 0.25% VWAP tolerance is brilliantly designed. When price deviates beyond 0.25% from VWAP, strategy pauses trading. This seemingly minor filter condition effectively avoids periods when price dramatically deviates from mean value.
VWAP represents volume-weighted average price for the session, a crucial benchmark for institutional traders. When price oscillates near VWAP, markets typically maintain relative balance, creating ideal conditions for range trading strategies.
Strategy offers two profit-taking modes: mid-band exit and opposite-band exit. Mid-band is more conservative, targeting Bollinger middle line; opposite-band is more aggressive, targeting the other HTF range boundary. Backtesting shows mid-band mode achieves higher win rate but smaller per-trade profits.
0.15% stop-loss buffer design is well-calibrated. Stop-loss sits 0.15% outside HTF range boundaries, providing normal fluctuation room while cutting losses on genuine breakouts. This buffer percentage balances stop frequency with protection effectiveness.
Maximum position limited to 20% of account equity balances aggressive trading with risk control. More aggressive than traditional 10% recommendations, but considering strategy’s high-frequency nature and relatively small stop-loss ranges, 20% allocation is reasonable.
Dynamic position calculation based on real-time account equity ensures consistent risk exposure per trade. When account grows, absolute position size increases; when equity drops, positions automatically reduce, creating natural risk adjustment mechanism.
Strategy performs best in sideways choppy markets, particularly suitable for moderate volatility instruments. Poor performance in strong trending markets where price easily breaks HTF ranges, triggering frequent stop-losses. Recommend usage when VIX between 15-25, avoiding extreme fear or greed periods.
Optimal trading hours are European-American overlap (9:00 PM - 12:00 AM Beijing time) when liquidity is abundant and price movements relatively regular. Asian sessions may produce price gaps due to insufficient liquidity, affecting strategy execution.
Historical backtesting doesn’t guarantee future returns; strategy carries consecutive loss risks. Especially when market structure undergoes major changes, parameters optimized on historical data may become ineffective. Regular parameter review and adjustment recommended.
During black swan events, HTF ranges may instantly fail, preventing timely stop-loss execution. Suggest implementing account-level maximum drawdown limits, suspending trading when daily losses exceed 5% of account equity. Strategy unsuitable around major economic events; avoid central bank decisions, NFP releases, and other high-impact announcements.
[/trans]
/*backtest
start: 2025-08-24 00:00:00
end: 2025-08-31 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Maiko Range Scalper (Sideways BB + RSI) – v4 clean",
overlay=true,
initial_capital=5000,
commission_type=strategy.commission.percent, commission_value=0.06)
// ===== Inputs =====
tfHTF = input.timeframe("60", "HTF voor range (15 of 60)")
lenRange = input.int(96, "HTF lookback voor range (bars)", minval=10)
bbLen = input.int(20, "Bollinger lengte", minval=5)
bbMult = input.float(2.0, "Bollinger std dev", step=0.1)
rsiLen = input.int(14, "RSI lengte", minval=5)
rsiLong = input.int(30, "RSI drempel Long ≤", minval=5, maxval=50)
rsiShort = input.int(70, "RSI drempel Short ≥", minval=50, maxval=95)
useVWAP = input.bool(false, "Extra filter: prijs nabij VWAP (±X%)")
vwapBand = input.float(0.25, "VWAP tolerantie %", step=0.05)
tpMode = input.string("Mid band", "Take-Profit doel", options=["Mid band","Tegenoverliggende band/Range"])
slBufferP = input.float(0.15, "SL buffer buiten range (%)", step=0.05, minval=0.05)
maxPosPct = input.float(20, "Max positie t.o.v. account (%)", step=1)
// ===== HTF Range (MTF) =====
htfHigh = request.security(syminfo.tickerid, tfHTF, ta.highest(high, lenRange))
htfLow = request.security(syminfo.tickerid, tfHTF, ta.lowest(low, lenRange))
rangeMid = (htfHigh + htfLow) / 2.0
// ===== LTF Indicatoren =====
basis = ta.sma(close, bbLen)
dev = ta.stdev(close, bbLen) * bbMult
bbU = basis + dev
bbL = basis - dev
rsi = ta.rsi(close, rsiLen)
vwapV = ta.vwap
// ===== Filters =====
inRange = (close <= htfHigh) and (close >= htfLow)
vwapOK = not useVWAP or (math.abs(close - vwapV) / vwapV * 100 <= vwapBand)
// ===== Signalen =====
longCond = inRange and vwapOK and (close <= bbL) and (rsi <= rsiLong)
shortCond = inRange and vwapOK and (close >= bbU) and (rsi >= rsiShort)
// ===== Position sizing =====
equity = strategy.equity
maxQtyValue = equity * (maxPosPct / 100.0)
qty = maxQtyValue / close
// ===== Stops & Targets =====
longSL = htfLow * (1.0 - slBufferP / 100.0)
shortSL = htfHigh * (1.0 + slBufferP / 100.0)
longTP = tpMode == "Mid band" ? basis : math.max(basis, htfHigh)
shortTP = tpMode == "Mid band" ? basis : math.min(basis, htfLow)
// ===== Huidige positie =====
isFlat = strategy.position_size == 0
isLong = strategy.position_size > 0
isShort = strategy.position_size < 0
// ===== Orders =====
if (longCond and (isFlat or isShort))
strategy.entry("Long", strategy.long, qty=qty)
strategy.exit("L-Exit", from_entry="Long", stop=longSL, limit=longTP)
if (shortCond and (isFlat or isLong))
strategy.entry("Short", strategy.short, qty=qty)
strategy.exit("S-Exit", from_entry="Short", stop=shortSL, limit=shortTP)
// ===== Plots =====
plot(htfHigh, "HTF Resistance", color=color.new(color.red, 0), linewidth=2)
plot(htfLow, "HTF Support", color=color.new(color.green, 0), linewidth=2)
plot(basis, "BB Basis", color=color.new(color.blue, 0))
plot(bbU, "BB Upper", color=color.new(color.blue, 0))
plot(bbL, "BB Lower", color=color.new(color.blue, 0))
plot(vwapV, title="VWAP", color=color.new(color.purple, 0), display=useVWAP ? display.all : display.none)
// ===== Signal markeringen =====
plotshape(longCond, title="Long signal", style=shape.triangleup, location=location.belowbar, size=size.tiny, color=color.new(color.green, 0))
plotshape(shortCond, title="Short signal", style=shape.triangledown, location=location.abovebar, size=size.tiny, color=color.new(color.red, 0))
// ===== Alerts =====
alertcondition(longCond, title="Long Setup", message="Long setup: BB bounce + RSI in HTF-range")
alertcondition(shortCond, title="Short Setup", message="Short setup: BB bounce + RSI in HTF-range")