Стратегия пересечения скользящих средних CCI с индикатором RSI полос Боллинджера


Дата создания: 2023-12-20 16:24:49 Последнее изменение: 2023-12-20 16:24:49
Копировать: 0 Количество просмотров: 1107
1
Подписаться
1621
Подписчики

Стратегия пересечения скользящих средних CCI с индикатором RSI полос Боллинджера

Обзор

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

Стратегический принцип

Брин-пояс

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

Индекс RSI

RSI отражает изменение скорости роста и падения цен в течение определенного периода времени и используется для измерения соотношения сил между покупателями и продавцами. Значение RSI в пределах от 0 до 30 является зоной перепродажи, а в пределах от 70 до 100 - зоной перекупа.

Индикаторы CCI

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

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

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

Стратегические преимущества

  1. В сочетании с различными показателями, чтобы уменьшить ложные сигналы и повысить их точность
  2. Открыть рыночные переломные моменты и поймать обратный тренд
  3. Параметры могут быть настроены в соответствии с различными рыночными условиями
  4. Применение однолинейной фильтрации показателей CCI, снижение шума, повышение стабильности

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

  1. Показатели Брин-Бенда, RSI и CCI могут создавать ошибочные сигналы, что приводит к торговым потерям. Параметры могут быть расслаблены соответствующим образом, или добавлены другие показатели для проверки.
  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)