Strategi ini adalah strategi perdagangan pembalikan jangka pendek berdasarkan penunjuk Bollinger Band. Ia menggabungkan purata bergerak, penyimpangan piawai dan Bollinger band untuk mencari peluang untuk perdagangan pembalikan apabila harga tidak normal.
Mengira purata bergerak dan penyimpangan standard. Gunakan fungsi sma untuk mengira purata bergerak sma dan fungsi stdev untuk mengira penyimpangan standard.
Mengira rel atas dan bawah jalur Bollinger mengikut purata bergerak dan penyimpangan standard. rel atas adalah harga + penyimpangan standard1 dan landasan bawah adalah penyimpangan standard harga1.
Apabila harga memecahkan rel atas atau bawah, ia menunjukkan bahawa harga adalah tidak normal.
Secara khusus, jika harga lebih rendah daripada rel bawah, kita pergi panjang; jika harga lebih tinggi daripada rel atas, kita pergi pendek.
Gunakan saluran Bollinger Band untuk menilai harga yang tidak normal, yang menyediakan asas untuk perdagangan terbalik.
Digabungkan dengan faktor purata bergerak, beberapa perdagangan bising dapat ditapis dengan berkesan.
Pengenalan faktor penyimpangan piawai menjadikan saluran jalur Bollinger lebih dinamik untuk menilai harga yang tidak normal.
Strategi ini mempunyai pengeluaran yang agak kecil dan kestabilan tertentu.
Indikator Bollinger Band tidak dapat menentukan keadaan harga yang tidak normal.
Frekuensi dagangan mungkin terlalu tinggi. Adalah disyorkan untuk menyesuaikan parameter dengan sewajarnya untuk mengawal frekuensi dagangan.
Isyarat penembusan jalur Bollinger atas dan bawah boleh bertahan lama. Penyesuaian parameter yang sesuai diperlukan untuk mendapatkan kesan pembalikan yang lebih baik.
Memperkenalkan stop loss yang sesuai untuk mengawal risiko.
Mengoptimumkan kitaran purata bergerak dan parameter penyimpangan standard untuk mendapatkan saluran jalur Bollinger yang lebih munasabah.
Tingkatkan faktor tambahan seperti EMA dan MACD untuk menapis beberapa isyarat.
Memperkenalkan mekanisme stop loss dan kawalan kedudukan.
Mengoptimumkan saiz kedudukan dan langkah kawalan kedudukan.
Strategi ini menilai harga yang tidak normal melalui penunjuk Bollinger Band dan membuat perdagangan pembalikan dengan purata bergerak dan parameter penyimpangan standard. Ia mempunyai kestabilan tertentu. Kita perlu mengurangkan pengeluaran maksimum strategi dan meningkatkan kestabilan melalui cara seperti pengoptimuman parameter, pengenalan faktor tambahan, pengurusan kerugian berhenti dan kawalan kedudukan.
/*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)