Strategi Band Volatilitas Ringan

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

img

Gambaran umum

Strategi ini menghasilkan band harga berdasarkan volatilitas harga yang halus, dan menghasilkan sinyal perdagangan ketika harga menembus band.

Logika Strategi

Strategi ini pertama-tama menghitung rentang volatilitas rata-rata harga selama periode tertentu, kemudian meratakan rentang volatilitas menggunakan rata-rata bergerak eksponensial untuk menghasilkan volatilitas yang meratakan. Volatilitas yang meratakan dikalikan dengan koefisien memberikan rentang band. Ketika harga melanggar band atas, sinyal beli dihasilkan. Ketika harga melanggar band bawah, sinyal jual dihasilkan.

Secara khusus, volatilitas smoothed smrng dihitung dengan fungsi smoothrng. Band hband atas dan band lband bawah dari band harga kemudian dihitung berdasarkan smrng. Kondisi long longCondition dan short shortCondition diatur berdasarkan itu. Ketika longCondition terpenuhi, sinyal beli dihasilkan. Ketika shortCondition terpenuhi, sinyal jual dihasilkan.

Analisis Keuntungan

Keuntungan dari strategi ini adalah:

  1. Menggunakan volatilitas harga untuk membangun sinyal perdagangan dapat secara efektif melacak perubahan pasar.

  2. Mengatasi volatilitas dengan rata-rata bergerak eksponensial dapat menyaring kebisingan dan menghasilkan sinyal perdagangan yang lebih andal.

  3. Jangkauan band dapat disesuaikan melalui koefisien volatilitas, membuat strategi lebih fleksibel.

  4. Dikombinasikan dengan penilaian breakout, itu dapat menangkap peluang perdagangan tepat waktu ketika pembalikan tren terjadi.

Analisis Risiko

Ada juga beberapa risiko dalam strategi ini:

  1. Dalam volatilitas pasar yang abnormal, volatilitas yang disederhanakan mungkin tidak dapat mencerminkan volatilitas yang sebenarnya dengan akurat, yang mengarah pada sinyal yang salah. Parameter dapat dioptimalkan untuk meningkatkan model.

  2. Pengaturan rentang band yang tidak tepat dapat menyebabkan overtrading atau sinyal yang tidak cukup.

  3. Ada keterlambatan waktu dalam sinyal breakout, yang dapat menyebabkan masuk dini atau masuk terlambat.

Arahan Optimasi

Strategi dapat dioptimalkan melalui:

  1. Pengujian siklus data harga yang berbeda untuk menemukan periode yang paling tepat untuk menghitung volatilitas.

  2. Mencoba algoritma rata-rata bergerak yang berbeda seperti rata-rata bergerak tertimbang.

  3. Memperkenalkan volume perdagangan atau indikator lain untuk mengkonfirmasi sinyal breakout.

  4. Mengatur stop loss atau trailing stop untuk mengendalikan kerugian per perdagangan.

  5. Mengoptimalkan koefisien volatilitas untuk menentukan rentang band optimal.

Ringkasan

Logika keseluruhan strategi ini jelas, menggunakan volatilitas harga untuk membangun band dan price breakout untuk menghasilkan sinyal perdagangan, yang dapat secara efektif melacak perubahan tren pasar.


/*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 banyak