Échange quantitatif basé sur l'enveloppe moyenne mobile et l'ATR Trailing Stop

Auteur:ChaoZhang est là., Date: 2023-12-08 15:53:22 Les résultats sont les suivants:
Les étiquettes:

img

Résumé

La stratégie s'appelle MADEFlex, qui signifie Flexible Quantitative Trading Strategy Based on Moving Average Envelope and ATR Trailing Stop. Elle combine l'indicateur Moving Average Envelope et le mécanisme ATR trailing stop pour mettre en œuvre une solution de trading quantitative flexible et contrôlable.

Principaux

Le noyau de cette stratégie est l'indicateur MADE (Moving Average Displaced Envelope). MADE forme des bandes supérieures et inférieures en multipliant les facteurs de pourcentage avec l'EMA (Exponential Moving Average). Les signaux de vente sont générés lorsque les prix dépassent la bande supérieure et les signaux d'achat sont générés lorsque les prix dépassent la bande inférieure. Cette stratégie intègre l'indicateur MADE avec le mécanisme d'arrêt de traillement Average True Range (ATR).

L'indicateur MADE contient 3 paramètres: période, pourcentage au-dessus de perAb et pourcentage en dessous de perBl. Le paramètre Période détermine la période de l'EMA. La distance entre les bandes supérieures et inférieures de l'EMA est contrôlée par des facteurs en pourcentage. La partie d'arrêt de trail ATR est principalement définie par la période ATR nATRPeriod et les multiples d'ATR nATRMultip. Lorsque le prix dépasse la ligne de stop-loss de la barre précédente, la ligne de stop-loss est ajustée au prix moins la perte ATR fixe. Lorsque le prix tombe en dessous de la ligne de stop-loss de la barre précédente, la ligne de stop-loss est ajustée au prix plus la perte ATR fixe.

Enfin, les signaux d'achat et de vente sont générés en combinant les signaux de l'indicateur MADE et les conditions d'arrêt ATR.

Analyse des avantages

La stratégie MADEFlex présente les avantages suivants:

  1. Les signaux combinés plus fiables et le stop loss. MADE lui-même a tendance à générer de faux signaux.

  2. Les paramètres MADE et ATR peuvent être ajustés pour contrôler la quantité et la qualité du signal.

  3. Le commerce inverse enrichit les scénarios d'application.

  4. Stoppeur visualisé intuitif, jugeant visuellement l'effet d'arrêt par des lignes d'arrêt tracées.

Analyse des risques

La stratégie MADEFlex comporte également les risques suivants:

  1. Les paramètres MADE incorrects peuvent générer des faux signaux excessifs. Les paramètres appropriés doivent être soigneusement testés.

  2. L'arrêt ATR trop lâche risque de manquer les occasions d'arrêt. Des multiples ATR appropriés doivent être testés.

  3. Le risque est plus élevé avec le reverse trading. Surtout dans les situations de forte volatilité, le reverse trading peut augmenter le risque de perte.

  4. L'absence de protection contre les pertes par arrêt peut entraîner des pertes plus élevées dans des conditions de marché extrêmes.

Directions d'optimisation

La stratégie MADEFlex peut être optimisée dans les directions suivantes:

  1. Optimiser les paramètres MADE pour améliorer la qualité du signal. Différentes combinaisons de périodes et de pourcentages peuvent être testées pour trouver des ensembles de paramètres plus fiables.

  2. Optimiser les paramètres d'arrêt de trail ATR pour un meilleur effet d'arrêt.

  3. Ajouter d'autres filtres pour réduire davantage les faux signaux, par exemple en combinant des indicateurs de volatilité pour le filtrage.

  4. Ajoutez un mécanisme de prise de profit pour sortir à certains niveaux de profit.

  5. Utiliser des méthodes d'apprentissage automatique pour optimiser dynamiquement les paramètres, par exemple l'apprentissage par renforcement.

Conclusion

La stratégie MADEFlex combine avec succès les signaux de trading de l'indicateur d'enveloppe moyenne mobile et la méthodologie ATR trailing stop. Grâce à des paramètres réglables, elle implémente une solution de trading quantitative flexible et contrôlable. La stratégie a une fiabilité relativement élevée et une forte capacité de contrôle. Elle convient aux utilisateurs ayant une base quantitative à utiliser et à optimiser.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 27/09/2022
// Moving Average Displaced Envelope. These envelopes are calculated 
// by multiplying percentage factors with their displaced expotential 
// moving average (EMA) core.
// How To Trade Using:
// Adjust the envelopes percentage factors to control the quantity and 
// quality of the signals. If a previous high goes above the envelope 
// a sell signal is generated. Conversely, if the previous low goes below 
// the envelope a buy signal is given.
//
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
//
// ATR TS used by filter for MADE signals.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title='Moving Average Displaced Envelope & ATRTS', shorttitle='MADE+ATR', overlay=true)
tradeDirection = input.string('Both', title='Trade Direction', options=['Both', 'Long', 'Short'])
Price = input(title='Source', defval=close)
Period = input.int(defval=9, minval=1)
perAb = input.float(title='Percent above', defval=.5, minval=0.01, step=0.1)
perBl = input.float(title='Percent below', defval=.5, minval=0.01, step=0.1)
disp = input.int(title='Displacement', defval=13, minval=1)

nATRPeriod = input(15)
nATRMultip = input(2)
useATR = input(false, title='ATR Filter')
reverse = input(false, title='Trade reverse')

longAllowed = tradeDirection == 'Long' or tradeDirection == 'Both'
shortAllowed = tradeDirection == 'Short' or tradeDirection == 'Both'
pos = 0
sEMA = ta.ema(Price, Period)
top = sEMA[disp] * ((100 + perAb) / 100)
bott = sEMA[disp] * ((100 - perBl) / 100)

xATR = ta.atr(nATRPeriod)
xHHs =ta.sma(ta.highest(nATRPeriod), nATRPeriod)
xLLs =ta.sma(ta.lowest(nATRPeriod),nATRPeriod)
nSpread = (xHHs - xLLs) / 2
nLoss = nATRMultip * xATR
var xATRTrailingStop = 0.0
xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) :
     close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : 
     close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss

ATRLong = close > xATRTrailingStop ? true : false
ATRShort = close < xATRTrailingStop ? true : false

iff_1 = close > top ? 1 : pos[1]
pos := close < bott ? -1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
clr = strategy.position_size
if possig == 1 
    if longAllowed and ATRLong
        strategy.entry('Long', strategy.long)
    else
        if ATRLong or strategy.position_size > 0
            strategy.close_all()
if possig == -1 
    if shortAllowed and ATRShort
        strategy.entry('Short', strategy.short)
    else    
        if ATRShort or strategy.position_size < 0
            strategy.close_all()
if possig == 0
    strategy.close_all()
    
plot(xATRTrailingStop[1], color=color.blue, title='ATR Trailing Stop')
barcolor(clr < 0 ? #b50404 : clr > 0 ? #079605 : #0536b3)



Plus de