Эта стратегия в основном использует индекс относительной силы (RSI) в сочетании с полосами Боллинджера для оценки торговых сигналов. В частности, она длинная, когда RSI пересекает уровень перепроданности и ниже нижней полосы Боллинджера, и короткая, когда RSI пересекает уровень перекупления и выше верхней полосы Боллинджера.
Стратегия сначала рассчитывает индикатор RSI и полосы Боллинджера. Индикатор RSI отражает относительную силу торгового инструмента. Когда RSI ниже зоны перепродажи (по умолчанию 30), это означает, что инструмент перепродан и должен покупать. Полосы Боллинджера включают верхнюю полосу, среднюю полосу и нижнюю полосу, что хорошо отражает диапазон колебаний цен. Покупка вблизи нижней полосы и продажа вблизи верхней полосы могут обеспечить относительно надежные сигналы. Эта стратегия сочетает индикатор RSI и полосы Боллинджера для оценки торгового сигнала. Она генерирует сигнал покупки, когда RSI поднимается с зоны перепродажи выше нее (по умолчанию 30), и цена поднимается с нижней полосы выше нее; она генерирует сигнал продажи, когда RSI падает с зоны перепродажи ниже нее (по умолчанию 70), и цена падает с верхней полосы ни
Решения:
Общая стратегия надежна, эффективно сочетает в себе RSI и полосы Боллинджера для остановки потери. Дальнейшее улучшение может быть достигнуто путем тестирования и оптимизации параметров. Также необходимо знать о потенциальных рисках отсутствия сигнала из-за строгих правил. В целом, это надежная количественная стратегия торговли.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("BB + RSI 20MIN,", shorttitle="BBRSI 20MIN", overlay=true ) // Strategy Tester Start Time sYear = input(2019, title = "Start Year") sMonth = input(04, title = "Start Month", minval = 01, maxval = 12) sDay = input(01, title = "Start Day", minval = 01, maxval = 31) sHour = input(00, title = "Start Hour", minval = 00, maxval = 23) sMinute = input(00, title = "Start Minute", minval = 00, maxval = 59) startTime = true ///////////// RSI RSIlength = input(9,title="RSI Period Length") RSIoverSold = input(30, minval=1,title="RSIL") RSIoverBought = input(69, minval=1,title="RSIh") price = open vrsi = rsi(price, RSIlength) ///////////// Bollinger Bands BBlength = input(60, minval=1,title="Bollinger Period Length") BBmult = input(2.0, minval=0.001, maxval=50,title="Bb") BBbasis = sma(price, BBlength) BBdev = BBmult * stdev(price, BBlength) BBupper = BBbasis + BBdev BBlower = BBbasis - BBdev source = close buyEntry = crossover(source, BBlower) sellEntry = crossunder(source, BBupper) plot(BBbasis, color=aqua,title="Bollinger Bands SMA Basis Line") p1 = plot(BBupper, color=silver,title="Bollinger Bands Upper Line") p2 = plot(BBlower, color=silver,title="Bollinger Bands Lower Line") fill(p1, p2) ///////////// Colors switch1=input(true, title="Enable Bar Color?") switch2=input(true, title="Enable Background Color?") TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? green : na barcolor(switch1?TrendColor:na) bgcolor(switch2?TrendColor:na,transp=50) ///////////// RSI + Bollinger Bands Strategy if (not na(vrsi)) if (crossover(vrsi, RSIoverSold) and crossover(source, BBlower)) strategy.entry("RSI_BB_L", strategy.long and startTime, stop=BBlower, comment="RSI_BB_L") else strategy.cancel(id="RSI_BB_L") if (crossunder(vrsi, RSIoverBought) and crossunder(source, BBupper)) strategy.entry("RSI_BB_S", strategy.short and startTime, stop=BBupper,comment="RSI_BB_S") else strategy.cancel(id="RSI_BB_S") //plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)