
これは普通の振動戦略ではありません. 60分高時間のフレームで取引区画を決定し,低時間のフレームでブリン帯+RSIの正確な入場点を探します. 96周期の区画識別が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の許容度が巧妙に設計されている.価格がVWAPから0.25%を超えると,戦略は取引を一時停止する.この微小に見えるフィルタリング条件は,実際の取引で価格が平均から急激に偏っている異常な時期を回避できる.
VWAPは,当日の取引量加重平均価格を代表し,機関トレーダーの重要な基準である. VWAPの近くで価格が変動するときは,市場は通常相対的に均衡状態にあり,区間取引戦略が機能するのに適しています.
戦略は2つの停止モードを提供している. 中軸停止と対岸停止. 中軸停止はより保守的で,ブリン帯の中央線をターゲットとしている. 対岸停止はより激進的で,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")