Strategi ini adalah sistem perdagangan masa dinamik berdasarkan turun naik, menggabungkan trend berikut dan ciri pengurusan risiko. Inti strategi menggunakan saluran turun naik untuk mengenal pasti perubahan trend pasaran sambil menggabungkan mekanisme pengurusan kedudukan dinamik berasaskan ATR untuk mencapai kawalan yang tepat terhadap risiko perdagangan. Strategi ini sangat sesuai untuk beroperasi dalam persekitaran pasaran yang sangat turun naik dan boleh menyesuaikan pegangan dengan turun naik pasaran.
Logik teras strategi ini berdasarkan komponen utama berikut:
Ini adalah sistem perdagangan lengkap yang menggabungkan turun naik, mengikuti trend, dan pengurusan risiko. Strategi ini menangkap perubahan trend melalui saluran turun naik sambil menggunakan kaedah pengurusan modal saintifik untuk mengawal risiko. Walaupun prestasi mungkin kurang optimum di pasaran yang berbeza, melalui pengoptimuman parameter yang betul dan mekanisme penapisan tambahan, ia dapat beroperasi dengan stabil di kebanyakan persekitaran pasaran. Keuntungan utama strategi terletak pada kemampuan penyesuaiannya dan kawalan risiko, menjadikannya sesuai sebagai rangka kerja asas untuk pengembangan dan pengoptimuman strategi jangka menengah hingga panjang.
/*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()