Bollinger Band Strategi Kuantitatif Reversi Jangka Pendek Berdasarkan Moving Average

Penulis:ChaoZhang, Tanggal: 2023-12-19 16:17:47
Tag:

img

Gambaran umum

Strategi ini adalah strategi perdagangan reversal jangka pendek berdasarkan indikator Bollinger Band. Ini menggabungkan moving average, standar deviasi dan Bollinger band untuk mencari peluang untuk trading reversal ketika harga tidak normal.

Prinsip Strategi

  1. Menghitung rata-rata bergerak dan standar deviasi. Gunakan fungsi sma untuk menghitung rata-rata bergerak sma dan fungsi stdev untuk menghitung standar deviasi.

  2. Hitung rel atas dan bawah pita Bollinger berdasarkan rata-rata bergerak dan standar deviasi.1 dan rel bawah adalah deviasi standar harga1.

  3. Ketika harga menembus rel atas atau bawah, ini menunjukkan bahwa harga tidak normal.

  4. Secara khusus, jika harga lebih rendah dari rel bawah, kita pergi panjang; jika harga lebih tinggi dari rel atas, kita pergi pendek.

Analisis Keuntungan

  1. Gunakan saluran Bollinger band untuk menilai harga abnormal, yang memberikan dasar untuk perdagangan terbalik.

  2. Dikombinasikan dengan faktor rata-rata bergerak, beberapa perdagangan bising dapat secara efektif disaring.

  3. Pengenalan faktor standar deviasi membuat saluran Bollinger band lebih dinamis untuk menilai harga abnormal dengan lebih baik.

  4. Strategi ini memiliki penggunaan yang relatif kecil dan stabilitas tertentu.

Analisis Risiko

  1. Indikator Bollinger Band tidak dapat sepenuhnya menentukan situasi harga yang tidak normal.

  2. Frekuensi perdagangan mungkin terlalu tinggi. dianjurkan untuk menyesuaikan parameter dengan tepat untuk mengontrol frekuensi perdagangan.

  3. Sinyal pecah dari Bollinger band atas dan bawah dapat berlangsung untuk waktu yang lama. penyesuaian parameter yang tepat diperlukan untuk mendapatkan efek pembalikan yang lebih baik.

  4. Memperkenalkan stop loss yang tepat untuk mengendalikan risiko.

Arahan Optimasi

  1. Mengoptimalkan siklus rata-rata bergerak dan parameter standar deviasi untuk mendapatkan saluran Bollinger band yang lebih wajar.

  2. Tingkatkan faktor tambahan seperti EMA dan MACD untuk menyaring beberapa sinyal.

  3. Memperkenalkan mekanisme stop loss dan kontrol posisi.

  4. Mengoptimalkan ukuran posisi dan langkah-langkah kontrol posisi.

Ringkasan

Strategi ini menilai harga yang abnormal melalui indikator Bollinger Band dan melakukan reversal trade dengan moving average dan parameter standar deviasi. Strategi ini memiliki stabilitas tertentu.


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("BCE Version of EMA, SMA Mean Reversion", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
 
// Inputs
st_yr_inp = input(defval=2017, title='Backtest Start Year')
st_mn_inp = input(defval=01, title='Backtest Start Month')
st_dy_inp = input(defval=01, title='Backtest Start Day')
en_yr_inp = input(defval=2025, title='Backtest End Year')
en_mn_inp = input(defval=01, title='Backtest End Month')
en_dy_inp = input(defval=01, title='Backtest End Day')
sma_lookback = input(defval=100, title="Lookback Period For SMA")
ema_lookback = input(defval=10, title="Lookback Period For EMA")
long_diff_perc = input(defval=6, title="Percentage Deviation From SMA to go Long")/100
short_diff_perc = input(defval=20, title="Percentage Deviation From SMA to go Short")/100
ema_filter_bars = input(defval=4, title="The number of bars the EMA must rise/fall")
lng_allwd = input(defval=true, title="Allow Longs?")
srt_allwd = input(defval=true, title="Allow Shorts?")
use_stop = input(defval=true, title="Use Stoploss?")
stop_perc = input(defval=30, title="Stop Loss Percentage")/100
 
// Dates
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
can_trade = time >= start and time <= end
// Indicators Setup
sma = sma(close, sma_lookback)
ema = ema(close, ema_lookback)
 
// Strategy Calcuations
close_stdev = stdev(close, sma_lookback)
sd1_upper = close + (close_stdev * 1)
sd1_lower = close - (close_stdev * 1)
close_diff = (close - sma) / sma
 
// Entries and Exits
longCondition = close > sma and open > sma
if (time >= start and time <= end)
    if (longCondition)
        strategy.entry("Long", strategy.long)
    if use_stop
        stop_price = close * (1 - stop_perc)
        strategy.order("Long Stoploss", false, stop=stop_price)
 
shortCondition = close < sma and open < sma
if (shortCondition)
//    strategy.entry("Short", strategy.short)
//    if use_stop
//        stop_price = close * (1 + stop_perc)
//        strategy.order("Short Stoploss", true, stop=stop_price)
//if (time >= start)    
    strategy.close("Long", when=close < sma and open < sma)
//strategy.cancel("Long Stoploss", when=sma < sma[1])
//    strategy.close("Short", when=close > sma and open > sma)
//strategy.cancel("Short Stoploss", when=close_diff<=0)
 
// Plotting
sma_col = sma > sma[1] ? green : red
ema_fill = close_diff <= -long_diff_perc ? lime : close_diff >= short_diff_perc ? maroon : aqua
p_sma = plot(sma, color=sma_col, linewidth=3)
p_ema = plot(ema, color=black, linewidth=2)
p_sd1 = plot(sd1_upper, color=black, linewidth=1, transp=85)
p_sd2 = plot(sd1_lower, color=black, linewidth=1, transp=85)
fill(p_sd1, p_sd2, title='STDEV Fill', color=silver, transp=80)
fill(p_sma, p_ema, title='EMA > Mean Percentage', color=ema_fill, transp=80)

Lebih banyak