Stratégie de négociation de la moyenne mobile du système

Auteur:ChaoZhang est là., Date: 2024-01-05 à 15h36
Les étiquettes:

img

Résumé

Cet article traite d'une stratégie de négociation basée sur une moyenne mobile simple. La stratégie compare le prix de clôture avec une moyenne mobile sur 17 périodes, en allant long lorsque le prix de clôture dépasse la moyenne mobile et en allant court lorsqu'il dépasse la moyenne mobile.

La logique de la stratégie

Calcul de la moyenne mobile

La stratégie utilise les paramètres suivants pour calculer la moyenne mobile:

  • Source de l'AM: défaut à la moyenne de l'OHLC (OHLC4)
  • Type d'émission: par défaut à moyenne mobile simple (SMA)
  • MA Longueur: par défaut à 17

Sur la base de ces paramètres, la fonction getMAType( est appelée pour calculer la SMA de 17 périodes des prix de clôture.

Génération de signaux de négociation

Ensuite, comparez la relation entre le prix de clôture et la moyenne mobile:

  • Fermeture > Moyenne mobile: signal long
  • Fermeture < Moyenne mobile: signal court

Lorsque le prix de clôture dépasse la moyenne mobile depuis le bas, un signal long est généré. Lorsqu'il dépasse le bas depuis le haut, un signal court est généré.

Exécution des opérations

Au cours de la période de backtest, ouvrir des positions longues lorsque des signaux longs apparaissent et ouvrir des positions courtes lorsque des signaux courts apparaissent.

Analyse des avantages

Le plus grand avantage de cette stratégie est que la logique est très simple et claire. Avec un seul indicateur, il juge l'inversion de tendance en fonction du changement de direction de l'indicateur. La stratégie est facile à comprendre et à mettre en œuvre, adaptée aux débutants.

En outre, les moyennes mobiles appartiennent à des indicateurs de tendance, qui permettent de suivre efficacement les changements de tendance et d'éviter les interférences du bruit de marché à court terme.

En ajustant les paramètres, il peut s'adapter à différents cycles et produits.

Analyse des risques

Premièrement, cette stratégie repose uniquement sur un seul indicateur, de sorte que les critères d'appréciation sont relativement uniques, ce qui peut générer davantage de faux signaux.

En outre, en tant que système de suivi des tendances, il ne fonctionne pas bien sur les marchés à plage et latéraux.

En outre, sans stop-loss ni prise de profit, il existe un risque d'accroissement des pertes.

Les solutions sont d'intégrer d'autres indicateurs, d'optimiser les combinaisons de paramètres pour réduire les faux signaux.

Directions d'optimisation

Voici quelques idées pour optimiser la stratégie:

  1. Ajuster les paramètres de la moyenne mobile, optimiser les numéros de périodes, par exemple changer à 30 ou à 50 périodes.

  2. Essayez différents types de moyennes mobiles, comme EMA, VIDYA, etc. Ils ont une sensibilité variable aux variations de prix.

  3. Ajouter d'autres indicateurs en combinaison, par exemple MACD pour évaluer la force; RSI pour réduire les faux signaux.

  4. Ajoutez des mécanismes de stop-loss. Définissez un pourcentage fixe ou un stop-loss de suivi basé sur l'ATR pour contrôler le montant de la perte d'un seul commerce.

  5. Ajoutez des mécanismes de prise de bénéfices, fixez un pourcentage de bénéfice cible pour maximiser les bénéfices.

Ces optimisations peuvent rendre les performances de la stratégie plus stables et éviter des retards excessifs.

Résumé

Cet article analyse une stratégie de trading simple basée sur une moyenne mobile à 17 périodes. La stratégie a des sources de signaux simples, faciles à comprendre et à mettre en œuvre, appartenant à un système typique de suivi des tendances.


/*backtest
start: 2023-12-05 00:00:00
end: 2024-01-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Simple 17 BF 🚀", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2012, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// Moving Average /////////////
source = input(title="MA Source", defval=ohlc4)
maType = input(title="MA Type", defval="sma", options=["sma", "ema", "swma", "wma", "vwma", "rma"])
length = input(title="MA Length", defval=17)

///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) => 
    res = sma(close, 1)
    
    if maType == "ema"
        res := ema(sourceType, maLen)
    if maType == "sma"
        res := sma(sourceType, maLen)
    if maType == "swma"
        res := swma(sourceType)
    if maType == "wma"
        res := wma(sourceType, maLen)
    if maType == "vwma"
        res := vwma(sourceType, maLen)
    if maType == "rma"
        res := rma(sourceType, maLen)
    res
    
MA = getMAType(maType, source, length)

/////////////// Strategy ///////////////
long = close > MA
short = close < MA

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("L", strategy.long, when=long_signal)
    strategy.entry("S", strategy.short, when=short_signal)

/////////////// Plotting /////////////// 
p1 = plot(MA, color = long ? color.lime : color.red, linewidth=2)
p2 = plot(close, linewidth=2)
fill(p1, p2, color=strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80)

Plus de