Stratégie de négociation croisée des moyennes mobiles quantitatives pondérées

Auteur:ChaoZhang est là., Date: 2023-12-06 12:05:01 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie s'appelleStratégie de répartition des moyennes mobiles quantitatives pondéréesL'idée de base est de concevoir des lignes rapides et lentes basées sur le prix, le volume des transactions et d'autres indicateurs, et de générer des signaux d'achat et de vente lorsque des croisements dorés et morts se produisent entre eux.

La logique de la stratégie

L'indicateur de base de cette stratégie est la moyenne mobile quantitative (QMA). QMA mesure la direction de la tendance en calculant le prix moyen pondéré sur une période de temps. Contrairement à la moyenne mobile régulière, les poids (poids = prix * volume de négociation) des prix dans QMA diminueront avec le temps. Ainsi, les derniers prix ont des poids plus importants qui peuvent répondre plus rapidement aux changements du marché.

Plus précisément, cette stratégie construit une ligne QMA rapide avec 25 jours et une ligne QMA lente avec 29 jours.

Analyse des avantages

Cette stratégie présente les avantages suivants par rapport à la moyenne mobile régulière:

  1. Réagir plus rapidement au marché, ce qui lui permet de saisir les opportunités à court terme.
  2. Combiner plusieurs dimensions, y compris le prix et le volume des transactions, ce qui le rend plus stable.
  3. Des paramètres flexibles pour s'adapter aux différents environnements du marché.

Analyse des risques

Cette stratégie comporte également des risques:

  1. fréquence élevée des opérations à court terme, ce qui peut entraîner une augmentation des coûts de transaction et des dérapages.
  2. Suradaptation due à une optimisation excessive des paramètres.
  3. L'effet de l'indicateur peut être compromis lorsque le volume de négociation est insuffisant.

Les risques susmentionnés pourraient être atténués par un ajustement approprié de la fréquence, une analyse strictement progressive et l'intégration d'autres indicateurs.

Directions d'amélioration

Il reste encore des possibilités d'optimisation de cette stratégie:

  1. Ajustez dynamiquement les paramètres de la QMA pour qu'elle s'adapte à la volatilité du marché.
  2. Filtrez les opportunités de négociation avec des indicateurs tels que la volatilité et le volume des transactions.
  3. Ajouter des stratégies de stop loss pour contrôler les pertes uniques.

Conclusion

En général, il s'agit d'une stratégie de négociation stable à court terme. Par rapport à la moyenne de prix unique, son indicateur peut mieux refléter la relation offre-demande sur le marché. Avec un ajustement approprié des paramètres et une gestion des risques, cette stratégie peut fonctionner de manière stable à long terme et générer des bénéfices solides.


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

//@version=3
strategy("Brad VWMACD Strategy 2233", overlay=false, max_bars_back=500,default_qty_type=strategy.percent_of_equity,commission_type=strategy.commission.percent, commission_value=0.18, default_qty_value=100)

// === INPUT BACKTEST RANGE === 
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === INPUT SMA === 
//fastMA    = input(defval = 16, type = integer, title = "FastMA", minval = 1 )
//slowMA    = input(defval = 23, type = integer, title = "SlowMA", minval = 1)

fastMA    = input(defval = 25, title = "FastMA", minval = 1 )
slowMA    = input(defval = 29,  title = "SlowMA", minval = 1)

Long_period = slowMA
Short_period = fastMA
Smoothing_period = input(9, minval=1)
xLongMAVolPrice = ema(volume * close, Long_period) 
xLongMAVol = ema(volume, Long_period) 
xResLong = (xLongMAVolPrice * Long_period) / (xLongMAVol * Long_period)
xShortMAVolPrice = ema(volume * close, Short_period) 
xShortMAVol = ema(volume, Short_period) 
xResShort = (xShortMAVolPrice * Short_period) / (xShortMAVol * Short_period)
xVMACD = xResShort - xResLong
xVMACDSignal = ema(xVMACD, Smoothing_period)
nRes = xVMACD - xVMACDSignal
//plot(nRes*20+slowMA, color=blue, style = line )
//plot(3000, color=red, style = line )


// === SERIES SETUP ===

buy  = crossover( xVMACD,xVMACDSignal)     // buy when fastMA crosses over slowMA
sell = crossunder( xVMACD,xVMACDSignal)  // sell when fastMA crosses under slowMA


// === SERIES SETUP === 

//buy  = crossover(vwma(close, fastMA),7+vwma(close, slowMA))     // buy when fastMA crosses over slowMA
//sell = crossunder(vwma(close, fastMA),vwma(close, slowMA)-7)    // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy)  // buy long when "within window of time" AND crossover
strategy.close("L", when = window() and sell)                // sell long when "within window of time" AND crossunder         

// === EXECUTION ===
strategy.entry("S", strategy.short, when = window() and sell)  // buy long when "within window of time" AND crossover
strategy.close("S", when = window() and buy)                // sell long when "within window of time" AND crossunder         

plotshape(window() and buy, style=shape.triangleup, color=green, text="up")
plotshape(window() and sell, style=shape.triangledown, color=red, text="down")
plot(xVMACD*100, title = 'FastMA', color = orange, linewidth = 2, style = line)  // plot FastMA
plot(xVMACDSignal*100, title = 'SlowMA', color = aqua, linewidth = 2, style = line)    // plot SlowMA


Plus de