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

Stratégie de négociation croisée à double moyenne mobile

Auteur:ChaoZhang est là., Date: 2023-11-02 14h21 et 24h
Les étiquettes:

img

Résumé

Cette stratégie utilise le croisement des moyennes mobiles doubles comme signaux de trading, combiné avec les arrêts ATR pour la tendance après le trading.

La logique de la stratégie

La stratégie utilise principalement deux ensembles de moyennes mobiles pour déterminer la direction de la tendance. La moyenne mobile rapide a une durée de 25 jours, et la moyenne mobile lente a une durée de 100 jours. Un signal d'achat est généré lorsque le MA rapide traverse au-dessus du MA lent, et un signal de vente est généré lorsqu'il traverse en dessous.

Pour filtrer certains faux signaux, la stratégie ajoute un compteur de croisement appelé crossCount. Les signaux ne sont déclenchés que lorsque le nombre de croisements pour le MA rapide dans la période de lookback (défaut 25 jours) est inférieur à maxNoCross (défaut 10).

En outre, la stratégie dispose d'un mécanisme de confirmation, où le signal est également confirmé si le prix rentre entre les deux moyennes mobiles après le signal initial.

Après avoir entré des positions, la stratégie utilise l'ATR pour définir des niveaux d'arrêt de perte.

Analyse des avantages

La stratégie présente les avantages suivants:

  1. En utilisant des doubles croisements MA avec filtrage, il peut capturer efficacement les mouvements de tendance forts tout en évitant les faux signaux.

  2. Le mécanisme de confirmation empêche d'être falsifié par de fausses fuites.

  3. L'arrêt-perte ATR flottant permet de maximiser les bénéfices tout en limitant les retraits.

  4. Il a peu de paramètres optimisables et est facile à mettre en œuvre.

  5. Applicable sur tous les marchés, y compris les crypto-monnaies et les actifs traditionnels.

  6. Combine plusieurs indicateurs techniques de robustesse.

Analyse des risques

Les principaux risques de la stratégie sont les suivants:

  1. Les passages fréquents de l'AM au cours des périodes d'intervalle peuvent entraîner plusieurs pertes.

  2. Un réglage incorrect des paramètres ATR peut entraîner des arrêts trop larges ou trop serrés.

  3. Les grands écarts peuvent directement déclencher des arrêts.

  4. Les événements d'actualité majeurs causant une forte volatilité peuvent également arrêter les positions.

  5. Des paramètres d'AM inadéquats pourraient conduire à des tendances manquantes ou à un trop grand nombre de faux signaux.

  6. L'action récente des prix peut rendre les arrêts ATR obsolètes.

Directions d'optimisation

La stratégie peut être encore optimisée dans les aspects suivants:

  1. Optimiser les paramètres de l'AM pour trouver de meilleures combinaisons, en testant différentes périodes et moyennes pondérées.

  2. Testez différentes périodes ATR pour trouver de meilleures distances d'arrêt.

  3. Ajoutez des filtres supplémentaires comme des pics de volume, des indicateurs de volatilité pour améliorer la qualité du signal.

  4. Incorporer des indicateurs de tendance pour éviter les crises sur les marchés instables.

  5. Ajoutez des algorithmes d'apprentissage automatique pour optimiser automatiquement les paramètres par backtesting.

  6. Cherchez plus de confirmation sur des délais plus longs pour éviter le bruit à court terme.

  7. Mettre en œuvre des règles de prise de profit par étapes pour éliminer les positions rentables.

Résumé

Cette stratégie combine les doubles croisements MA, le filtrage des tendances, la confirmation et les arrêts ATR dynamiques pour un suivi robuste des tendances.


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

//@version=3
strategy("QuantCat Intraday Strategy (15M)", overlay=true)

//MA's for basic signals, can experiment with these values

fastEMA = sma(close, 25)
slowEMA = sma(close, 100)

//Parameters for validation of position

lookback_value = 25
maxNoCross=10 //value used for maximum number of crosses on a certain MA to mitigate noise and maximise value from trending markets

//Amount of crosses on MA to filter out noise

ema25_crossover = (cross(close, fastEMA)) == true ? 1 : 0
ema25_crossover_sum = sum(ema25_crossover, lookback_value) ///potentially change lookback value to alter results
crossCount = (ema25_crossover_sum <= maxNoCross)

//Entries long

agrLong =  ((crossover(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consLong = ((close < fastEMA) and (close > slowEMA) and (fastEMA > slowEMA) and (crossCount == true)) ? true : false

//Entries short

agrShort =  ((crossunder(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consShort = ((close > fastEMA) and (close < slowEMA) and (fastEMA < slowEMA) and (crossCount == true)) ? true : false

//ATR

atrLkb = input(14, minval=1, title='ATR Stop Period')
atrRes = input("15",  title='ATR Resolution')
atr = request.security(syminfo.tickerid, atrRes, atr(atrLkb))

//Strategy

longCondition = ((agrLong or consLong) == true)
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = ((agrShort or consShort) == true)
if (shortCondition)
    strategy.entry("Short", strategy.short)

//Stop multiplier 

stopMult = 4

//horizontal stoplosses

longStop = na
longStop :=  shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atr * stopMult) : longStop[1] 
shortStop = na
shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atr * stopMult) : shortStop[1]

//Strategy exit functions

strategy.exit("Long ATR Stop", "Long", stop=longStop)
strategy.exit("Short ATR Stop", "Short", stop=shortStop)

//Plots 

redgreen = (fastEMA > slowEMA) ? green : red
    
p1 = plot(fastEMA, title="Fast EMA", color=redgreen, linewidth=2) 
p2 = plot(slowEMA, title="Slow EMA", color=redgreen, linewidth=2) 
fill(p1, p2, color=redgreen)

s1 = plot(longStop, style=linebr, color=red, linewidth=2,     title='Long ATR Stop')
s2 = plot(shortStop, style=linebr, color=red, linewidth=2,  title='Short ATR Stop')

fill(p2, s1, color=red, transp=95)
fill(p2, s2, color=red, transp=95)





    




Plus de