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.
La stratégie est composée de 2 parties:
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.
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.
La stratégie combine des idées de suivi de tendance et d'inversion, visant à capturer les inversions.
2/20 EMA identifie la tendance à moyen terme, évite le bruit du marché.
L'inversion de l'ATR capture les inversions et les opportunités à court terme.
La combinaison des signaux permet de détecter à l'avance l'inversion de tendance et d'améliorer la rentabilité.
Une perte d'arrêt ATR raisonnable permet un certain contrôle des risques.
Le multiplicateur ATR personnalisable s'adapte à différents produits.
L'option d'annulation s'adapte à différents environnements de marché.
Les risques sont les suivants:
L'EMA 2/20 est lente et peut manquer des opportunités à court terme.
La perte d'arrêt ATR peut être facilement pénétrée.
Le signal est peu fiable, il faut plus de filtres.
Faites attention à ne pas trop négocier.
Le réglage des paramètres et le backtest sont nécessaires pour adapter le produit.
Une gestion stricte du capital est nécessaire pour contrôler le risque par transaction.
La stratégie peut être améliorée par:
Ajustement des paramètres EMA pour une meilleure combinaison.
Optimiser le multiplicateur ATR pour un meilleur stop loss.
Ajouter des conditions de filtre comme le volume et la volatilité.
Ajout d'un modèle de gestion du capital pour la dimensionnement dynamique des positions.
Ajout d'autres stratégies de stop loss comme Chandelier Exit.
Test des paramètres sur différents produits.
Ajout de modèles d'apprentissage automatique pour une meilleure performance.
Combinant plusieurs sous-stratégies pour plus d'Alpha.
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)