EMA RSI Tendance de divergence cachée à la suite de la stratégie

Auteur:ChaoZhang est là., Date: 2024-02-02 16:54:27 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie ouvre des positions longues basées sur les signaux de divergence haussière cachés de l'EMA et du RSI pour identifier le début d'une tendance à la hausse. La combinaison des lignes EMA, de l'indicateur RSI et des prix de clôture de la ligne K fournit une double confirmation pour assurer une dynamique à la hausse. Cette stratégie convient pour suivre les tendances à moyen et long terme et ouvrir des positions longues après des consolidations de prix.

La logique de la stratégie

  1. Stratégie EMA: Utilisation de la croix dorée de l'EMA à 50 périodes et de l'EMA à 250 périodes pour déterminer la direction de tendance.

  2. Stratégie de divergence cachée du RSI: Le RSI forme des bas plus bas tandis que le prix forme des bas plus élevés, signalant un renversement de tendance au début.

  3. Stratégie de clôture de la ligne K: passez long lorsque le prix de clôture est supérieur à la ligne 50 EMA.

La combinaison des trois stratégies ci-dessus détermine le début d'une tendance à la hausse et ouvre des positions longues en conséquence.

Analyse des avantages

  1. L'utilisation de lignes EMA pour déterminer la direction de la tendance ainsi que les signaux de renversement du RSI permet une entrée précoce au début des tendances.

  2. La double confirmation des lignes EMA, de l'indicateur RSI et des prix de clôture de la ligne K filtre efficacement les faux signaux.

  3. Le suivi des tendances à moyen et long terme permet d'identifier de nouvelles tendances à la hausse après les consolidations.

Analyse des risques

  1. Fermez les positions lorsque les lignes EMA ont une croix de la mort.

  2. L'identification des divergences cachées du RSI nécessite de l'expérience, un réglage inapproprié des paramètres pourrait entraîner des signaux manquants ou faux.

  3. Les paramètres doivent être optimisés pour différents instruments de négociation.

Directions d'optimisation

  1. Ajustez dynamiquement les paramètres EMA pour une meilleure précision de la détermination de la tendance.

  2. Ajustez les paramètres RSI pour une meilleure précision du signal de divergence cachée.

  3. Ajouter des mécanismes de stop loss comme ATR ou pourcentage de stop pour contrôler les risques.

  4. Développer des stratégies pour les positions courtes afin de négocier des tendances à la baisse.

Conclusion

Cette stratégie combine les lignes EMA pour la détermination de tendance et les signaux RSI pour augmenter la précision. Elle identifie de nouvelles tendances à la hausse après les consolidations. Avec un réglage approprié des paramètres et une gestion des risques, elle pourrait obtenir de bons résultats. Par rapport aux stratégies de moyenne mobile simples, elle a une plus grande précision dans la capture des tendances avec de meilleurs taux de gain.


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

Plus de