Stratégie de trading quantitative basée sur le croisement de moyennes mobiles pondérées


Date de création: 2023-12-06 12:05:01 Dernière modification: 2023-12-06 12:05:01
Copier: 0 Nombre de clics: 626
1
Suivre
1619
Abonnés

Stratégie de trading quantitative basée sur le croisement de moyennes mobiles pondérées

Aperçu

Cette stratégie s’appelleStratégie de croisement de la moyenne mobile quantitative pondéréeLa stratégie de croisement des moyennes mobiles pondérées (WAMC) est basée sur la combinaison de plusieurs indicateurs tels que le prix, le volume des transactions, la conception de lignes rapides et lentes, et l’émission de signaux d’achat et de vente lorsqu’ils se produisent.

Principe de stratégie

L’indicateur central de cette stratégie est la moyenne mobile quantitative. La QMA mesure la direction de la tendance en calculant une moyenne pondérée des prix sur une période de temps. Elle diffère de la moyenne mobile ordinaire par le fait que le poids des prix est égal au poids des prix.*Le volume des transactions (en volume) diminue avec le temps. Ainsi, les prix les plus récents ont plus de poids et peuvent répondre plus rapidement aux changements du marché.

Plus précisément, cette stratégie construit une ligne QMA rapide et une ligne QMA lente. Le paramètre de la ligne rapide est défini à 25 jours et le paramètre de la ligne lente à 29 jours. Un signal d’achat est généré lorsque la ligne rapide traverse la ligne lente par le bas; un signal de vente est généré lorsque la ligne rapide traverse la ligne lente par le haut.

Analyse des avantages

Par rapport à la moyenne mobile ordinaire, cette stratégie présente les avantages suivants:

  1. Une réponse plus rapide au marché et des opportunités de raccourcis
  2. Une plus grande stabilité en combinant plusieurs dimensions de prix et de volumes
  3. Les paramètres sont flexibles et adaptés à différents environnements de marché

Analyse des risques

Cette stratégie présente aussi des risques:

  1. La fréquence des opérations de raccourcissement des lignes peut augmenter les coûts de transaction et les points de glissement.
  2. PARAMETERS sur-optimisation qui peut entraîner une adéquation de la courbe
  3. L’effet de l’indicateur peut être réduit en cas de faible volume de transactions

Ces risques peuvent être atténués par un ajustement approprié de la fréquence des paramètres, une analyse rigoureuse de la marche en avant et une combinaison d’autres indicateurs.

Direction d’optimisation

Il y a encore de la place pour optimiser la stratégie:

  1. Adaptation dynamique des paramètres de la QMA afin qu’elle puisse s’adapter à la volatilité du marché
  2. Filtrez les opportunités d’entrée avec des indicateurs tels que la volatilité et le volume des transactions
  3. Augmenter les stratégies de stop-loss et contrôler les pertes individuelles

Résumer

Cette stratégie est généralement une stratégie de trading à court terme qui présente une meilleure stabilité. Ses indicateurs reflètent mieux la relation d’offre et de demande du marché que la moyenne des prix uniques. Grâce à l’ajustement des paramètres et à l’introduction de moyens de contrôle du risque, cette stratégie peut fonctionner de manière stable à long terme et obtenir de bons rendements.

Code source de la stratégie
/*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