
Chiến lược này là một chiến lược giao dịch đảo ngược đường ngắn dựa trên chỉ số Brin. Nó kết hợp đường trung bình, chênh lệch tiêu chuẩn và kênh Brin để tìm kiếm cơ hội giao dịch đảo ngược khi giá phân tán bất thường.
Tính trung bình và chênh lệch tiêu chuẩn. Sử dụng hàm sma () để tính trung bình của sma và hàm stdev () để tính chênh lệch tiêu chuẩn.
Đường trên của đường Brin là giá + chênh lệch tiêu chuẩn*1, đường ray dưới là giá - chênh lệch tiêu chuẩn*1。
Khi giá phá vỡ đường ray lên hoặc xuống đường, cho thấy giá xảy ra bất thường, chúng tôi quyết định thực hiện giao dịch đảo ngược.
Cụ thể, nếu giá thấp hơn đường ray, chúng tôi giao dịch nhiều đầu; nếu giá cao hơn đường ray, chúng tôi giao dịch ngắn.
Sử dụng đường băng Brin để xác định giá bất thường, nó cung cấp cơ sở cho giao dịch đảo ngược.
Kết hợp các yếu tố đồng nhất, có thể lọc một phần của giao dịch tiếng ồn hiệu quả.
Việc đưa ra các yếu tố chênh lệch tiêu chuẩn cho phép Brin trở nên năng động hơn trong việc đánh giá giá bất thường.
Chiến lược này có sự rút lui nhỏ và ổn định.
Chỉ số BRI không hoàn toàn có thể đánh giá được các trường hợp bất thường về giá cả, có thể xảy ra sự phá vỡ giả.
Tần suất giao dịch có thể quá cao, nên điều chỉnh các tham số để kiểm soát tần suất giao dịch.
Việc phá vỡ dây chuyền Brin để đưa tín hiệu xuống đường có thể mất nhiều thời gian hơn và cần điều chỉnh các tham số thích hợp để có hiệu quả quay ngược tốt hơn.
Lập lệnh dừng lỗ thích hợp để kiểm soát rủi ro
Chiến lược này sử dụng chỉ số Brin để đánh giá giá bất thường, giao dịch đảo ngược với các tham số đường trung bình và chênh lệch chuẩn. Có một sự ổn định nhất định. Chúng tôi cần tiếp tục giảm tối đa sự rút lui và tăng sự ổn định của chiến lược thông qua các phương tiện như tối ưu hóa tham số, giới thiệu các yếu tố phụ trợ, quản lý dừng lỗ và kiểm soát vị trí.
/*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)