Triple Supertrend avec stratégie EMA et ADX

Auteur:ChaoZhang est là., Date: le 18 septembre 2023 14:02:12
Les étiquettes:

Résumé

Il s'agit d'une stratégie de trading quantitative qui combine les indicateurs triple supertrend, EMA et ADX. Il génère des signaux de trading à l'aide d'un système triple supertrend et applique EMA et ADX comme filtres pour contrôler la fréquence des transactions et améliorer la qualité des signaux.

La logique de la stratégie

  • Utilisez trois systèmes de supertendance avec des paramètres différents et générez des signaux de trading lorsque les trois supertendances sont d'accord sur la direction.

  • Appliquer l'EMA comme filtre de tendance, aller long seulement lorsque la fermeture est au-dessus de l'EMA et aller court lorsque la fermeture est en dessous de l'EMA.

  • Appliquer l'ADX comme filtre de force de tendance, ne négocier que lorsque l'ADX dépasse un seuil.

  • Permettre l'option de réentrée pour ajuster la rentabilité et le contrôle des risques.

Plus précisément, la condition d'entrée longue est lorsque les trois supertendances deviennent haussières, la fermeture est au-dessus de l'EMA et l'ADX est supérieure au seuil. La condition d'entrée courte est lorsque les trois supertendances deviennent baissières, la fermeture est au-dessous de l'EMA et l'ADX est supérieure au seuil. Sortie lorsque l'une des supertendances inverse la direction.

La stratégie trace également des lignes de support et de résistance de supertrend pour faciliter la détermination visuelle de la tendance.

Analyse des avantages

  • Le système triple supertrend filtre les fausses tendances et améliore la précision des entrées.

  • Les doubles filtres EMA et ADX réduisent les pertes et améliorent la gestion des risques.

  • L'option de réentrée permet d'ajuster la rentabilité en fonction de la préférence pour le risque.

  • Les superlignes de tendance visuelles aident à déterminer la direction de la tendance.

Analyse des risques

  • Les super tendances et autres indicateurs présentent un décalage et peuvent entraîner une entrée tardive ou une sortie anticipée.

  • Des filtres trop stricts peuvent manquer des opportunités.

  • Les fusées peuvent entraîner des pertes sur les marchés à plage.

  • L'autorisation de la réentrée augmente la fréquence des échanges et les coûts de glissement.

Ces risques peuvent être réduits en optimisant les paramètres, les filtres et en utilisant des arrêts dynamiques.

Directions d'optimisation

Cette stratégie peut être optimisée sous plusieurs aspects:

  • Testez différentes combinaisons de paramètres pour trouver les paramètres optimaux de la supertrend et de l'EMA.

  • Optimiser le seuil ADX pour réduire les faux signaux.

  • Ajoutez d'autres filtres comme la volatilité, le volume, etc.

  • Optimiser les paramètres séparément pour les différents produits.

  • Mettre en place des mécanismes de stop loss dynamiques pour un meilleur contrôle des risques.

  • Explorez l'apprentissage automatique pour trouver de meilleures règles d'entrée et de sortie.

Résumé

Cette stratégie utilise les atouts des systèmes de triple supertrend et l'augmente avec des doubles filtres EMA et ADX pour améliorer efficacement la qualité du signal et contrôler les risques. Des améliorations supplémentaires des paramètres, des filtres, des arrêts dynamiques peuvent améliorer sa robustesse et son adaptabilité. Combinée à l'analyse des tendances, elle fournit des signaux d'entrée et de sortie efficaces pour le trading quantitatif.


/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// ©kunjandetroja


//@version=5
strategy('Triple Supertrend with EMA and ADX', overlay=true)

