Cette stratégie génère des signaux d'entrée LONG ou SHORT lorsque la moyenne mobile simple rapide de 30 jours et la moyenne mobile simple lente de 33 jours du prix de l'action se croisent.
Le noyau de cette stratégie est de calculer le MA rapide de 30 jours et le MA lent de 33 jours. La ligne rapide peut répondre aux changements de prix plus rapidement tandis que la ligne lente a un meilleur effet de filtrage. Lorsque la ligne rapide traverse la ligne lente vers le haut, un signal d'achat est généré. Cela indique que le prix commence à augmenter et que la ligne rapide a répondu tandis que la ligne lente est toujours en retard. Lorsque la ligne rapide traverse la ligne lente vers le bas, un signal de vente est généré. Cela indique que le prix commence à diminuer tandis que la ligne rapide a répondu mais que la ligne lente est toujours en retard.
Grâce à une conception de croisement MA rapide et lente, il peut générer des signaux de trading lorsqu'une nouvelle tendance commence et quitter à des signaux opposés, capturant efficacement les tendances des prix à moyen et long terme.
La stratégie présente les avantages suivants:
Cette stratégie comporte également certains risques:
Des méthodes telles que l'optimisation des paramètres, le réglage du niveau de stop loss, le trading uniquement lorsque la tendance est claire, etc. peuvent être utilisées pour contrôler et réduire ces risques.
La stratégie peut être optimisée dans les aspects suivants:
Grâce aux tests et à l'optimisation, les règles de stratégie peuvent être continuellement améliorées pour obtenir des signaux de trading plus fiables dans différents environnements de marché.
En résumé, cette stratégie de rupture de double MA est assez simple et pratique. En combinant MA rapide et MA lente, elle peut identifier efficacement le début des tendances à moyen et long terme et générer des signaux de trading relativement fiables. En outre, sa règle de stop loss est facile à mettre en œuvre. Avec une optimisation supplémentaire, cette stratégie peut devenir un système quantitatif à long terme utile.
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //future strategy //strategy(title = "es1!_1minute_hull", default_qty_type = strategy.fixed, initial_capital=250000, overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2, calc_on_order_fills=false, calc_on_every_tick=false,pyramiding=0) //strategy.risk.max_position_size(2) //stock strategy strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=1000000, overlay = false)//, calc_on_order_fills=true, calc_on_every_tick=true) //forex strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true,initial_capital=250000, default_qty_type = strategy.percent_of_equity) //crypto strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true, commission_type=strategy.commission.percent,commission_value=.005,default_qty_value=10000) //strategy.risk.allow_entry_in(strategy.direction.long) // There will be no short entries, only exits from long. testStartYear = 2010 testStartMonth = 1 testStartDay = 1 testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testEndYear = 2039 testEndMonth = 1 testEndDay = 1 testPeriodEnd = timestamp(testEndYear,testEndMonth,testEndDay,0,0) testPeriod() => //true time >= testPeriodStart and time <= testPeriodEnd ? true : false fast_length = 30 slow_length = 33 ema1 = 0.0 ema2 = 0.0 volumeSum1 = sum(volume, fast_length) volumeSum2 = sum(volume, slow_length) //ema1 := (((volumeSum1 - volume) * nz(ema1[1]) + volume * close) / volumeSum1) ema1 := ema(close,fast_length) //ema2 := (((volumeSum2 - volume) * nz(ema2[1]) + volume * close) / volumeSum2) ema2 := ema(close,slow_length) plot(ema1,color=#00ff00, linewidth=3) plot(ema2, color=#ffff00, linewidth=3) go_long = crossover(ema1,ema2) go_short = crossunder(ema1,ema2) if testPeriod() strategy.entry("long_ride", strategy.long, when=go_long) strategy.entry("short_ride", strategy.short,when=go_short) strategy.close("long_ride",when=go_short) strategy.close("short_ride",when=go_long)