
Strategi ini adalah sistem perdagangan pilihan masa dinamik berdasarkan kadar turun naik, yang menggabungkan ciri-ciri pengesanan trend dan pengurusan risiko. Inti strategi ini adalah untuk mengenal pasti perubahan trend pasaran melalui saluran kadar turun naik, sambil memperkenalkan mekanisme pengurusan kedudukan dinamik berdasarkan ATR, yang mewujudkan kawalan tepat terhadap risiko perdagangan. Strategi ini sangat sesuai untuk beroperasi dalam persekitaran pasaran yang bergelombang, mampu menyesuaikan diri dengan turun naik pasaran dan menyesuaikan kedudukan.
Logik teras strategi adalah berdasarkan komponen utama berikut:
Ini adalah sistem perdagangan yang lengkap yang menggabungkan kadar turun naik, pemantauan trend dan pengurusan risiko. Strategi menangkap perubahan trend melalui saluran kadar turun naik, sambil menggunakan kaedah pengurusan dana saintifik untuk mengawal risiko. Walaupun mungkin tidak berfungsi dengan baik di pasaran yang bergolak, tetapi dengan pengoptimuman parameter yang munasabah dan mekanisme penapisan tambahan, ia dapat beroperasi dengan stabil di kebanyakan persekitaran pasaran.
/*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()