Stratégie de trading quantitative basée sur la moyenne mobile


Date de création: 2024-01-26 16:29:23 Dernière modification: 2024-01-26 16:29:23
Copier: 0 Nombre de clics: 555
1
Suivre
1617
Abonnés

Stratégie de trading quantitative basée sur la moyenne mobile

Aperçu

La stratégie de croisement des moyennes mobiles est une stratégie de négociation quantitative basée sur des moyennes mobiles. La stratégie génère des signaux de négociation et génère des bénéfices en calculant la moyenne des prix des titres sur une période donnée, en utilisant la croisement des moyennes mobiles des prix.

Principe de stratégie

Cette stratégie utilise principalement des croisements de moyennes mobiles rapides et moyennes mobiles lentes pour déterminer la tendance des prix et générer des signaux de négociation. Plus précisément, il s’agit d’utiliser des moyennes mobiles de deux longueurs de période différentes, telles que les lignes de 10 jours et de 20 jours.

Lorsque la moyenne mobile rapide dépasse la moyenne mobile lente en descendant, on considère que le mouvement est passé de la baisse à la hausse, générant un signal d’achat. Lorsque la moyenne mobile rapide dépasse la moyenne mobile lente en descendant, on considère que le mouvement est passé de la hausse à la baisse, générant un signal de vente.

En capturant les points de basculement de la tendance des prix, la stratégie permet d’acheter quand les conditions sont favorables et de vendre quand les conditions sont défavorables, et ainsi de réaliser un profit.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. Des concepts simples, faciles à comprendre et à mettre en œuvre
  2. Paramètres personnalisables, tels que la périodicité des moyennes mobiles
  3. La rétroaction est plus efficace, particulièrement adaptée aux tendances
  4. intégrable à la logique Stop Loss, pour contrôler le risque

Analyse des risques

La stratégie présente également les risques suivants:

  1. La tendance est à la survente des signaux et à l’excès de transactions
  2. Paramètres à déboguer, combinaisons de paramètres différentes pour des résultats très variables
  3. Le résultat de la transaction sans prendre en compte les coûts et les points de glissement pourrait être inférieur à celui de la rétroaction.
  4. Il y a un décalage dans le temps, ce qui pourrait laisser passer une opportunité de revirement rapide des prix.

Ces risques peuvent être atténués par une optimisation appropriée.

Direction d’optimisation

Cette stratégie peut être optimisée dans les directions suivantes:

  1. En combinaison avec d’autres indicateurs de filtrage, tels que l’indicateur de quantité d’énergie, l’indicateur de vibration, etc., afin d’éviter les erreurs de négociation lors de la compilation
  2. Ajout d’une moyenne mobile adaptative pour permettre aux paramètres périodiques de changer dynamiquement et mieux suivre les prix
  3. Optimiser les paramètres périodiques des moyennes mobiles pour trouver la meilleure combinaison de paramètres
  4. Les conditions de réentrée sont définies pour éviter les transactions fréquentes.
  5. Prendre en compte le coût de transaction réel et le point de glissement, et ajuster le point de stop loss

L’optimisation de ces stratégies permet d’améliorer considérablement l’efficacité de la plateforme.

Résumer

La stratégie de croisement des moyennes mobiles est une stratégie de négociation quantitative facile à maîtriser et à mettre en œuvre. Elle utilise le principe de la croisement des moyennes de prix pour juger de manière simple et intuitive des tendances du marché et générer des signaux de négociation.

Code source de la stratégie
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
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/
// © HPotter
//  Simple SMA strategy
//
// WARNING:
//      - For purpose educate only
//      - This script to change bars colors
//@version=4
strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true)
Resolution = input(title="Resolution", type=input.resolution, defval="D")
Source = input(title="Source", type=input.source, defval=close)
xSeries = security(syminfo.tickerid, Resolution, Source)
Length = input(title="Length", type=input.integer, defval=14, minval=2)
TriggerPrice = input(title="Trigger Price", type=input.source, defval=close)
TakeProfit = input(50, title="Take Profit", step=0.01)
StopLoss = input(20, title="Stop Loss", step=0.01)
UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false)
BarColors = input(title="Painting bars", type=input.bool, defval=true)
ShowLine = input(title="Show Line", type=input.bool, defval=true)
UseAlerts = input(title="Use Alerts", type=input.bool, defval=false)
reverse = input(title="Trade Reverse", type=input.bool, defval=false)
pos = 0
xSMA = sma(xSeries, Length)
pos := iff(TriggerPrice > xSMA, 1,
         iff(TriggerPrice < xSMA, -1, nz(pos[1], 0)))
nRes = ShowLine ? xSMA : na
alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY')
alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL')
alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position')
possig =iff(pos[1] != pos,
         iff(reverse and pos == 1, -1,
           iff(reverse and pos == -1, 1, pos)), 0)
if (possig == 1)
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)
    
if (UseTPSL)    
    strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit")
    strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss")
    strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit")
    strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss")
nColor = BarColors ? strategy.position_avg_price != 0  and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na
barcolor(nColor)
plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)