Strategi Reversi Band Volatilitas Bitcoin

Penulis:ChaoZhang, Tanggal: 2023-10-12 17:38:39
Tag:

Gambaran umum

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).

Logika Strategi

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 terjadi pada indikator di mana acara berwarna hijau.

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.

Keuntungan dari Strategi

  • Menggunakan perdagangan volatilitas untuk menangkap titik balik pasar
  • Perdagangan baik panjang maupun pendek, menghasilkan keuntungan di pasar naik dan turun
  • Pengaturan parameter standar sederhana mudah digunakan
  • Parameter dapat dengan mudah dioptimalkan untuk dasar yang berbeda
  • Pengaturan stop loss dan take profit yang wajar membantu mengunci keuntungan

Risiko dari Strategi

  • Risiko kerugian yang lebih besar dari volatilitas tinggi
  • Sering beralih panjang/pendek menimbulkan biaya perdagangan yang lebih tinggi
  • Operasi jangka pendek membutuhkan pemantauan pasar yang ketat
  • Sulit untuk menghentikan kerugian ketika likuiditas pasar rendah
  • Penyesuaian parameter yang buruk dapat menyebabkan perdagangan berlebihan

Metode Pengurangan Risiko:

  1. Pilih volatile underlying yang tepat, kontrol ukuran posisi.

  2. Mengoptimalkan parameter untuk mengurangi perdagangan yang tidak efektif.

  3. Gunakan stop loss dan ambil keuntungan, manajemen uang yang ketat.

  4. Fokus pada efisiensi eksekusi, pilih dasar cair.

  5. Sesuaikan parameter agar sesuai dengan karakteristik yang berbeda.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Mengoptimalkan periode rata-rata bergerak untuk melacak volatilitas yang lebih baik dari underlying yang berbeda.

  2. Sesuaikan parameter volatilitas band agar lebih sesuai dengan rentang volatilitas dasar tertentu.

  3. Tambahkan filter lain seperti lonjakan volume untuk memvalidasi sinyal lebih lanjut.

  4. Menggunakan teknik pembelajaran mesin untuk secara dinamis mengoptimalkan parameter untuk kemampuan beradaptasi.

  5. Uji pada jangka waktu frekuensi yang lebih tinggi untuk menangkap lebih banyak peluang perdagangan.

  6. Tambahkan stop loss bergerak / mengambil profit pelacakan untuk mengunci keuntungan lebih.

  7. Gabungkan dengan indikator atau model lain untuk membangun strategi portofolio kuantitatif.

Ringkasan

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)




Lebih banyak