
Strategi ini didasarkan pada fluktuasi harga yang halus, menghasilkan pita target harga, dan menghasilkan sinyal perdagangan ketika harga menembus pita target.
Strategi ini pertama-tama menghitung amplitudo rata-rata pergerakan harga dalam periode tertentu, kemudian mengolah amplitudo fluktuasi dengan rata-rata bergerak indeks untuk menghasilkan tingkat fluktuasi yang halus. Rasio fluktuasi yang halus dikalikan dengan faktor, untuk mendapatkan area target.
Secara khusus, strategi ini menggunakan fungsi smoothrng untuk menghitung fluktuasi smoothed smrng, lalu menghitung hband dan lband tren atas dan bawah dari target band berdasarkan nilai smrng. Berdasarkan hal ini, kondisi posisi panjang longCondition dan kondisi posisi pendek shortCondition ditetapkan. Ketika kondisi posisi panjang terpenuhi, sinyal beli dihasilkan; Ketika kondisi posisi pendek terpenuhi, sinyal jual dihasilkan.
Strategi ini memiliki keuntungan sebagai berikut:
Dengan menggunakan volatilitas harga untuk membangun sinyal perdagangan, Anda dapat secara efektif melacak perubahan pasar.
Indeks bergerak rata-rata rata-rata fluktuasi, filter kebisingan, menghasilkan sinyal perdagangan yang lebih andal.
Jangkauan target band dapat disesuaikan dengan koefisien fluktuasi, membuat strategi lebih fleksibel.
Pengertian harga terobosan ini dapat digunakan untuk menangkap peluang perdagangan pada saat terjadi pergeseran tren.
Strategi ini juga memiliki beberapa risiko:
Pada saat pasar mengalami fluktuasi yang tidak normal, fluktuasi yang disederhanakan mungkin tidak mencerminkan fluktuasi yang sebenarnya dengan akurat, sehingga menyebabkan sinyal yang salah. Model dapat dioptimalkan dengan menyesuaikan parameter.
Jika tidak diatur dengan benar, dapat menyebabkan frekuensi perdagangan terlalu tinggi atau sinyal tidak cukup. Berbagai parameter dapat diuji untuk menemukan rentang optimal.
Penarikan sinyal dinilai ada keterlambatan waktu, yang dapat menyebabkan masuk terlalu dini atau terlalu terlambat. Dapat dikombinasikan dengan indikator lain untuk konfirmasi.
Strategi ini dapat dioptimalkan dari beberapa arah:
Uji siklus data harga yang berbeda untuk menemukan parameter siklus yang paling sesuai untuk menghitung fluktuasi.
Cobalah menggunakan algoritma moving average yang berbeda, seperti linear weighted moving average.
Masukkan volume transaksi atau indikator lainnya untuk mengkonfirmasi sinyal penembusan.
Tetapkan stop loss atau trailing stop untuk mengontrol stop loss tunggal.
Optimalkan nilai dari koefisien fluktuasi mult untuk menentukan optimum target bandwidth.
Strategi ini memiliki ide yang jelas, dengan volatilitas harga untuk membangun target band, memanfaatkan harga terobosan untuk menghasilkan sinyal perdagangan, dapat secara efektif melacak tren perubahan pasar. Namun ada juga ruang untuk perbaikan tertentu, dengan optimasi parameter, memperkenalkan indikator konfirmasi dan lain-lain dapat membuat strategi lebih stabil dan andal.
/*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")