Stratégie de suivi des tendances sur plusieurs périodes

Auteur:ChaoZhang est là., Date: 2023-11-14 14:29:39
Les étiquettes:

img

Résumé

Cette stratégie combine les moyennes mobiles, le MACD et le RSI sur plusieurs délais pour identifier les tendances et négocier les tendances de l'indice S&P500.

La logique de la stratégie

  1. La moyenne mobile simple sur 10 jours juge l'évolution des prix.

  2. Il calcule la différence entre les moyennes mobiles exponentielles de 12 et 21 jours, et le croisement entre la ligne MACD et la ligne de signal génère des signaux de trading.

  3. L'indicateur de volatilité à 14 jours et son MA à 50 jours sont calculés.

  4. Les délais de 1 minute, 3 minutes et 5 minutes confirment la cohérence de la tendance.

  5. Lorsque le prix dépasse le seuil MA de 10 jours, le RSI dépasse son seuil MA et la ligne MACD dépasse la ligne de signal, un signal d'achat est généré.

Les avantages

  1. La combinaison d'indicateurs améliore la précision du signal. Le MA à 10 jours juge la tendance principale, le MACD détermine la force de l'élan et le RSI confirme les niveaux de surachat/survente.

  2. La confirmation à plusieurs délais évite le bruit du marché. La confirmation en double sur des délais de 1 minute, 3 minutes et 5 minutes garantit l'apparition simultanée du signal et filtre les faux signaux.

  3. L'analyse graphique des modèles évite des niveaux extrêmes de surachat/survente et réduit les risques de perte.

  4. La fréquence de négociation moyenne convient à la négociation d'indices.

Les risques

  1. Ne pas détecter un renversement brusque dans des événements irrationnels.

  2. Les paramètres doivent être ajustés dynamiquement pour les différents régimes de marché dans le cadre de la négociation en direct.

  3. Les signaux d'entrée doivent être affinés par glissement pour améliorer la liquidité exécutable.

  4. Des délais multiples augmentent le retard du signal. Un contrôle de risque approprié est nécessaire pour minimiser les pertes dues au retard lors d'événements soudains.

Amélioration

  1. Incorporer des mécanismes d'arrêt de perte tels que l'arrêt de perte de suivi et le pourcentage d'arrêt de perte pour contrôler la perte d'une seule transaction.

  2. Optimiser les paramètres dynamiques pour s'adapter à l'évolution des marchés et améliorer la robustesse de la stratégie.

  3. Considérer les changements de régime du marché à la suite d'événements importants afin d'éviter les chocs du modèle.

  4. Compte tenu des coûts de négociation tels que le glissement et ajustez les points d'entrée/sortie pour une meilleure exécution.

  5. Testez différentes entrées de prix comme le chandelier comme confirmation de signal pour diversifier la validation multi-temporelle.

  6. Utiliser des algorithmes d'apprentissage automatique sur les données volumineuses pour automatiser l'optimisation de la stratégie.

Conclusion

Cette stratégie négocie efficacement les tendances du S&P500 grâce à l'identification des tendances avec de multiples indicateurs et à la confirmation des signaux à travers les délais. Ses atouts résident dans la haute précision du signal et la résistance au bruit, mais le contrôle des risques et l'ajustement des paramètres dynamiques sont nécessaires.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// USE HEIEN ASHI, 1 min, SPX 500 USD OANDA
// © connor2279
//@version=5
strategy(title="SPX Strategy", shorttitle="SPXS", overlay=true)

//SMA
len1 = 10
src1 = input(close, title="SMA Source #1")
out1 = ta.sma(src1, len1)
plot(out1, title="SMA #1", color=close >= out1 ? color.lime : color.red, linewidth=2)

data_over = ta.crossover(close, out1)
dataO = close >= out1
data_under = ta.crossunder(close, out1)
dataU = close < out1

bgcolor(color=ta.crossover(close, out1) ? color.new(color.lime, 90) : na)
bgcolor(color=ta.crossunder(close, out1) ? color.new(color.red, 90) : na)     

//Norm MacD
sma = 12
lma = 21
tsp = 10
np = 50
    
sh = ta.ema(close,sma)  

lon= ta.ema(close,lma) 

ratio = math.min(sh,lon)/math.max(sh,lon)

Mac = ratio - 1
if(sh>lon)
    Mac := 2-ratio - 1
else
    Mac := ratio - 1

MacNorm = ((Mac-ta.lowest(Mac, np)) /(ta.highest(Mac, np)-ta.lowest(Mac, np)+.000001)*2)- 1

MacNorm2 = MacNorm

if(np<2)
    MacNorm2 := Mac
else
    MacNorm2 := MacNorm
    
Trigger = ta.wma(MacNorm2, tsp)

trigger_above = Trigger >= MacNorm
trigger_under = Trigger < MacNorm
plotshape(ta.crossover(Trigger, MacNorm2), style=shape.triangledown, color=color.red)
plotshape(ta.crossunder(Trigger, MacNorm2), style=shape.triangledown, color=color.lime)

//RSI / SMA RSI
swr=input(true,title="RSI")
src = close
len = 14
srs = 50
up = ta.rma(math.max(ta.change(src), 0), len)
down = ta.rma(-math.min(ta.change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
mr = ta.sma(rsi,srs)
rsi_above = rsi >= mr
rsi_under = rsi < mr

//All
buySignal = rsi_above and trigger_under and dataO
shortSignal = rsi_under and trigger_above and dataU
bgcolor(color=buySignal ? color.new(color.lime,97) : na)     
bgcolor(color=shortSignal ? color.new(color.red, 97) : na)     
     
sellSignal = ta.cross(close, out1) or ta.cross(Trigger, MacNorm2) or ta.cross(rsi, mr)
if (buySignal)
    strategy.entry("LONG", strategy.long, 1)

if (shortSignal)
    strategy.entry("SHORT", strategy.short, 1)

// Submit exit orders
strategy.close("LONG", when=sellSignal)
strategy.close("SHORT", when=sellSignal)

Plus de