Stratégie de croisement de moyennes mobiles

SMA MA
Date de création: 2024-06-03 11:25:43 Dernière modification: 2024-06-03 11:25:43
Copier: 0 Nombre de clics: 643
1
Suivre
1617
Abonnés

Stratégie de croisement de moyennes mobiles

Aperçu

Cet article présente une stratégie de trading quantitatif basée sur le principe de la croisée des moyennes mobiles. Cette stratégie permet de juger de la direction de la polygamie en comparant la relation entre les prix et les moyennes mobiles, tout en définissant des points de stop-loss pour contrôler le risque. Le code de la stratégie est écrit en utilisant Pine Script, intégré à l’API de la plate-forme de trading Dhan, qui permet d’automatiser les transactions des signaux de la stratégie.

Principe de stratégie

Le cœur de la stratégie est la moyenne mobile, qui est basée sur le calcul d’une moyenne mobile simple du prix de clôture sur un certain cycle pour déterminer la tendance. Lorsque le prix dépasse la moyenne, il génère des signaux de plus et de moins. En même temps, le filtrage des signaux répétés en continu avec la fonction extrem améliore la qualité du signal.

Avantages stratégiques

La croisée des moyennes mobiles est une méthode de suivi de tendance simple et facile à utiliser qui permet de capturer efficacement les tendances à moyen et long terme du marché. En réglant raisonnablement les paramètres, la stratégie peut obtenir des gains stables dans des conditions de tendance. La configuration de stop-loss est propice au contrôle des retraits et à l’amélioration du rapport risque-gains.

Risque stratégique

Les moyennes mobiles sont essentiellement des indicateurs en retard. Lors d’un retournement de marché, le signal peut être retardé, ce qui entraîne la perte du meilleur moment de négociation ou la production de faux signaux. Une mauvaise configuration des paramètres peut affecter la performance de la stratégie et doit être optimisée en fonction des différentes caractéristiques et périodes du marché.

Orientation de l’optimisation de la stratégie

  1. Il est possible d’essayer d’utiliser plusieurs combinaisons de périodes différentes pour améliorer la fiabilité du signal, telles que les doubles périodes, les croisements triangulaires, etc.
  2. Les paramètres de stop loss peuvent être optimisés davantage, par exemple en s’adaptant dynamiquement aux indicateurs de volatilité tels que l’ATR, ou en adoptant une stratégie de stop loss tracking.
  3. D’autres conditions de filtrage peuvent être ajoutées, telles que la rupture du prix de la résistance au support important, les variations du volume de transactions, etc., pour améliorer la qualité du signal.
  4. Dans les applications en ligne, il est nécessaire d’avoir une stratégie de vérification et de gestion des fonds, de contrôler le risque de transaction individuelle et le retrait global.

Résumer

La stratégie de croisement des moyennes mobiles est une stratégie de négociation quantitative simple et pratique qui permet de tirer profit de la tendance en suivant la tendance et en contrôlant le stop-loss. Cependant, la stratégie elle-même présente certaines limites et doit être optimisée et améliorée en fonction des caractéristiques du marché et des préférences en matière de risque.

Code source de la stratégie
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © syam-mohan-vs @ T7 - wwww.t7wealth.com www.t7trade.com
//This is an educational code done to describe the fundemantals of pine scritpting language and integration with Indian discount broker Dhan. This strategy is not tested or recommended for live trading. 

//@version=5
strategy("Pine & Dhan - Moving Average Crossover Strategy", overlay=true)

//Remove excess signals
exrem(condition1, condition2) =>
    temp = false
    temp := na(temp[1]) ? false : not temp[1] and condition1 ? true : temp[1] and condition2 ? false : temp[1]
    ta.change(temp) == true ? true : false

// Define MA period
ma_period = input(20, title = "MA Length")

// Define target and stop loss levels
target_percentage = input.float(title="Target Profit (%)", defval=2.0)
stop_loss_percentage = input.float(title="Stop Loss (%)", defval=1.0)

// Calculate the MA
ma = ta.sma(close, ma_period)

// Entry conditions
long_entry = close >= ma
short_entry = close < ma

// Calculate target and stop loss prices
target_price = long_entry ? strategy.position_avg_price + (close * (target_percentage / 100)) : strategy.position_avg_price - (close * (target_percentage / 100)) 
stop_loss_price = short_entry ? strategy.position_avg_price + (close * (stop_loss_percentage/ 100)) : strategy.position_avg_price - (close * (stop_loss_percentage / 100)) 

long_entry := exrem(long_entry,short_entry)
short_entry := exrem(short_entry,long_entry)

// Plot the MA
plot(ma, color=color.blue, linewidth=2, title="MA")

// Plot the entry and exit signals
plotshape(long_entry, style=shape.arrowup, color=color.green, size=size.small,location = location.belowbar)
plotshape(short_entry, style=shape.arrowdown, color=color.red, size=size.small,location = location.abovebar)

//Find absolute value of positon size to exit position properly
size = math.abs(strategy.position_size)

//Replace these four JSON strings with those generated from user Dhan account
long_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"I","sort_order":"1","price":"0"}]}'
long_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'

// Submit orders based on signals
if(strategy.position_size == 0)
    if long_entry 
        strategy.order("Long", strategy.long,alert_message=long_msg)          

    if short_entry
        strategy.order("Short", strategy.short,alert_message=short_msg)        
    
if(strategy.position_size > 0)
    
    if(short_entry)
        strategy.order("Short", strategy.short, qty = size, alert_message=short_msg)     
    else
        strategy.exit("Long Exit", from_entry="Long", qty = size, stop=stop_loss_price, limit= target_price, alert_message=long_exit_msg)

if(strategy.position_size < 0)
    
    if(long_entry)
        strategy.order("Long", strategy.long, qty = size, alert_message=long_msg)    
    else           
        strategy.exit("Short Exit", from_entry="Short", qty = size, stop=stop_loss_price, limit= target_price, alert_message=short_exit_msg)