Les ressources ont été chargées... Je charge...

Stratégie transversale de l'AM

Auteur:ChaoZhang est là., Date: 2024-06-03 11h25 et 43 min
Les étiquettes:SMA- Je vous en prie.

img

Résumé

Cet article présente une stratégie de trading quantitative basée sur le principe de croisement de la moyenne mobile. La stratégie détermine la direction longue/courte en comparant le prix avec la moyenne mobile, et définit les niveaux de profit et de stop-loss pour contrôler le risque.

Principe de stratégie

Le noyau de cette stratégie est la moyenne mobile. Elle calcule la moyenne mobile simple du prix de clôture sur une certaine période comme base pour juger de la tendance. Lorsque le prix traverse au-dessus de la moyenne mobile, elle génère un signal long, et quand elle traverse en dessous, elle génère un signal court.

Les avantages de la stratégie

Le crossover moyen mobile est une méthode simple et facile à utiliser de suivi des tendances qui peut capturer efficacement les tendances du marché à moyen et long terme. Avec des paramètres raisonnables, la stratégie peut obtenir des rendements stables sur les marchés en tendance.

Risques stratégiques

Les moyennes mobiles sont par nature des indicateurs de retard. Pendant les points tournants du marché, les signaux peuvent être retardés, ce qui entraîne des opportunités de trading optimales manquées ou de faux signaux. Des paramètres incorrects affecteront les performances de la stratégie et doivent être optimisés en fonction des différentes caractéristiques et des délais du marché.

Directions d'optimisation de la stratégie

  1. Plusieurs moyennes mobiles de différentes périodes peuvent être combinées pour améliorer la fiabilité du signal, comme des croisements doubles ou triples des moyennes mobiles.
  2. L'optimisation des paramètres de prise de profit et de stop-loss peut être poursuivie, par exemple en ajustant dynamiquement en fonction d'indicateurs de volatilité tels que l'ATR ou en adoptant des stratégies d'arrêt de trailing.
  3. Des conditions de filtrage supplémentaires peuvent être ajoutées, telles que des percées de prix de niveaux de support/résistance importants, des changements de volume de négociation, etc., pour améliorer la qualité du signal.
  4. Dans l'application réelle, il est nécessaire de procéder à des tests antérieurs et à la validation appropriés de la stratégie et de gérer les fonds pour contrôler le risque commercial unique et l'utilisation globale.

Résumé

La stratégie de croisement moyen mobile est une stratégie de trading quantitative simple et pratique qui peut profiter des marchés en tendance grâce au suivi des tendances et au contrôle des stop-loss. Cependant, la stratégie elle-même a certaines limitations 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 risques.


/*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) 



Relationnée

Plus de