m1 = input.float(1,"ATR Multi",minval = 1,maxval= 6,step=0.5,group='ST 1')
m2 = input.float(2,"ATR Multi",minval = 1,maxval= 6,step=0.5,group='ST 2')
m3 = input.float(3,"ATR Multi",minval = 1,maxval= 6,step=0.5,group='ST 3')
p1 = input.int(10,"ATR Multi",minval = 5,maxval= 25,step=1,group='ST 1')
p2 = input.int(15,"ATR Multi",minval = 5,maxval= 25,step=1,group='ST 2')
p3 = input.int(20,"ATR Multi",minval = 5,maxval= 25,step=1,group='ST 3')
len_EMA = input.int(200,"EMA Len",minval = 5,maxval= 250,step=1)
len_ADX = input.int(14,"ADX Len",minval = 1,maxval= 25,step=1)
len_Di = input.int(14,"Di Len",minval = 1,maxval= 25,step=1)
adx_above = input.float(25,"adx filter",minval = 1,maxval= 50,step=0.5)
var bool long_position = false
adx_filter = input.bool(false, "Add Adx & EMA filter")
renetry = input.bool(true, "Allow Reentry")

f_getColor_Resistance(_dir, _color) =>
    _dir == 1 and _dir == _dir[1] ? _color : na
f_getColor_Support(_dir, _color) =>
    _dir == -1 and _dir == _dir[1] ? _color : na

[superTrend1, dir1] = ta.supertrend(m1, p1)
[superTrend2, dir2] = ta.supertrend(m2, p2)
[superTrend3, dir3] = ta.supertrend(m3, p3)
EMA = ta.ema(close, len_EMA)
[diplus,diminus,adx] = ta.dmi(len_Di,len_ADX)

// ADX Filter
adxup = adx > adx_above and close > EMA
adxdown = adx > adx_above and close < EMA

sum_dir = dir1 + dir2 + dir3

dir_long = if(adx_filter == false)
    sum_dir == -3
else
    sum_dir == -3 and adxup
dir_short = if(adx_filter == false)
    sum_dir == 3
else
    sum_dir == 3 and adxdown
Exit_long = dir1 == 1 and dir1 != dir1[1]
Exit_short = dir1 == -1 and dir1 != dir1[1]

// BuySignal = dir_long and dir_long != dir_long[1]
// SellSignal = dir_short and dir_short != dir_short[1]
// if BuySignal
//     label.new(bar_index, low, 'Long', style=label.style_label_up)
// if SellSignal
//     label.new(bar_index, high, 'Short', style=label.style_label_down)

longenter = if(renetry == false)
    dir_long and long_position == false
else
    dir_long
shortenter = if(renetry == false)
    dir_short and long_position == true
else
    dir_short
if longenter
    long_position := true
if shortenter
    long_position := false

strategy.entry('BUY', strategy.long, when=longenter)
strategy.entry('SELL', strategy.short, when=shortenter)   
strategy.close('BUY', Exit_long)
strategy.close('SELL', Exit_short)

buy1 = ta.barssince(dir_long)
sell1 = ta.barssince(dir_short)

colR1 = f_getColor_Resistance(dir1, color.red)
colS1 = f_getColor_Support(dir1, color.green)

colR2 = f_getColor_Resistance(dir2, color.orange)
colS2 = f_getColor_Support(dir2, color.yellow)

colR3 = f_getColor_Resistance(dir3, color.blue)
colS3 = f_getColor_Support(dir3, color.maroon)

plot(superTrend1, 'R1', colR1, linewidth=2)
plot(superTrend1, 'S1', colS1, linewidth=2)

plot(superTrend2, 'R1', colR2, linewidth=2)
plot(superTrend2, 'S1', colS2, linewidth=2)

plot(superTrend3, 'R1', colR3, linewidth=2)
plot(superTrend3, 'S1', colS3, linewidth=2)

// // Intraday only
// var int new_day = na
// var int new_month = na
// var int new_year = na
// var int close_trades_after_time_of_day = na

// if dayofmonth != dayofmonth[1]
//     new_day := dayofmonth
// if month != month[1]
//     new_month := month
// if year != year[1]
//     new_year := year
// close_trades_after_time_of_day := timestamp(new_year,new_month,new_day,15,15)

// strategy.close_all(time > close_trades_after_time_of_day) 


Plus de