RSI Стратегия торговли бычьей и медвежьей дивергенцией

Автор:Чао Чжан, Дата: 2024-01-15 12:09:54
Тэги:

img

Обзор

Эта стратегия оценивает бычьи и медвежие тенденции рынка и принимает торговые решения, рассчитывая дивергенцию индикатора RSI. В частности, она будет оценивать скрытые бычьи сигналы, когда RSI формирует более низкие минимумы, но цены формируют более высокие минимумы. И она будет оценивать скрытые медвежие сигналы, когда RSI формирует более высокие максимумы, но цены формируют более низкие максимумы. Затем она определяет потенциальные бычьи или медвежие тенденции рынка на основе этих сигналов и совершает сделки.

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

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

  1. Регулярный бычий сигнал: RSI формируется более низким, а цена формируется более низким.

  2. Скрытый бычий сигнал: RSI формируется ниже, а цена формируется выше. Это означает, что продажная сила понижает RSI, но не цену, что указывает на усиление бычьей силы.

  3. Регулярный медвежий сигнал: RSI формирует более низкий максимум, а цена формирует более высокий максимум. Это означает, что продажная сила подталкивает цену вверх, но не RSI, что указывает на усиление медвежий силы.

  4. Скрытый медвежий сигнал: RSI формирует более высокий высокий, в то время как цена формирует более низкий высокий.

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

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

  1. Используйте теорию бычьего и медвежьего расхождения RSI для определения потенциальных тенденций рынка.
  2. Также объединяйте ценовые действия для подтверждения, избегая шумных сигналов.
  3. Способен улавливать критические сигналы до быстрого переворота рынка.
  4. Использовать визуализированные индикации для бычьих и медвежьих сигналов, легко и интуитивно работать.
  5. Настраиваемые параметры, соответствующие различным рыночным условиям.

Риски

  1. Дивергенции между РСИ и ценой могут не обязательно означать реверсии, они могут быть просто действия, связанные с диапазоном.
  2. Скрытые сигналы имеют относительно больший шум, риски ошибочного суждения.
  3. Необходимо включить больше индикаторов или методов технического анализа для подтверждения сигналов.
  4. Неправильные настройки параметров также могут повлиять на суждения.

Руководство по улучшению

  1. Включить MACD, KDJ и другие индикаторы с RSI для определения сигналов входа.
  2. Добавьте стратегию стоп-лосса, чтобы уменьшить потери на одну сделку.
  3. Оптимизируйте параметры, например, поиск более подходящих периодов RSI.
  4. Внедрить алгоритмы машинного обучения для обучения точности захвата входных сигналов.
  5. Внедрить веб-сокет для цитирования в режиме реального времени для снижения задержки подтверждения сигнала.

Резюме

Стратегия в основном использует бычьи и медвежьи дивергенции RSI для определения потенциальных бычьих или медвежьих тенденций рынка путем улавливания изменений относительной силы между покупательной и продажной способностью за действиями цен. У нее есть определенные предсказательные возможности отклонений. Но у нее также есть риски шумных сигналов. Такие способы, как оптимизация параметров, комбинация индикаторов, машинное обучение, могут помочь еще больше повысить стабильность и прибыльность стратегии.


/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Divergence Indicator")
len = input.int(title="RSI Period", minval=1, defval=20)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=5)
lbL = input(title="Pivot Lookback Left", defval=5)
rangeUpper = input(title="Max of Lookback Range", defval=60)
rangeLower = input(title="Min of Lookback Range", defval=5)
plotBull = input(title="Plot Bullish", defval=true)
plotHiddenBull = input(title="Plot Hidden Bullish", defval=true)
plotBear = input(title="Plot Bearish", defval=true)
plotHiddenBear = input(title="Plot Hidden Bearish", defval=true)
bearColor = color.red
bullColor = color.green
hiddenBullColor = color.new(color.green, 80)
hiddenBearColor = color.new(color.red, 80)
textColor = color.white
noneColor = color.new(color.white, 100)
osc = ta.rsi(src, len)

