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.
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.
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.
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.
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.
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)