
Эта стратегия является стратегией обратного трейдинга коротких линий, основанной на индикаторе Бринского пояса. Она сочетает в себе среднюю линию, стандартную разницу и канал Бринского пояса, чтобы искать возможности для обратного трейдинга при необычной дисперсии цены.
Расчет средней и стандартной разницы. Используйте sma () функцию для расчета средней линии sma, используйте stdev () функцию для расчета стандартной разницы.
Вычисление на основе средней линии и стандартной разницы на верхней и нижней полосах Брин-ленты. Верхняя линия представляет собой цену + стандартную разницу*1, нижняя линия - цена - стандартная разница*1。
Когда цена прорывается вверх или вниз, это говорит о том, что произошла аномалия, и тогда мы решаем совершить обратную сделку.
В частности, если цена ниже нижней полосы, мы совершаем многоочередные сделки; если цена выше верхней полосы, мы совершаем короткие сделки.
Использование каналов Брин-Бинд для определения аномальных цен обеспечивает основу для обратной торговли.
В сочетании с равнолинейным фактором можно эффективно отфильтровывать часть шума.
Введение коэффициента стандартной погрешности позволило Бринскому каналу быть более динамичным и лучше судить о ценовых аномалиях.
Эта стратегия имеет небольшие отступления и некоторую стабильность.
Показатели Брин-Бенда не могут полностью определить аномальные ситуации с ценами, в которых могут возникнуть ложные прорывы.
Частота сделок может быть слишком высокой, рекомендуется соответствующая корректировка параметров для контроля частоты сделок.
Прорыв Брин-полосы на спусковой сигнал может занять больше времени, требуя соответствующей корректировки параметров для лучшего эффекта обратного хода.
Строгое ограничение риска.
Стратегия имеет некоторую стабильность. Нам необходимо еще больше снизить максимальный отвод стратегии и повысить ее стабильность с помощью оптимизации параметров, введения вспомогательных факторов, управления стоп-лоском и контроля позиций.
/*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)