
Strategi ini adalah strategi perdagangan berbalik garis pendek berdasarkan indikator Brin Belt. Ia menggabungkan garis rata-rata, perbezaan standard dan saluran Brin Belt untuk mencari peluang untuk berbalik pada harga yang tidak biasa.
Hitung purata garisan dan perbezaan piawai. Gunakan fungsi sma () untuk mengira purata garisan sma, gunakan fungsi stdev () untuk mengira perbezaan piawai.
Blinking naik turun berdasarkan purata dan standard deviation. Garis atas adalah harga + standard deviation*1, garisan bawah adalah harga - standard kesenjangan*1。
Apabila harga menembusi ke atas atau ke bawah, ini menunjukkan bahawa harga berlaku tidak normal, dan kami memutuskan untuk melakukan perdagangan terbalik.
Khususnya, jika harga lebih rendah daripada landasan bawah, kita melakukan dagangan multihead; jika harga lebih tinggi daripada landasan atas, kita melakukan dagangan shorthead.
Ia menggunakan BRI untuk menentukan harga yang tidak normal, dan ini memberi asas kepada perdagangan terbalik.
Gabungan dengan faktor linear, ia boleh menapis sebahagian daripada bising transaksi secara berkesan.
Pendahuluan faktor standard deviasi membolehkan Brin untuk menjadi lebih dinamik dan lebih baik dalam menilai harga yang tidak normal.
Strategi ini mempunyai penarikan balik yang lebih kecil dan stabil.
Indeks BRI tidak dapat menilai secara lengkap keadaan yang tidak biasa dalam harga, dan harga mungkin mengalami penembusan palsu.
Frekuensi dagangan mungkin terlalu tinggi, disarankan untuk menyesuaikan parameter dengan betul untuk mengawal frekuensi dagangan.
Penembusan jalur Brin ke isyarat turun mungkin lebih lama, perlu menyesuaikan parameter dengan sewajarnya untuk mendapatkan kesan pembalikan yang lebih baik.
Pendahuluan terhad untuk mengawal risiko.
Strategi ini menggunakan indikator Brin untuk menilai harga yang tidak normal, dan berdagang secara berbalik dengan parameter rata-rata dan standard deviasi. Ia mempunyai beberapa kestabilan. Kami perlu mengurangkan penarikan balik maksimum strategi dan meningkatkan kestabilan melalui pengoptimuman parameter, pengenalan faktor pembantu, pengurusan hentian 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)