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