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 stratégie calcule d'abord la variation de l'élan des prixmomm
, puis le sépare en dynamique positivem1
et momentum négatifm2
Ensuite, il résume l'élan positif et négatif sur une période de rétrospective ensm1
etsm2
Enfin, l'oscillateur de momentum de ChandechandeMO
L'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.
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.
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}}