Эта стратегия объединяет полосы Боллинджера, индекс относительной силы (RSI) и индекс товарного канала (CCI) для поиска перекрестных сигналов и генерации сигналов покупки и продажи.
Боллингерские полосы состоят из средней полосы, верхней полосы и нижней полосы. Средняя полоса обычно представляет собой 20-дневную скользящую среднюю величину. Верхняя полоса составляет два стандартных отклонения выше средней полосы. Нижняя полоса составляет два стандартных отклонения ниже. Цены вблизи нижней полосы могут указывать на состояние перепродажи. Цены вблизи верхней полосы могут указывать на состояние перекупки.
RSI измеряет скорость направленных движений цен вверх и вниз. Он показывает перекупленность выше 70 и перепроданность ниже 30. Когда RSI падает свыше 70, это может быть сигнал продажи. Когда RSI подскочит с ниже 30, это может быть сигнал покупки.
CCI измеряет, насколько цены изменились от средней цены. Читания выше +100 означают состояние перекупления. Читания ниже -100 означают состояние перепродажи. CCI отражает экстремальные уровни цен.
Эта стратегия использует полосы Боллинджера для оценки краткосрочных уровней перекупленности / перепроданности, RSI для измерения динамики роста / падения и CCI для выявления ценовых экстремалов.
Эта стратегия анализирует общие рыночные условия с использованием диапазонов Боллинджера, RSI и CCI. Она определяет точки перегиба через перекрестные сигналы для торговли с переломами рынка. С дальнейшими оптимизациями, такими как настройка параметров, механизмы получения прибыли и т. Д., Она может быть надежной контртррендовой стратегией для различных рыночных условий.
/*backtest start: 2023-11-19 00:00:00 end: 2023-12-19 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(shorttitle="BBRSIstr", title="Bollinger Bands", overlay=true) length = input.int(20, minval=1) maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"]) src = input(close, title="Source") mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev") ma(source, length, _type) => switch _type "SMA" => ta.sma(source, length) "EMA" => ta.ema(source, length) "SMMA (RMA)" => ta.rma(source, length) "WMA" => ta.wma(source, length) "VWMA" => ta.vwma(source, length) basis = ma(src, length, maType) dev = mult * ta.stdev(src, length) upper = basis + dev lower = basis - dev offset = input.int(0, "Offset", minval = -500, maxval = 500) plot(basis, "Basis", color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=#2962FF, offset = offset) p2 = plot(lower, "Lower", color=#2962FF, offset = offset) fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95)) //RSI rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings") rsiSourceInput = input.source(close, "Source", group="RSI Settings") maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings") maLengthInput = input.int(14, title="MA Length", group="MA Settings") bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings") showDivergence = input.bool(false, title="Show Divergence", group="RSI Settings") up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput) down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) rsiMA = ma(rsi, maLengthInput, maTypeInput) isBB = maTypeInput == "Bollinger Bands" rsiPlot = plot(rsi, "RSI", color=#7E57C2) plot(rsiMA, "RSI-based MA", color=color.yellow) rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86) midline = hline(50, "RSI Middle Band", color=color.new(#787B86, 50)) rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86) fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill") //cci ma = ta.sma(src, length) cci = (src - ma) / (0.015 * ta.dev(src, length)) plot(cci, "CCI", color=#2962FF) band1 = hline(100, "Upper Band", color=#787B86, linestyle=hline.style_dashed) hline(0, "Middle Band", color=color.new(#787B86, 50)) band0 = hline(-100, "Lower Band", color=#787B86, linestyle=hline.style_dashed) fill(band1, band0, color=color.rgb(33, 150, 243, 90), title="Background") typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing") smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing") smoothingLine = ma(cci, smoothingLength, typeMA) plot(smoothingLine, title="Smoothing Line", color=#f37f20, display=display.none) longCBB= close < lower shortCBB = close>upper longBRSI = rsi < 33 shortBRSI = rsi > 70 longcci = cci < -215 shortcci = cci > 250 strategy.entry("LONG", strategy.long, when = longCBB and longBRSI and longcci) strategy.exit("Exit ", profit = 600) strategy.entry("SHORT", strategy.short, when = shortCBB and shortBRSI and shortcci) strategy.exit("Exit ", profit = 600)