Strategi ini adalah sistem pullback yang dirancang untuk sekuritas dengan volatilitas tinggi, jadi secara alami Bitcoin adalah pilihan yang sangat baik untuk perdagangan ini. Ini dapat digunakan baik pada grafik harian atau pada jangka waktu yang lebih rendah (saya menemukan hasil yang baik pada jangka waktu 3 jam tetapi belum mengujinya pada apa pun di bawah 1 jam).
Strategi ini menghitung volatilitas dengan membandingkan perubahan harga penutupan 2 lilin sebelumnya, dan menggunakan perubahan harga ini untuk menghasilkan moving average. Sebuah band dibungkus di sekitar moving average dengan standar deviasi 1 untuk band dalam dan 2 untuk band luar. Jika harga berada di atas filter MA (moving average) yang telah ditetapkan sebelumnya maka ditentukan bahwa kita berada dalam tren naik sehingga strategi akan mengeluarkan sinyal ketika kita berada dalam tren naik dan ada pullback yang menyebabkan band deviasi dalam yang lebih rendah meningkat, tetapi jika harga terus dan jatuh melalui band deviasi luar maka sinyal beli tidak akan keluar karena masalah ini merugikan bahwa lonjakan volatilitas terlalu besar. Anda dapat melihat lonjakan
Pengguna dapat mengubah rentang tanggal yang ingin mereka uji, periode rata-rata bergerak untuk pelacakan volatilitas dan penyimpangan band dalam dan luar. Pada BTC saya meninggalkan band penyimpangan dalam dan band penyimpangan luar pada pengaturan standar tetapi menemukan pelacakan volatilitas 3 periode baik untuk perdagangan grafik 1 hari dan pelacakan volatilitas 5 periode baik untuk grafik 3 jam. Karena ini bukan strategi beli dan tahan maka untuk perdagangan Anda mungkin ingin tetap dengan koin paling cair sehingga Anda dapat masuk dan keluar dengan sangat cepat di bursa apa pun. Jika Anda ingin mencoba ini di pasar yang kurang volatile maka mengubah band penyimpangan dalam menjadi ~ 0.75 akan bekerja dengan baik di berbagai pasar saham yang mungkin.
Metode Pengurangan Risiko:
Pilih volatile underlying yang tepat, kontrol ukuran posisi.
Mengoptimalkan parameter untuk mengurangi perdagangan yang tidak efektif.
Gunakan stop loss dan ambil keuntungan, manajemen uang yang ketat.
Fokus pada efisiensi eksekusi, pilih dasar cair.
Sesuaikan parameter agar sesuai dengan karakteristik yang berbeda.
Strategi dapat dioptimalkan dalam aspek berikut:
Mengoptimalkan periode rata-rata bergerak untuk melacak volatilitas yang lebih baik dari underlying yang berbeda.
Sesuaikan parameter volatilitas band agar lebih sesuai dengan rentang volatilitas dasar tertentu.
Tambahkan filter lain seperti lonjakan volume untuk memvalidasi sinyal lebih lanjut.
Menggunakan teknik pembelajaran mesin untuk secara dinamis mengoptimalkan parameter untuk kemampuan beradaptasi.
Uji pada jangka waktu frekuensi yang lebih tinggi untuk menangkap lebih banyak peluang perdagangan.
Tambahkan stop loss bergerak / mengambil profit pelacakan untuk mengunci keuntungan lebih.
Gabungkan dengan indikator atau model lain untuk membangun strategi portofolio kuantitatif.
Strategi secara keseluruhan cukup sederhana dan intuitif, mengidentifikasi pembalikan melalui indikator volatilitas untuk menangkap titik balik pasar. Ada ruang optimasi yang besar dengan menyesuaikan parameter dan menggabungkan indikator teknis lainnya untuk meningkatkan stabilitas dan profitabilitas. Namun para pedagang perlu menyadari masalah overfit dan curve fitting. Strategi ini lebih cocok untuk perdagangan jangka pendek, membutuhkan manajemen uang yang ketat untuk mengendalikan risiko. Jika dikuasai dengan benar, ini dapat menjadi alat yang kuat untuk perdagangan cryptocurrency volatilitas tinggi.
/*backtest start: 2023-09-11 00:00:00 end: 2023-10-11 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © gary_trades //This script is designed to be used on volatile securities/tickers so is best suited for day charts on Crypto (particularly good for BTC). //It takes both long and short trades and the main indicator settings can be changed by the use so they can test for ideal settings for ticker of interest. //@version=4 strategy("BTC Volatility Band Strategy", shorttitle="Vol Band Strategy", overlay=false, margin_long=100, margin_short=100) //VOLATILTY CandleChange = ((close - close[1])/close)*100 //OR CandleChange = ((close[2] - close[1])/close)*100 plot(CandleChange, color=color.red, linewidth = 1) //VOLATILITY BANDS MAlen = input(7, minval=3, maxval=30, title=" MA Length") MAout = sma(CandleChange, MAlen) plot(MAout, color=color.black, display=display.none) InnerBand = input(1.0, minval=0.5, maxval=5, title="Inner Band") OuterBand = input(2.00, minval=0.5, maxval=10, title="Outer Band") devInner = InnerBand * stdev(CandleChange, MAlen) devOuter = OuterBand * stdev(CandleChange, MAlen) upper1 = MAout + devInner lower1 = MAout - devInner b1 = plot(upper1, "Upper Inner", color=color.gray) b2 = plot(lower1, "Lower Inner", color=color.gray) upper2 = MAout + devOuter lower2 = MAout - devOuter b3 = plot(upper2, "Upper Outer", color=color.gray) b4 = plot(lower2, "Lower Outer", color=color.gray) fill(b1, b3, color.rgb(250,145,175,70), title="Background") fill(b2, b4, color.rgb(250,145,175,70), title="Background") band1 = hline(25, "Upper Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2) band0 = hline(-25, "Lower Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2) //LONG FILTER VolFilterL = CandleChange <= lower1 and CandleChange > lower2 SMAFilterL = close[1] > sma(close[1], 50) PriceFilterL = close > lowest(close,7) LongFilter = VolFilterL and SMAFilterL and PriceFilterL bgcolor(LongFilter ? color.new(color.green, 80) : na) //SHORT FILTER VolFilterS = CandleChange >= upper1 and CandleChange < upper2 SMAFilterS = close[1] < sma(close[1], 50) PriceFilterS = close < highest(close,7) ShortFilter = VolFilterS and SMAFilterS and PriceFilterS bgcolor(ShortFilter ? color.new(color.red, 80) : na) //SETTING BACK TEST INPUTS fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2000, title = "From Year", minval = 1970) toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2100, title = "To Year", minval = 1970) startDate = timestamp("America/New_York", fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp("America/New_York", toYear, toMonth, toDay, 00, 00) time_condition = time >= startDate and time <= finishDate //ORDER DETAILS Risk = (high[7] - low[7])/ 7 Profit = Risk*1.15 Loss = Risk*0.65 AlertMSG = "New stategy position" + tostring(strategy.position_size) if (time_condition) strategy.entry("Long", strategy.long, when = LongFilter, alert_message=AlertMSG) if (LongFilter) LongStop = strategy.position_avg_price - Loss LongProfit = strategy.position_avg_price + Profit strategy.exit("TP/SL", "Long", stop=LongStop, limit=LongProfit) if (time_condition) strategy.entry("Short", strategy.short, when = ShortFilter, alert_message=AlertMSG) if (ShortFilter) ShortStop = strategy.position_avg_price + Loss ShortProfit = strategy.position_avg_price - Profit strategy.exit("TP/SL", "Short", stop=ShortStop, limit=ShortProfit)