В процессе загрузки ресурсов... загрузка...

Количественная стратегия: полосы Боллинджера RSI CCI Crossover Strategy

Автор:Чао Чжан, Дата: 2023-12-20 16:24:49
Тэги:

img

Обзор

Эта стратегия объединяет полосы Боллинджера, индекс относительной силы (RSI) и индекс товарного канала (CCI) для поиска перекрестных сигналов и генерации сигналов покупки и продажи.

Логика стратегии

Боллингерские полосы

Боллингерские полосы состоят из средней полосы, верхней полосы и нижней полосы. Средняя полоса обычно представляет собой 20-дневную скользящую среднюю величину. Верхняя полоса составляет два стандартных отклонения выше средней полосы. Нижняя полоса составляет два стандартных отклонения ниже. Цены вблизи нижней полосы могут указывать на состояние перепродажи. Цены вблизи верхней полосы могут указывать на состояние перекупки.

РСИ

RSI измеряет скорость направленных движений цен вверх и вниз. Он показывает перекупленность выше 70 и перепроданность ниже 30. Когда RSI падает свыше 70, это может быть сигнал продажи. Когда RSI подскочит с ниже 30, это может быть сигнал покупки.

CCI

CCI измеряет, насколько цены изменились от средней цены. Читания выше +100 означают состояние перекупления. Читания ниже -100 означают состояние перепродажи. CCI отражает экстремальные уровни цен.

Сигналы перекрестного действия

Эта стратегия использует полосы Боллинджера для оценки краткосрочных уровней перекупленности / перепроданности, RSI для измерения динамики роста / падения и CCI для выявления ценовых экстремалов.

Преимущества

  1. Объединение нескольких показателей повышает точность сигнала и уменьшает количество ложных сигналов
  2. Захватывает возможности перемен в переломных моментах
  3. Настраиваемые параметры адаптируются к различным рыночным условиям
  4. Сглаженный фильтр CCI уменьшает шум и улучшает стабильность

Риски и решения

  1. Все три показателя могут давать плохие сигналы, что приводит к потерям.
  2. CCI борется с нестабильными рынками. может заменить скользящими средними или индикаторами волатильности.
  3. Можно добавить остановки, чтобы закрепить некоторые прибыли.

Возможности оптимизации

  1. Проверьте больше комбинаций параметров для поиска оптимальной настройки
  2. Введение машинного обучения для автоматической настройки параметров
  3. Стратегии получения прибыли с целями прибыли
  4. Включите больше индикаторов, таких как MACD, KD для проверки сигналов

Заключение

Эта стратегия анализирует общие рыночные условия с использованием диапазонов Боллинджера, 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)

Больше