Stratégie de suivi de tendance basée sur l'EMA et la divergence cachée


Date de création: 2024-02-02 16:54:27 Dernière modification: 2024-02-02 16:54:27
Copier: 0 Nombre de clics: 833
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance basée sur l’EMA et la divergence cachée

Aperçu

Cette stratégie est basée sur les signaux cachés de décalage de l’EMA et de l’indicateur RSI pour ouvrir des positions à plusieurs têtes, en identifiant les caractéristiques de formation de décalage de plusieurs têtes cachées et en jugeant le début d’une tendance à la hausse comme un signal d’ouverture de position. En même temps, la croix d’or combinée à l’EMA et la ligne K. Le prix de clôture de la ligne est au-dessus de l’EMA, assurant une tendance à la hausse.

Principe de stratégie

  1. Stratégie de l’EMA moyenne: utilisation de l’EMA moyenne de 50 cycles et de 250 cycles pour juger de la tendance croisée de l’or. Le prix est considéré comme un signal à plusieurs têtes lorsqu’il dépasse 50 EMA.

  2. Stratégie de déviation cachée du RSI: l’indicateur RSI présente des bas bas plus bas, tandis que les prix présentent des bas plus élevés. Un signal de déviation multiple caché annonce le début d’une inversion. En fonction d’un nombre limité de points de déviation, un faux signal peut être filtré.

  3. Stratégie de clôture de la ligne K: ouvrir une position lorsque le prix de clôture de la ligne K dépasse 50 EMA.

Les trois stratégies décrites ci-dessus ont été combinées pour déterminer le moment où la tendance commence à monter en flèche et ouvre des positions plus élevées.

Analyse des avantages

  1. L’EMA est utilisée pour déterminer la direction de la tendance, et le RSI est utilisé comme indicateur de retour.

  2. Le mécanisme de double confirmation, qui utilise la combinaison des prix de clôture des lignes EMA, RSI et K, permet de filtrer efficacement les faux signaux.

  3. Le suivi de la tendance à la hausse moyenne-longue est approprié pour juger du début d’une nouvelle tendance à la hausse après la consolidation.

Analyse des risques

  1. Si la ligne moyenne de l’EMA produit une fourchette morte, il est nécessaire de faire un placement en temps opportun.

  2. Le RSI doit être expérimenté pour cacher des signaux de déviation, et un paramètre mal réglé peut entraîner des signaux manqués ou des erreurs de jugement.

  3. Les paramètres de la variété de transaction doivent être optimisés.

Direction d’optimisation

  1. Ajustez dynamiquement les paramètres de la moyenne de l’EMA pour optimiser la précision des tendances.

  2. Ajustez les paramètres du RSI pour optimiser l’exactitude de la déviation cachée.

  3. Adhérer à un mécanisme de stop loss et contrôler le risque en utilisant le stop loss ATR ou le stop loss en pourcentage.

  4. Développer des stratégies de trading à découvert qui permettent d’ouvrir des positions à découvert en baisse.

Résumer

Cette stratégie utilise l’EMA moyenne pour déterminer la tendance majeure, en combinaison avec l’indicateur RSI pour augmenter l’exactitude du jugement. Après la fin de la correction, le jugement de la nouvelle tendance à la hausse commence.

Code source de la stratégie
/*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)