Stratégie de renversement de la moyenne mobile double

Auteur:ChaoZhang est là., Date: 2023-11-03 16h51 et 18h
Les étiquettes:

img

Résumé

Cette stratégie utilise 2 indicateurs pour générer des signaux de trading: la moyenne mobile exponentielle 2/20 et l'inversion moyenne de la plage réelle.

Principe

La stratégie est composée de 2 parties:

  1. Il calcule l'EMA de 20 jours et génère des signaux lorsque le prix traverse l'EMA vers le haut ou vers le bas.

  2. Average True Range Reversal Indicator. Il calcule le niveau de stop loss basé sur l'ATR, et génère des signaux lorsque le prix franchit le niveau de stop loss.

La stratégie combine les signaux des deux. Il va court lorsque 2/20 EMA donne un signal long tandis que l'inversion ATR donne un signal court. Il va long lorsque des signaux opposés sont générés.

Analyse des avantages

La stratégie combine des idées de suivi de tendance et d'inversion, visant à capturer les inversions.

  1. 2/20 EMA identifie la tendance à moyen terme, évite le bruit du marché.

  2. L'inversion de l'ATR capture les inversions et les opportunités à court terme.

  3. La combinaison des signaux permet de détecter à l'avance l'inversion de tendance et d'améliorer la rentabilité.

  4. Une perte d'arrêt ATR raisonnable permet un certain contrôle des risques.

  5. Le multiplicateur ATR personnalisable s'adapte à différents produits.

  6. L'option d'annulation s'adapte à différents environnements de marché.

Analyse des risques

Les risques sont les suivants:

  1. L'EMA 2/20 est lente et peut manquer des opportunités à court terme.

  2. La perte d'arrêt ATR peut être facilement pénétrée.

  3. Le signal est peu fiable, il faut plus de filtres.

  4. Faites attention à ne pas trop négocier.

  5. Le réglage des paramètres et le backtest sont nécessaires pour adapter le produit.

  6. Une gestion stricte du capital est nécessaire pour contrôler le risque par transaction.

Directions d'optimisation

La stratégie peut être améliorée par:

  1. Ajustement des paramètres EMA pour une meilleure combinaison.

  2. Optimiser le multiplicateur ATR pour un meilleur stop loss.

  3. Ajouter des conditions de filtre comme le volume et la volatilité.

  4. Ajout d'un modèle de gestion du capital pour la dimensionnement dynamique des positions.

  5. Ajout d'autres stratégies de stop loss comme Chandelier Exit.

  6. Test des paramètres sur différents produits.

  7. Ajout de modèles d'apprentissage automatique pour une meilleure performance.

  8. Combinant plusieurs sous-stratégies pour plus d'Alpha.

Conclusion

La stratégie combine deux idées principales et présente un certain avantage de capter les retours en arrière. Mais une sélection inappropriée des paramètres peut également présenter des risques.


/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 05/04/2022
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov 
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
// Please, use it only for learning or paper trading. Do not for real trading.
//
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
    pos = 0.0
    xPrice = close
    xXA = ta.ema(xPrice, Length)
    nHH = math.max(high, high[1])
    nLL = math.min(low, low[1])
    nXS = nLL > xXA or nHH < xXA ? nLL : nHH
    iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
    pos := nXS > close[1] ? -1 : iff_1
    pos


ATRR(nATRPeriod,nATRMultip) =>
    pos = 0.0
    xATR = ta.atr(nATRPeriod)
    nLoss = nATRMultip * xATR
    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
    pos:= close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0) ? 1 :
    	     close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0) 
    pos

strategy(title='Combo 2/20 EMA & Average True Range Reversed', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ Average True Range Reversed  ═════●'
nATRPeriod = input.int(5, group=I2)
nATRMultip = input.float(3.5, group=I2)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosATRR = ATRR(nATRPeriod,nATRMultip)
iff_1 = posEMA20 == -1 and prePosATRR == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosATRR == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
if possig == 1
    strategy.entry('Long', strategy.long)
if possig == -1
    strategy.entry('Short', strategy.short)
if possig == 0
    strategy.close_all()
barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)

Plus de