
この戦略は,トレンド追跡とリスク管理を組み合わせた,変動率に基づくダイナミックな選択時取引システムである.戦略の中心は,変動率チャネルを通じて市場の傾向の変化を認識することであり,同時に,ATRベースのダイナミックなポジション管理機構を導入し,取引リスクの精密な制御を実現している.この戦略は,波動性の高い市場環境下で動作するのに特に適しており,市場の変動に自律的に順応してポジションを保持することができる.
戦略の中核となるロジックは、次の主要な要素に基づいています。
これは,波動率,トレンド追跡,リスク管理を組み合わせた完全な取引システムである.戦略は,波動率チャネルを通じてトレンドの変化を捉え,科学的な資金管理方法を適用しながらリスクを制御する. 震動的な市場では不良なパフォーマンスを発揮するかもしれないが,合理的なパラメータ最適化と追加のフィルタリング機構により,ほとんどの市場環境で安定的に動作できる. 戦略の核心的な優点は,自律的適応性とリスク制御能力であり,協力的な中長期戦略の基礎の枠組みを拡張し,最適化するのに適している.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("BNF FUT 5 min Volatility Strategy", overlay=true)
// Inputs
length = input.int(20, "Length", minval=2)
src = input.source(close, "Source")
factor = input.float(2.0, "Multiplier", minval=0.25, step=0.25)
initial_capital = input.float(100000, "Initial Capital ($)")
risk_per_trade = input.float(1.0, "Risk per Trade (%)", minval=0.1, maxval=10.0)
// Volatility Stop Function
volStop(src, atrlen, atrfactor) =>
if not na(src)
var max = src
var min = src
var uptrend = true
var float stop = na
atrM = nz(ta.atr(atrlen) * atrfactor, ta.tr)
max := math.max(max, src)
min := math.min(min, src)
stop := nz(uptrend ? math.max(stop, max - atrM) : math.min(stop, min + atrM), src)
uptrend := src - stop >= 0.0
if uptrend != nz(uptrend[1], true)
max := src
min := src
stop := uptrend ? max - atrM : min + atrM
[stop, uptrend]
// Calculate Volatility Stop
[vStop, uptrend] = volStop(src, length, factor)
// Plot Volatility Stop
plot(vStop, "Volatility Stop", style=plot.style_cross, color=uptrend ? #009688 : #F44336)
// Risk Management and Position Sizing
atr = ta.atr(length)
stop_distance = math.abs(close - vStop) // Distance to stop level
position_size = (initial_capital * (risk_per_trade / 100)) / stop_distance // Position size based on risk per trade
position_size := math.max(position_size, 1) // Ensure minimum size of 1
// Strategy Logic
if not na(vStop)
if uptrend and not uptrend[1] // Transition to uptrend
strategy.close("Short")
strategy.entry("Long", strategy.long, qty=position_size)
if not uptrend and uptrend[1] // Transition to downtrend
strategy.close("Long")
strategy.entry("Short", strategy.short, qty=position_size)
// Exit on Stop Hit
if strategy.position_size > 0 and low < vStop // Exit long if stop hit
strategy.close("Long", comment="Stop Hit")
if strategy.position_size < 0 and high > vStop // Exit short if stop hit
strategy.close("Short", comment="Stop Hit")
if (hour == 15 and minute == 15)
strategy.close_all()