Stratégie de croisement de moyennes mobiles suivant la tendance


Date de création: 2024-01-29 16:52:46 Dernière modification: 2024-01-29 16:52:46
Copier: 3 Nombre de clics: 596
1
Suivre
1617
Abonnés

Stratégie de croisement de moyennes mobiles suivant la tendance

Aperçu

Cette stratégie est basée sur une simple stratégie de moyenne mobile, qui peut avoir un bon effet sur différentes paires de devises. Elle trace une moyenne d’ouverture et une moyenne de fermeture, et décide d’établir ou de quitter une position de plusieurs positions lorsque les deux lignes se croisent.

Principe de stratégie

Cette stratégie consiste d’abord à choisir le type de moyenne mobile en fonction des paramètres, y compris les EMA, SMA, RMA, WMA et VWMA. Ensuite, définissez la période de calcul de la moyenne mobile, généralement de 10 à 250 lignes K. En fonction des paires de devises, choisir un type de moyenne mobile différent et un nombre de cycles peut avoir des effets complètement différents.

La logique de négociation de cette stratégie est la suivante:

  1. calculer une moyenne mobile des prix d’ouverture et de clôture;
  2. une comparaison des valeurs de la moyenne des prix de clôture et de l’ouverture;
  3. Si la moyenne de la clôture est inférieure à la moyenne de l’ouverture, un placement à plusieurs positions est établi.
  4. Si le cours de clôture est inférieur à la moyenne de l’ouverture du cours de clôture, il est préférable d’annuler la position.

La position est considérée comme un signe de hausse des prix et la position est considérée comme un signe de baisse des prix.

Analyse des forces stratégiques

La stratégie présente les principaux avantages suivants:

  1. Le paramétrage est flexible, permettant de choisir les paramètres optimaux en fonction des paires de devises, ce qui permet un ciblage très ciblé.
  2. La logique est simple, facile à comprendre et à mettre en œuvre.
  3. Dans certaines paires de devises, on obtient des taux de rendement très élevés et une meilleure stabilité en général.
  4. Il est possible d’afficher différents indicateurs en fonction des besoins, avec un haut degré de personnalisation.

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. Le taux de rendement et la stabilité sont faibles pour certaines paires et paramètres;
  2. L’incapacité à réagir efficacement aux fluctuations de prix à court terme, qui sont inefficaces pour les devises très volatiles;
  3. Le choix de la période de la moyenne mobile n’est pas suffisamment scientifiquement justifié et a une certaine subjectivité.

La réponse et la voie à suivre:

  1. Choisir des périodes aussi longues que possible, par exemple 12 heures et 1 jour, réduit les transactions inutiles et améliore la stabilité;
  2. L’ajout d’une fonction d’optimisation des paramètres permettant de tester automatiquement différentes combinaisons de paramètres pour trouver les meilleurs;
  3. Ajout d’une fonction d’adaptation pour sélectionner les périodes des moyennes mobiles, permettant au système de déterminer automatiquement la meilleure période.

Résumer

Cette stratégie est logiquement simple dans l’ensemble, elle utilise des moyennes mobiles pour déterminer les tendances des prix et les points de basculement. Elle peut avoir un très bon effet en ajustant les paramètres. C’est une stratégie de suivi de tendance efficace qui mérite d’être encore améliorée et appliquée.

Code source de la stratégie
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Author @divonn1994

initial_balance = 100
strategy(title='Close v Open Moving Averages Strategy', shorttitle = 'Close v Open', overlay=true, pyramiding=0, default_qty_value=100, default_qty_type=strategy.percent_of_equity, precision=7, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent, initial_capital=initial_balance)

//Input for number of bars for moving average, Switch to choose moving average type, Display Options and Time Frame of trading----------------------------------------------------------------

bars = input.int(66, "Moving average length (number of bars)", minval=1, group='Strategy') //66 bars and VWMA for BTCUSD on 12 Hours.. 35 bars and VWMA for BTCUSD on 1 Day
strategy = input.string("VWMA", "Moving Average type", options = ["EMA", "SMA", "RMA", "WMA", "VWMA"], group='Strategy')

redOn = input.string("On", "Red Background Color On/Off", options = ["On", "Off"], group='Display')
greenOn = input.string("On", "Green Background Color On/Off", options = ["On", "Off"], group='Display')
maOn = input.string("On", "Moving Average Plot On/Off", options = ["On", "Off"], group='Display')

startMonth = input.int(title='Start Month 1-12 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=12, group='Beginning of Strategy')
startDate = input.int(title='Start Date 1-31 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=31, group='Beginning of Strategy')
startYear = input.int(title='Start Year 2000-2100 (set any start time to 0 for furthest date)', defval=2011, minval=2000, maxval=2100, group='Beginning of Strategy')

endMonth = input.int(title='End Month 1-12 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=12, group='End of Strategy')
endDate = input.int(title='End Date 1-31 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=31, group='End of Strategy')
endYear = input.int(title='End Year 2000-2100 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=2100, group='End of Strategy')

//Strategy Calculations-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

inDateRange = true

maMomentum = switch strategy
    "EMA" => (ta.ema(close, bars) > ta.ema(open, bars)) ? 1 : -1
    "SMA" => (ta.sma(close, bars) > ta.sma(open, bars)) ? 1 : -1
    "RMA" => (ta.rma(close, bars) > ta.rma(open, bars)) ? 1 : -1
    "WMA" => (ta.wma(close, bars) > ta.wma(open, bars)) ? 1 : -1
    "VWMA" => (ta.vwma(close, bars) > ta.vwma(open, bars)) ? 1 : -1
    =>
        runtime.error("No matching MA type found.")
        float(na)

openMA = switch strategy
    "EMA" => ta.ema(open, bars)
    "SMA" => ta.sma(open, bars)
    "RMA" => ta.rma(open, bars)
    "WMA" => ta.wma(open, bars)
    "VWMA" => ta.vwma(open, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)
        
closeMA = switch strategy
    "EMA" => ta.ema(close, bars)
    "SMA" => ta.sma(close, bars)
    "RMA" => ta.rma(close, bars)
    "WMA" => ta.wma(close, bars)
    "VWMA" => ta.vwma(close, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)

//Enter or Exit Positions--------------------------------------------------------------------------------------------------------------------------------------------------------------------

if ta.crossover(maMomentum, 0)
    if inDateRange
        strategy.entry('long', strategy.long, comment='long')
if ta.crossunder(maMomentum, 0)
    if inDateRange
        strategy.close('long')

//Plot Strategy Behavior---------------------------------------------------------------------------------------------------------------------------------------------------------------------

plot(series = maOn == "On" ? openMA : na, title = "Open moving Average", color = color.new(color.purple,0), linewidth=3, offset=1)
plot(series = maOn == "On" ? closeMA : na, title = "Close Moving Average", color = color.new(color.white,0), linewidth=2, offset=1)
bgcolor(color = inDateRange and (greenOn == "On") and maMomentum > 0 ? color.new(color.green,75) : inDateRange and (redOn == "On") and maMomentum <= 0 ? color.new(color.red,75) : na, offset=1)