Strategi Band Volatiliti yang lancar

Penulis:ChaoZhang, Tarikh: 2024-01-29 16:22:14
Tag:

img

Ringkasan

Strategi ini menjana rentang harga berdasarkan turun naik harga yang halus, dan menghasilkan isyarat perdagangan apabila harga menembusi rentang.

Logika Strategi

Strategi ini mula-mula mengira julat turun naik purata harga dalam tempoh tertentu, kemudian meratakan julat turun naik menggunakan purata bergerak eksponensial untuk menjana turun naik yang merata. Volatiliti yang merata dikalikan dengan pekali memberikan julat jalur. Apabila harga melanggar band atas, isyarat beli dihasilkan. Apabila harga melanggar band bawah, isyarat jual dihasilkan.

Khususnya, slmng turun naik yang dihaluskan dikira oleh fungsi smoothhrng. Band hband atas dan band lband bawah band harga kemudian dikira berdasarkan slmng. Syarat panjang longCondition dan syarat pendek shortCondition ditubuhkan berdasarkan itu. Apabila longCondition dipenuhi, isyarat beli dihasilkan. Apabila shortCondition dipenuhi, isyarat jual dihasilkan.

Analisis Kelebihan

Kelebihan strategi ini ialah:

  1. Menggunakan turun naik harga untuk membina isyarat perdagangan dapat dengan berkesan mengesan perubahan pasaran.

  2. Penghapusan turun naik dengan purata bergerak eksponensial boleh menapis bunyi bising dan menjana isyarat perdagangan yang lebih boleh dipercayai.

  3. Julat rentang boleh diselaraskan melalui pekali turun naik, menjadikan strategi lebih fleksibel.

  4. Digabungkan dengan penghakiman pecah, ia boleh menangkap peluang perdagangan tepat pada masanya apabila pembalikan trend berlaku.

Analisis Risiko

Terdapat juga beberapa risiko dalam strategi ini:

  1. Dalam turun naik pasaran yang tidak normal, turun naik yang dihaluskan mungkin tidak mencerminkan turun naik sebenar dengan tepat, yang membawa kepada isyarat yang salah. Parameter boleh dioptimumkan untuk meningkatkan model.

  2. Tetapan julat band yang tidak betul boleh menyebabkan overtrading atau isyarat yang tidak mencukupi. Parameter yang berbeza boleh diuji untuk mencari julat yang optimum.

  3. Terdapat kelewatan masa dalam isyarat breakout, yang boleh menyebabkan kemasukan awal atau kemasukan lewat.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan melalui:

  1. Ujian kitaran data harga yang berbeza untuk mencari tempoh yang paling sesuai untuk mengira turun naik.

  2. Mencuba algoritma purata bergerak yang berbeza seperti purata bergerak yang ditimbang.

  3. Memperkenalkan jumlah dagangan atau penunjuk lain untuk mengesahkan isyarat pecah.

  4. Menetapkan stop loss atau trailing stop untuk mengawal kerugian setiap perdagangan.

  5. Mengoptimumkan pelbagai pekali turun naik untuk menentukan julat jalur yang optimum.

Ringkasan

Logik keseluruhan strategi ini adalah jelas, menggunakan turun naik harga untuk membina jalur dan harga pecah untuk menjana isyarat perdagangan, yang boleh dengan berkesan mengesan perubahan trend pasaran.


/*backtest
start: 2023-01-22 00:00:00
end: 2024-01-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("1SmSm1 Strategy", shorttitle="1SmSm1", overlay=true)

// Source
src = input(defval=close, title="Source")

// Sampling Period
per = input(defval=100, minval=1, title="Sampling Period")

// Range Multiplier
mult = input(defval=3.0, minval=0.1, title="Range Multiplier")

// Smooth Average Range
smoothrng(x, t, m) =>
    wper = (t * 2) - 1
    avrng = ema(abs(x - x[1]), t)
    smoothrng = ema(avrng, wper) * m
    smoothrng

smrng = smoothrng(src, per, mult)

// Range Filter
rngfilt(x, r) =>
    rngfilt = x
    rngfilt := x > nz(rngfilt[1]) ? ((x - r) < nz(rngfilt[1]) ? nz(rngfilt[1]) : (x - r)) : ((x + r) > nz(rngfilt[1]) ? nz(rngfilt[1]) : (x + r))
    rngfilt

filt = rngfilt(src, smrng)

// Filter Direction
upward = 0.0
upward := filt > filt[1] ? nz(upward[1]) + 1 : filt < filt[1] ? 0 : nz(upward[1])

downward = 0.0
downward := filt < filt[1] ? nz(downward[1]) + 1 : filt > filt[1] ? 0 : nz(downward[1])

// Target Bands
hband = filt + smrng
lband = filt - smrng

// Breakouts
longCondition = (src > filt) and (src > src[1]) and (upward > 0)
shortCondition = (src < filt) and (src < src[1]) and (downward > 0)

strategy.entry("Buy", strategy.long, when = longCondition)
strategy.entry("Sell", strategy.short, when = shortCondition)

// Plotting
plot(filt, color=upward > 0 ? color.lime : downward > 0 ? color.red : color.orange, linewidth=3, title="Range Filter")
hbandplot = plot(hband, color=color.aqua, transp=100, title="High Target")
lbandplot = plot(lband, color=color.fuchsia, transp=100, title="Low Target")

// Fills
fill(hbandplot, lbandplot, color=color.aqua, title="Target Range")

// Bar Color
barcolor(longCondition ? color.green : shortCondition ? color.red : na)

// Alerts
alertcondition(longCondition, title="Buy Alert", message="BUY")
alertcondition(shortCondition, title="Sell Alert", message="SELL")

Lebih lanjut