Stratégie de rupture de la moyenne mobile à point unique

Auteur:ChaoZhang est là., Date: 2024-02-02 11:19:19 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie de rupture moyenne mobile à point unique est une stratégie de trading quantitative basée sur l'oscillateur de momentum de Chande. Elle détecte quand le marché est en phase de consolidation en calculant les changements de momentum du prix. Lorsque la ligne de momentum de Chande traverse au-dessus de la ligne d'achat ou tombe en dessous de la ligne de vente, les transactions longues ou courtes seront exécutées en conséquence.

La logique de la stratégie

La stratégie calcule d'abord la variation de l'élan des prixmomm, puis le sépare en dynamique positivem1et momentum négatifm2Ensuite, il résume l'élan positif et négatif sur une période de rétrospective ensm1etsm2Enfin, l'oscillateur de momentum de ChandechandeMOL'indicateur oscille autour de la ligne zéro. Les lectures supérieures à zéro indiquent une dynamique ascendante plus forte, tandis que les lectures inférieures à zéro indiquent une dynamique descendante plus forte.

Lorsque la ligne de dynamique de Chande traverse au-dessus de la ligne d'achat à partir de niveaux inférieurs, cela indique que le prix sort d'une tendance à la baisse et est prêt à commencer une tendance à la hausse.

Analyse des avantages

  • La stratégie est capable d'identifier les points tournants de la tendance à la baisse à la consolidation à la tendance à la hausse, permettant des entrées à bas prix et des sorties à prix élevés.
  • L'oscillateur de momentum de Chande prend en compte à la fois l'ampleur et le taux de variation des prix, ce qui le rend très efficace pour la détection de tendance.
  • La logique de la stratégie est simple et facile à mettre en œuvre.

Analyse des risques

  • L'oscillateur de momentum de Chande est sensible aux paramètres d'entrée.
  • Les réglages statiques des lignes d'achat et de vente peuvent également introduire des faux signaux excessifs.
  • L'absence de stop loss signifie que les transactions perdantes peuvent accumuler de grosses pertes.

Certaines façons d'améliorer comprennent l'utilisation de lignes d'achat/vente dynamiques, le filtrage des signaux avec d'autres indicateurs et la mise en œuvre d'un stop loss pour contrôler les risques.

Directions d'optimisation

  • Testez différents paramètres pour trouver des valeurs optimales
  • Adopter des lignes d'achat et de vente dynamiques
  • Ajouter des filtres supplémentaires avec d' autres indicateurs
  • Incorporer une logique de stop loss pour réduire les pertes

Conclusion

La stratégie de rupture de moyenne mobile à point unique identifie les points de basculement de la tendance à la consolidation à la tendance à la hausse en utilisant l'oscillateur de dynamique de Chande, permettant un trading à bas prix.


/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

//* Backtesting Period Selector | Component *//
//* https://www.tradingview.com/script/eCC1cvxQ-Backtesting-Period-Selector-Component *//
//* https://www.tradingview.com/u/pbergden/ *//
//* Modifications made *//
testStartYear = input(2021, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(10, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(999999, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(26, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
/////////////// END - Backtesting Period Selector | Component ///////////////
strategy(title="Chande Momentum Strat", shorttitle="ChandeMO Strat", format=format.price, precision=2)
length = input(9, minval=1)
src = input(close, "Price", type = input.source)
momm = change(src)
f1(m) => m >= 0.0 ? m : 0.0
f2(m) => m >= 0.0 ? 0.0 : -m
m1 = f1(momm)
m2 = f2(momm)
sm1 = sum(m1, length)
sm2 = sum(m2, length)
percent(nom, div) => 100 * nom / div
chandeMO = percent(sm1-sm2, sm1+sm2)
plot(chandeMO, "Chande MO", color=color.blue)
hline(0, color=#C0C0C0, linestyle=hline.style_dashed, title="Zero Line")
buyline= input(-80)
sellline= input(80)
hline(buyline, color=color.gray)
hline(sellline, color=color.gray)

if testPeriod()
    if crossover(chandeMO, buyline)
        strategy.entry("Long", strategy.long, alert_message="a=ABCD b=buy e=binanceus q=1.2 s=uniusd")
    //    strategy.exit(id="Long Stop Loss", stop=strategy.position_avg_price*0.8) //20% stop loss 
        
    if crossunder(chandeMO, sellline)
        strategy.entry("Short", strategy.short, alert_message="a=ABCD b=sell e=binanceus q=1.2 s=uniusd")
    //    strategy.exit(id="Short Stop Loss", stop=strategy.position_avg_price*1.2) //20% stop loss

//      remember to alert as    {{strategy.order.alert_message}}

Plus de