Stratégie de négociation quantitative basée sur la double EMA et l'indice de volatilité des prix

Auteur:ChaoZhang est là., Date: 2023-12-18 11:26:49 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie s'appelle Indicateur de moyenne mobile et stratégie de combinaison de volatilité des prix. Elle combine la moyenne mobile exponentielle double (DEMA) et l'indice de volatilité des prix pour générer un signal de trading complet.

Principe

La stratégie se compose de deux parties:

  1. Indicateur DEMA. Cet indicateur calcule les moyennes mobiles exponentielles de 20 jours et de 2 jours. Il génère des signaux de trading lorsque le prix franchit la ligne de 2 jours d'en haut ou la ligne de 20 jours d'en bas.

  2. (Prix le plus élevé - Prix le plus bas) / Indice de volatilité des prix de clôture. Cet indice reflète la fourchette de fluctuation des prix au cours d'une période. Ici, nous calculons la moyenne mobile simple de 16 jours de l'indice de volatilité sur les 20 dernières barres. Lorsque la volatilité de la barre actuelle est supérieure ou inférieure à cette valeur moyenne, elle génère des signaux de trading.

Les signaux des deux parties sont combinés. Si le DEMA et l'indice de volatilité donnent des signaux en même temps, les ordres de négociation longs ou courts finaux seront générés.

Analyse des avantages

La stratégie présente les avantages suivants:

  1. La combinaison de plusieurs indicateurs peut réduire les faux signaux et améliorer la fiabilité du signal.

  2. La ligne de 20 jours peut identifier efficacement les tendances à moyen et long terme, et la ligne de 2 jours peut capturer les fluctuations à court terme, ce qui rend la combinaison adaptable à différents environnements de marché.

  3. L'indice de volatilité peut refléter efficacement la volatilité du marché et les opportunités de négociation.

  4. En ajustant les paramètres, il peut s'adapter à différents produits et marchés cycliques.

Analyse des risques

La stratégie comporte également certains risques:

  1. Dans les tendances à faible volatilité, l'indice de volatilité peut générer des signaux erronés.

  2. Dans les marchés à sens unique rapides, les doubles EMA peuvent être en retard.

  3. La complexité accrue des indicateurs multiples augmente également le risque de sur-optimisation.

Directions d'optimisation

La stratégie peut également être optimisée dans les aspects suivants:

  1. L'ajout de mécanismes d'arrêt des pertes permet de contrôler efficacement les pertes par ordre.

  2. Optimiser les paramètres pour différents produits et cycles afin d'améliorer l'adaptabilité.

  3. Augmentation des indicateurs de liquidité et de volatilité pour améliorer la qualité des signaux.

  4. Ajout d'algorithmes d'apprentissage automatique pour obtenir un paramètre dynamique et un réglage du poids.

Conclusion

En combinant des EMA doubles et des indices de volatilité, cette stratégie peut atteindre de bonnes performances commerciales sur les marchés à la fois tendance et volatil.


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

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 12/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
//  This histogram displays (high-low)/close
//  Can be applied to any time frame.
//
//
// 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


HLCH(input_barsback,input_percentorprice,input_smalength) =>
    pos = 0.0
    xPrice = (high-low)/close
    xPriceHL = (high-low)
    xPrice1 = input_percentorprice ? xPrice * 100: xPriceHL
    xPrice1SMA = ta.sma(math.abs(xPrice1), input_smalength)
    pos := xPrice1SMA[input_barsback] > math.abs(xPrice1) ? 1 :
    	     xPrice1SMA[input_barsback] < math.abs(xPrice1) ? -1 : nz(pos[1], 0)
    pos

strategy(title='Combo 2/20 EMA & (H-L)/C Histogram', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ (H-L)/C Histogram  ═════●'
input_barsback = input(20, title="Look Back", group=I2)
input_percentorprice = input(false, title="% change", group=I2)
input_smalength = input(16, title="SMA Length", 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)
prePosHLCH = HLCH(input_barsback,input_percentorprice,input_smalength)
iff_1 = posEMA20 == -1 and prePosHLCH == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosHLCH == 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