Stratégie baissière à court terme basée sur les indicateurs de force baissière et de force croisée de l'EMA

Auteur:ChaoZhang est là., Date: 2023-10-17 à 14h41
Les étiquettes:

img

Résumé

Cette stratégie combine l'indicateur de croisement EMA et l'indicateur de puissance baissière pour générer des signaux baissiers à court terme.

La logique de la stratégie

  1. EMA Crossover: Calcule la moyenne mobile exponentielle (EMA) de 2/20 périodes et génère des signaux de vente lorsque le prix est inférieur à EMA.

  2. Puissance baissière: Calcule la différence entre le prix de clôture et le prix d'ouverture de la journée sous forme de valeur de puissance.

  3. En combinant les deux indicateurs, un signal court est généré lorsque le croisement EMA <0 et la puissance de support <-1.

  4. La stratégie ouvre à découvert en fonction du signal de vente et ferme la position en fonction du signal de sortie.

Les avantages

  1. Le croisement EMA peut prédire à l'avance les points d'inversion de tendance.

  2. La force baissière capte les opportunités de vente à découvert lors de fortes baisses intradiennes.

  3. La combinaison de deux indicateurs aide à filtrer les fausses ruptures et à identifier une dynamique baissière plus forte.

  4. Des paramètres flexibles s'adaptent à différents produits et environnements de marché.

  5. La fonction d'inversion s'adapte aux marchés à double sens.

Les risques

  1. Le croisement de l'EMA peut être en retard par rapport aux points de basculement optimaux.

  2. La force des baissiers peut générer de faux signaux lors de consolidations à plage.

  3. Il ne détermine pas les tendances à moyen et long terme, ce qui risque de le piéger.

  4. La régulation des paramètres requise en raison de paramètres inappropriés tels qu'une période EMA trop courte ou un seuil de vente trop élevé pourrait accroître les faux signaux.

  5. Faites attention aux événements économiques clés pour éviter les sessions de négociation prévues.

Amélioration

  1. Considérez l'ajout d'un stop loss à la limite de perte par transaction.

  2. Ajoutez des filtres comme des indicateurs de dynamique pour éviter les faibles signaux baissiers.

  3. Ajoutez des EMA à plus longue période pour déterminer la direction de la tendance principale et éviter les transactions contraires à la tendance.

  4. Optimiser les paramètres tels que la période EMA adaptative et le seuil de vente dynamique.

  5. Considérez la possibilité de combiner plusieurs délais pour intégrer des indicateurs à court, moyen et long terme.

Conclusion

Cette stratégie utilise d'abord le croisement EMA pour déterminer les principaux points de tendance et d'inversion, puis capture de fortes opportunités de vente intradienne à l'aide de l'indicateur de puissance baissière, formant ainsi une stratégie baissière à court terme robuste. Les avantages résident dans sa simplicité, sa flexibilité pour s'adapter à différents environnements de marché et sa capacité à inverser les directions longues / courtes. Cependant, des risques tels que le manque de points optimaux et la génération de faux signaux subsistent.


/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 19/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
//  Bear Power Indicator
//  To get more information please see "Bull And Bear Balance Indicator" 
//  by Vadim Gimelfarb. 
//
//
// 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


BP(SellLevel,BuyLevel) =>
    pos = 0.0
    value =  close < open  ?  
                 close[1] > open ?  math.max(close - open, high - low): high - low: 
                     close > open ? 
                         close[1] > open ? math.max(close[1] - low, high - close): math.max(open - low, high - close): 
                             high - close > close - low ? 
                                 close[1] > open ? math.max(close[1] - open, high - low) : high - low : 
                                  high - close < close - low ? 
                                   close > open ? math.max(close - low, high - close) : open - low : 
                                      close > open ? math.max(close[1] - open, high - close) :
                                       close[1] < open ? math.max(open - low, high - close) : high - low
    pos := value > SellLevel ? -1 :
    	     value <= BuyLevel ? 1 :nz(pos[1], 0) 

    pos

strategy(title='Combo 2/20 EMA & Bear Power', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ Bear Power ═════●'
SellLevel = input.float(10, step=0.01, group=I2)
BuyLevel = input.float(1, step=0.01, 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)
prePosBP = BP(SellLevel,BuyLevel)
iff_1 = posEMA20 == -1 and prePosBP == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosBP == 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