Stratégie de réglage fin du repli de tendance


Date de création: 2023-10-13 15:49:29 Dernière modification: 2023-10-13 15:49:29
Copier: 0 Nombre de clics: 816
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie vise à capturer les petits retournements dans la tendance et à ouvrir des positions supplémentaires à la fin d’un retournement pour en tirer un profit. Elle utilise des indicateurs techniques tels que la moyenne EMA, l’indicateur MACD et l’indicateur RSI pour déterminer la tendance et le moment de la fin d’un retournement, tout en utilisant l’indicateur ATR pour définir un prix de stop-loss.

Le principe

La stratégie commence par calculer l’EMA moyenne, l’indicateur MACD et l’indicateur RSI pour déterminer la direction et la force de la tendance actuelle.

Il utilise trois courbes moyennes EMA (courte 21 cycles, moyenne 50 cycles, longue 200 cycles) et est jugé comme une tendance à la hausse lorsque deux courbes moyennes longues traversent la courbe moyenne à court terme.

L’indicateur MACD détermine la force de la tendance et considère que la tendance haussière est forte lorsque la ligne MACD ou la colonne Histo traverse l’axe 0.

L’indicateur RSI détermine si le RSI est surchauffé et survendu.

Les indicateurs de SuperTrend sont ensuite utilisés pour déterminer le point de reprise spécifique. Lorsque la SuperTrend se retourne de bas en haut, un signal d’achat est généré.

Enfin, le prix de l’arrêt de retrait et de l’arrêt de profit est fixé en fonction de l’indicateur ATR.

Les avantages

  • Les signaux de trading sont rendus plus fiables en utilisant des combinaisons d’indicateurs multiples.
  • Il a un taux de réussite élevé et sa capacité à capturer les courts-circuits de la tendance.
  • La mise en place d’un mécanisme d’arrêt des dommages et de contrôle des risques.

Les risques

  • Le délai de rétractation est trop long et les pertes peuvent s’amplifier.
  • La combinaison de multiples indicateurs, la configuration des paramètres est complexe et nécessite des tests et des optimisations répétés.
  • Les paramètres de stop-loss sont trop lâches et les pertes peuvent s’étendre.

Mesures de gestion des risques:

  • Optimiser les paramètres pour s’assurer que l’indicateur est bien utilisé.
  • Ajustez les points de rupture pour éviter des pertes excessives.
  • Évitez les actions qui prennent trop de temps à se remettre.

Direction d’optimisation

  • Tester différentes combinaisons de paramètres pour trouver le meilleur état de l’indicateur.
  • Ajustez le stop loss en fonction des fluctuations de l’action sur la journée.
  • Ajout d’indicateurs quantitatifs pour éviter une pénurie de capacité.

Résumer

La stratégie utilise un ensemble d’indicateurs techniques pour juger des tendances et des retournements, avec une forte fiabilité. Le risque est contrôlé par un mécanisme de stop-loss strict, les retraits sont éliminés en temps opportun. Sur la base d’un ajustement continu des paramètres et des pools d’actions, de meilleurs rendements peuvent être obtenus.

Code source de la stratégie
/*backtest
start: 2022-10-06 00:00:00
end: 2023-10-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="pullb", overlay = true, initial_capital = 10000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity)

//variables

///emas var
ema_src = input.source(close, "EMA Source")
ema_1 = input.int(21, 'EMA 1 len')
ema_2 = input(50, 'EMA 2 len')
ema_3 = input(200, 'EMA 3 len')

///macd var
mac_src = input.source(close, "MACD Source")
mac_1 = input.int(12, 'MACD Fast')
mac_2 = input.int(26, 'MACD Signal')
mac_3 = input.int(9, 'MACD Histogram')

///rsi var
rsi_src = input.source(close, "RSI Source")
rsi_len = input.int(14, 'RSI Len')

///stoch var
smoothK = input.int(3, "K", minval=1)
smoothD = input.int(3, "D", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(14, "Stochastic Length", minval=1)
stoch_src = input(close, title="RSI Source Stoch")

//usage variables
ema_b = input.bool(true, "Use EMA Filter")
rsi_b = input.bool(true, "Use RSI Filter")
macd_b = input.bool(true, "Use MACD Filter")
//stoch_b = input(title="Use STOCH Filter", type=bool, defval=true)

//emaas
ema1 = ta.ema(ema_src, ema_1)
ema2 = ta.ema(ema_src, ema_2)
ema3 = ta.ema(ema_src, ema_3)

//macd
[macdLine, signalLine, histLine] = ta.macd(mac_src, mac_1, mac_2, mac_3)

//rsi
rsi = ta.rsi(rsi_src, rsi_len)

//stoch
rsi1 = ta.rsi(stoch_src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)

//supertrend
Periods = input.int(14, "ATR Period")
src_st = input.source(close, "Supertrend Source")
Multiplier = input.float(2.0 , "ATR Multiplier")
changeATR= input.bool(true, "Change ATR Calculation Method ?")
showsignals = input.bool(true, "Show Buy/Sell Signals ?")
highlighting = input.bool(true, "Highlighter On/Off ?")
atr2 = ta.sma(ta.tr, Periods)
atr3= changeATR ? ta.atr(Periods) : atr2
up=src_st-(Multiplier*atr3)
up1 = nz(up[1],up)
up := close[1] > up1 ? math.max(up,up1) : up
dn=src_st+(Multiplier*atr3)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
buySignal = trend == 1 and trend[1] == -1
sellSignal = trend == -1 and trend[1] == 1

//conditions
///buy
rsi_cond_b = if rsi_b
    rsi >= 50
else 
    true

macd_cond_b = if macd_b
    (histLine >= 0 or histLine < histLine[1])
else
    true
ema_cond_b = if ema_b
    (ema1 > ema2 and ema2 > ema3)
else 
    true

look_for = input.int(5, "Bars from cross to signal")

stoch_signal_sum = 0
for i = 0 to (look_for)
    if k[i] > d[i] and k[i + 1] < d[i + 1] and (k[i + 1] < 20 and d[i + 1] < 20)
        stoch_signal_sum := stoch_signal_sum + 1
        
stoch_cond_b = if stoch_signal_sum > 0
    if k > 80 and d > 80
        false
    else
        true
else
    false


sup_cond_b = buySignal

buy_sig = (rsi_cond_b and macd_cond_b and ema_cond_b and stoch_cond_b and sup_cond_b)

tp_b = close + (ta.atr(14) * 3)
sl_b = close - (ta.atr(14) * 1.5)

if (buy_sig)
    strategy.entry("long", strategy.long)
    strategy.exit("exit", "long", stop = sl_b, limit = tp_b)
plot(tp_b)
plot(sl_b)