Stratégie de trading classique de la moyenne mobile Golden Cross


Date de création: 2023-12-11 11:37:36 Dernière modification: 2023-12-11 11:37:36
Copier: 0 Nombre de clics: 606
1
Suivre
1621
Abonnés

Stratégie de trading classique de la moyenne mobile Golden Cross

Aperçu

La stratégie de négociation en moyenne mobile de la croix d’or (Golden Cross Moving Average Trading Strategy) est une stratégie de négociation quantitative relativement classique. Cette stratégie utilise des moyennes mobiles de différentes périodes pour déterminer si le marché est trop à court.

Principe de stratégie

La stratégie est basée sur des moyennes mobiles simples (SMA) à trois périodes différentes: 50 jours, 100 jours et 200 jours. La logique de négociation est la suivante:

  1. Signaux d’entrée: lorsque la moyenne mobile de 50 jours est portée sur la moyenne mobile de 100 jours, faites une entrée supplémentaire.

  2. Signaux de sortie: Sortez de la position de placement lorsque la moyenne mobile de 100 jours est traversée sous la moyenne mobile de 50 jours; ou sortez lorsque le prix de clôture est inférieur à la moyenne mobile de 100 jours; ou sortez lorsque la moyenne mobile de 200 jours est traversée sous la moyenne mobile de 100 jours.

  3. Stop loss: réglez le stop mobile et le stop fixe.

Cette stratégie exploite les caractéristiques des moyennes mobiles qui permettent de juger efficacement des prix moyens du marché. Lorsqu’elles traversent les moyennes à court terme, elles sont considérées comme des signaux de tendance à la hausse pour entrer dans le marché et donc faire plus; lorsqu’elles traversent les moyennes à long terme en dessous des moyennes à court terme, elles sont considérées comme des canaux de baisse pour entrer dans le marché et donc sortir du marché.

Avantages stratégiques

  1. L’opération est simple et facile à mettre en œuvre. La logique de la stratégie peut être construite en utilisant seulement trois moyennes mobiles de différentes périodes.

  2. La stabilité est plus forte. La moyenne mobile a elle-même une fonction de débruit qui permet d’éliminer efficacement l’effet des fluctuations aléatoires du marché sur les transactions, rendant le signal plus stable et plus fiable.

  3. Les moyennes mobiles reflètent efficacement les tendances des prix moyens du marché et permettent de juger les grandes variations de prix en croisant des courbes périodiques longues et courtes.

  4. Un degré élevé de personnalisation. La combinaison périodique des moyennes mobiles peut être déterminée par vous-même, permettant des niveaux de contrôle du risque différents.

Risque stratégique

  1. Il est possible de générer de nombreux faux signaux. Des croisements fréquents peuvent survenir lorsque les moyennes mobiles à court et à long terme sont trop proches l’une de l’autre, ce qui génère de nombreux signaux inefficaces.

  2. Les moyennes mobiles réagissent lentement aux variations de prix et ne peuvent pas réagir en temps réel aux nouvelles et événements majeurs du marché.

  3. Les petites fluctuations dans le marché ne permettent pas de tirer profit. La nature silencieuse des moyennes mobiles signifie également qu’il est impossible de capturer les petites fluctuations dans le marché pour tirer profit.

  4. La définition des paramètres est subjective. La sélection des périodes des moyennes mobiles est subjective, il est nécessaire de déterminer les meilleurs paramètres en fonction des différents marchés.

Orientation de l’optimisation de la stratégie

  1. Ajouter des conditions de filtrage pour éviter de générer trop de faux signaux. Par exemple, définir une fourchette de fluctuation des prix comme filtre, qui ne génère un signal de transaction que lorsque la fourchette est franchie.

  2. Il peut être combiné avec d’autres indicateurs. Par exemple, l’utilisation d’une combinaison avec un indicateur de taux de fluctuation, d’un indicateur de volume d’achat, etc., peut améliorer l’exactitude du signal.

  3. Ajout d’un module d’optimisation d’adaptation. Optimisation dynamique des paramètres cycliques des moyennes mobiles grâce à des technologies telles que l’apprentissage automatique, afin qu’elles puissent s’adapter aux changements de l’environnement du marché extérieur.

  4. Combination avec un modèle d’apprentissage en profondeur. Le modèle d’apprentissage en profondeur plus avancé remplace la moyenne mobile et possède une extraction et une modélisation de caractéristiques plus puissantes.

Résumer

La stratégie de négociation en ligne égale croisée de l’or est une stratégie de suivi de tendance assez typique. Elle reflète la tendance moyenne des variations des prix du marché, est simple à utiliser et convient aux débutants. Cependant, la stratégie présente également des lacunes qui peuvent être optimisées sous plusieurs aspects, tels que l’amélioration de la qualité du signal, la combinaison avec d’autres indicateurs techniques et l’introduction d’un mécanisme d’adaptation.

Code source de la stratégie
/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-10 00:00:00
period: 1m
basePeriod: 1m
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/
// © CJDeegan

//@version=4
strategy(title = "[LIVE] Golden Cross", overlay=true)

// ------------Functions------------

//Percent to Decimal Conversion
perToDec(a) => a * 0.01
//Price Difference to Tick
diffToTick(a,b) => (a - b) / syminfo.mintick 

    
// ------------Strategy Inputs------------
takeProfitInput = input(300, "Take Profit Price (% Gain)")
stopLossInput = input(25, "Stop Loss (% Loss)")


startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2018, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=1, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=1, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2031, minval=1800, maxval=2100)

inDateRange = (time >= timestamp(syminfo.timezone, startYear,
         startMonth, startDate, 0, 0)) and
     (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
     

// ------------Populate Indicators------------

//EMA
sma50 = sma(close,50)
sma100 = sma(close,100)
sma200 = sma(close,200)


// ------------Entry Logic------------
//Guards
entryGuard = true
//Triggers
entryTrigger = crossover(sma50,sma100)
//Conditions
entryCondition = entryGuard and entryTrigger
//Calculations
//Execution
if (inDateRange and entryCondition)
    strategy.entry("Long", strategy.long, when = entryCondition, comment = "Entry")

//------------Exit Logic------------

//Guards
//Triggers
exitTrigger = crossunder(sma50,sma100) or close < sma100 or crossunder(sma100,sma200)
//Conditions
exitCondition = exitTrigger

//Calculations
//Take Profit
takeProfitPrice = strategy.position_avg_price + (strategy.position_avg_price * perToDec(takeProfitInput))
//Take Profit Ticks
takeProfitTicks = diffToTick(takeProfitPrice, strategy.position_avg_price)
//StopLoss
stopLossPrice = strategy.position_avg_price - (strategy.position_avg_price * perToDec(stopLossInput))

//Execution
if (inDateRange)
    strategy.close("Long", when = exitCondition, comment = "Sell Trigger")
    strategy.exit("Exit", "Long", comment="Stop", profit=takeProfitTicks, stop=stopLossPrice)

//Plots
plot(sma50, "SMA 50", color = color.blue)
plot(sma100, "SMA 100", color = color.green)
plot(sma200, "SMA 200", color = color.yellow)
entry = plot(strategy.position_size <= 0 ? na : strategy.position_avg_price, "Entry Price", color = color.yellow, style = plot.style_linebr)
profit = plot(strategy.position_size <= 0 ? na : takeProfitPrice, "Take Profit (Price)", color = color.green, style = plot.style_linebr)
stop = plot(strategy.position_size <= 0 ? na : stopLossPrice, "Stop Loss", color = color.red, style = plot.style_linebr)
fill(entry,profit, color=color.green)
fill(entry,stop, color=color.red)