plot(osc, title="RSI", linewidth=2, color=#2962FF)
hline(50, title="Middle Line", color=#787B86, linestyle=hline.style_dotted)
obLevel = hline(70, title="Overbought", color=#787B86, linestyle=hline.style_dotted)
osLevel = hline(30, title="Oversold", color=#787B86, linestyle=hline.style_dotted)
fill(obLevel, osLevel, title="Background", color=color.rgb(33, 150, 243, 90))

plFound = na(ta.pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(ta.pivothigh(osc, lbL, lbR)) ? false : true
_inRange(cond) =>
	bars = ta.barssince(cond == true)
	rangeLower <= bars and bars <= rangeUpper

//------------------------------------------------------------------------------
// Regular Bullish
// Osc: Higher Low

oscHL = osc[lbR] > ta.valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Lower Low

priceLL = low[lbR] < ta.valuewhen(plFound, low[lbR], 1) 
// bull : 상승 Condition : 조건
bullCond = plotBull and priceLL and oscHL and plFound // 상승다이버전스?
strategy.entry("상승 다이버전스 진입", strategy.long, when = bullCond)
// strategy.close("상승 다이버전스 진입", when = ta.crossover(osc, 70)) 
plot(
     plFound ? osc[lbR] : na,
     offset=-lbR,
     title="Regular Bullish",
     linewidth=2,
     color=(bullCond ? bullColor : noneColor)
     )

plotshape(
	 bullCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bullish Label",
	 text=" Bull ",
	 style=shape.labelup,
	 location=location.absolute,
	 color=bullColor,
	 textcolor=textColor
	 )

//------------------------------------------------------------------------------
// Hidden Bullish
// Osc: Lower Low

oscLL = osc[lbR] < ta.valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Higher Low

priceHL = low[lbR] > ta.valuewhen(plFound, low[lbR], 1)
hiddenBullCond = plotHiddenBull and priceHL and oscLL and plFound
strategy.entry("히든 상승 다이버전스 진입", strategy.long, when = hiddenBullCond)
// strategy.close("히든 상승 다이버전스 진입", when = ta.crossover(osc, 70))
plot(
	 plFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bullish",
	 linewidth=2,
	 color=(hiddenBullCond ? hiddenBullColor : noneColor)
	 )

plotshape(
	 hiddenBullCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bullish Label",
	 text=" H Bull ",
	 style=shape.labelup,
	 location=location.absolute,
	 color=bullColor,
	 textcolor=textColor
	 )

//------------------------------------------------------------------------------
// Regular Bearish
// Osc: Lower High

oscLH = osc[lbR] < ta.valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Higher High

priceHH = high[lbR] > ta.valuewhen(phFound, high[lbR], 1)
// bear : 하락 
bearCond = plotBear and priceHH and oscLH and phFound
strategy.entry("하락 다이버전스 진입", strategy.short, when = bearCond)
// strategy.close("하락 다이버전스 진입", when = ta.crossunder(osc, 50)) 
plot(
	 phFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bearish",
	 linewidth=2,
	 color=(bearCond ? bearColor : noneColor)
	 )

plotshape(
	 bearCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bearish Label",
	 text=" Bear ",
	 style=shape.labeldown,
	 location=location.absolute,
	 color=bearColor,
	 textcolor=textColor
	 )

//------------------------------------------------------------------------------
// Hidden Bearish
// Osc: Higher High

oscHH = osc[lbR] > ta.valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Lower High

priceLH = high[lbR] < ta.valuewhen(phFound, high[lbR], 1)

hiddenBearCond = plotHiddenBear and priceLH and oscHH and phFound
strategy.entry("히든 하락 다이버전스 진입", strategy.short, when = hiddenBearCond)
// strategy.close("히든 하락 다이버전스 진입", when = ta.crossunder(osc, 50)) 
plot(
	 phFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish",
	 linewidth=2,
	 color=(hiddenBearCond ? hiddenBearColor : noneColor)
	 )

plotshape(
	 hiddenBearCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish Label",
	 text=" H Bear ",
	 style=shape.labeldown,
	 location=location.absolute,
	 color=bearColor,
	 textcolor=textColor
	 )

Больше