EMA RSI Tendência de Divergência Oculta Seguindo a Estratégia

Autora:ChaoZhang, Data: 2024-02-02 16:54:27
Tags:

img

Resumo

Esta estratégia abre posições longas com base nos sinais de divergência de alta ocultas da EMA e do RSI para identificar o início de uma tendência de alta. A combinação de linhas EMA, indicador RSI e preços de fechamento da linha K fornece uma dupla confirmação para garantir um ímpeto de alta. Esta estratégia é adequada para seguir tendências de médio e longo prazo e abrir posições longas após consolidações de preços.

Estratégia lógica

  1. Estratégia da EMA: Usando a cruz de ouro da EMA de 50 períodos e da EMA de 250 períodos para determinar a direção da tendência.

  2. Estratégia de Divergência Oculta do RSI: O RSI forma mínimos mais baixos enquanto o preço forma mínimos mais altos, sinalizando uma inversão de tendência no início.

  3. Estratégia de fechamento da linha K: vá longo quando o preço de fechamento estiver acima da linha EMA 50.

A combinação das três estratégias acima identifica o início de uma tendência ascendente e abre posições longas em conformidade.

Análise das vantagens

  1. O uso de linhas EMA para determinar a direção da tendência, juntamente com sinais de reversão do RSI, permite uma entrada antecipada no início das tendências.

  2. A confirmação dupla das linhas EMA, indicador RSI e preços de fechamento da linha K efetivamente filtra sinais falsos.

  3. O seguimento das tendências de médio e longo prazo torna adequado identificar novas tendências de crescimento após as consolidações.

Análise de riscos

  1. Fechar posições quando as linhas EMA tiverem uma cruz de morte.

  2. A identificação de divergências ocultas do RSI requer experiência, um ajuste inadequado dos parâmetros pode levar a sinais ausentes ou falsos.

  3. Os parâmetros necessitam de otimização para diferentes instrumentos de negociação.

Orientações de otimização

  1. Ajustar dinamicamente os parâmetros da EMA para uma melhor precisão da determinação da tendência.

  2. Ajuste os parâmetros do RSI para melhor precisão do sinal de divergência oculta.

  3. Adicionar mecanismos de stop loss como ATR ou paradas percentuais para controlar os riscos.

  4. Desenvolver estratégias para posições curtas para negociar tendências descendentes.

Conclusão

Esta estratégia combina linhas EMA para determinação de tendências e sinais RSI para aumentar a precisão. Identifica novas tendências ascendentes após consolidações. Com ajuste adequado de parâmetros e gerenciamento de risco, pode alcançar bons resultados. Em comparação com estratégias de média móvel simples, tem maior precisão na captura de tendências com melhores taxas de ganho.


/*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)

Mais.