Тенденция скрытой дивергенции в соответствии со стратегией EMA

Автор:Чао Чжан, Дата: 2024-02-02 16:54:27
Тэги:

img

Обзор

Эта стратегия открывает длинные позиции на основе EMA кроссовера и скрытых сигналов бычьего расхождения RSI, чтобы определить начало восходящей тенденции. Комбинация линий EMA, индикатора RSI и цен закрытия K-линии обеспечивает двойное подтверждение для обеспечения восходящего импульса. Эта стратегия подходит для отслеживания средне-долгосрочных тенденций и открытия длинных позиций после консолидации цен.

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

  1. Стратегия EMA: использование золотого креста 50-периодного EMA и 250-периодного EMA для определения направления тренда.

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

  3. К-линейная стратегия закрытия: идти длинный, когда цена закрытия выше линии 50 EMA.

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

Анализ преимуществ

  1. Использование линий EMA для определения направления тренда наряду с сигналами обратного движения RSI позволяет начать ранний вход в начале тренда.

  2. Двойное подтверждение от линий EMA, индикатора RSI и цены закрытия линии K эффективно отфильтровывает ложные сигналы.

  3. Следование среднесрочным и долгосрочным тенденциям позволяет выявить новые тенденции роста после консолидации.

Анализ рисков

  1. Закрыть позиции, когда линии EMA имеют смертельный крест.

  2. Выявление скрытых расхождений RSI требует опыта, неправильная настройка параметров может привести к отсутствию или ложным сигналам.

  3. Параметры должны быть оптимизированы для различных торговых инструментов.

Руководство по оптимизации

  1. Динамически регулируйте параметры EMA для лучшей точности определения тренда.

  2. Прекрасно настройте параметры RSI для лучшей точности скрытого дивергентного сигнала.

  3. Добавьте механизмы остановки потери, такие как ATR или процентные остановки для контроля рисков.

  4. Разработать стратегии для коротких позиций для торговли понижающимися тенденциями.

Заключение

Эта стратегия сочетает в себе линии EMA для определения тренда и сигналы RSI для повышения точности. Она идентифицирует новые восходящие тенденции после консолидации. При правильном настроении параметров и управлении рисками она может достичь хороших результатов. По сравнению с простыми движущимися средними стратегиями, она имеет более высокую точность в улавливании тенденций с лучшими показателями выигрыша.


/*backtest
start: 2024-01-25 00:00:00
end: 2024-02-01 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="EMA RSI ATR Hidden Div Strat", shorttitle="Hidden Div Strat", overlay = true, pyramiding = 0, max_bars_back=3000, calc_on_order_fills = false, commission_type =  strategy.commission.percent, commission_value = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital=5000, currency=currency.USD)

// Time Range
FromMonth=input(defval=1,title="FromMonth",minval=1,maxval=12)
FromDay=input(defval=1,title="FromDay",minval=1,maxval=31)
FromYear=input(defval=2020,title="FromYear",minval=2016)
ToMonth=input(defval=1,title="ToMonth",minval=1,maxval=12)
ToDay=input(defval=1,title="ToDay",minval=1,maxval=31)
ToYear=input(defval=9999,title="ToYear",minval=2017)
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>true

// Bar's time happened on/after start date?
afterStartDate = time >= start and time<=finish?true:false

//EMA'S
emasrc = close

len1 = input(50, minval=1, title="EMA1")
ema1 = ema(emasrc, len1)
col1 = color.white

len2 = input(250, minval=1, title="EMA2")
ema2 = ema(emasrc, len2)
col2 = color.yellow

//Plots
plot(ema1, title="EMA1", linewidth=1, color=col1)
plot(ema2, title="EMA2", linewidth=1, color=col2)

//Stoch
periodK = input(4, title="K", minval=1)
periodD = input(4, title="D", minval=1)
smoothK = input(3, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)

//Hidden Divergence Indikator

len = input(title="RSI Period", minval=1, defval=14)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=1)
lbL = input(title="Pivot Lookback Left", defval=19)
rangeUpper = input(title="Max of Lookback Range", defval=20)
rangeLower = input(title="Min of Lookback Range", defval=4)
hiddenBullColor = color.new(color.green, 80)
textColor = color.white
noneColor = color.new(color.white, 100)
osc = rsi(src, len)

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

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

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

// Price: Higher Low

priceHL = low[lbR] > valuewhen(plFound, low[lbR], 1)
hiddenBullCond = priceHL and oscLL and plFound

//buy Conditions
buyhiddenbull = hiddenBullCond[1] or hiddenBullCond[2] or hiddenBullCond[3] or hiddenBullCond[4] or hiddenBullCond[5] or hiddenBullCond[6] or hiddenBullCond[7] or hiddenBullCond[8] or hiddenBullCond[9] or hiddenBullCond[10]
emacondition = ema1 > ema2
upcondition = close[1] > ema1[1] and ema2[1] and close[2] > ema1[2] and ema2[2] and close[3] > ema1[3] and ema2[3]
crossup = k[0] >= d[0] and k[1] <= d[1]
longcondition = emacondition and upcondition and crossup and buyhiddenbull

if (afterStartDate)
    strategy.entry("Long", strategy.long, when = longcondition)

//TakeProfit, StopLoss lowest low
profitfactor = input(title="Profitfactor", type=input.float, step=0.1, defval=1.6)
loLen = input(title="Lowest Low Lookback", type=input.integer,
  defval=38, minval=2)
stop_level = lowest(low, loLen)[1]
bought = strategy.position_size[1] < strategy.position_size
barsbought = barssince(bought)

if strategy.position_size>0
    profit_level = strategy.position_avg_price + ((strategy.position_avg_price - stop_level[barsbought])*profitfactor)
    strategy.exit(id="TP/ SL", stop=stop_level[barsbought], limit=profit_level)

Больше