Stratégie quantitative : Suivi des tendances de force et de faiblesse de la moyenne mobile


Date de création: 2024-01-19 16:50:13 Dernière modification: 2024-01-19 16:50:13
Copier: 3 Nombre de clics: 609
1
Suivre
1617
Abonnés

Stratégie quantitative : Suivi des tendances de force et de faiblesse de la moyenne mobile

Aperçu

La stratégie permet de juger et de suivre les tendances en calculant les fortes et les faiblesses des moyennes mobiles (MA) sur plusieurs périodes de temps. Lorsque l’indicateur de la MA à court terme augmente de manière continue, un score élevé est enregistré, formant un indicateur de force de la MA à court terme.

Principe de stratégie

  1. Calculer plusieurs groupes de MA, tels que 5, 10 et 20 jours, pour déterminer si le prix a franchi chaque MA vers le haut, franchi la marque, intégrant la formation de la courbe de force de la courbe de force de la courbe de force de la courbe.
  2. Appliquer une moyenne mobile à la résistance de l’acier à l’acier MA, pour former un indicateur de la moyenne, pour juger de l’absence de la moyenne et pour générer un signal de négociation.
  3. Les paramètres de suivi des cycles sont configurables: nombre de groupes de MA à court terme, cycles de moyenne à long terme, conditions d’ouverture de position, etc.

Cette stratégie consiste à déterminer la polyvalence des indicateurs de la moyenne, la force moyenne des groupes de lignes MA. Les groupes de lignes MA déterminent la direction et la force de la tendance, tandis que les indicateurs de la moyenne déterminent la continuité.

Analyse des avantages

  1. Modèle multidimensionnel d’évaluation de la force de la tendance. Une seule ligne MA ne peut pas déterminer la force suffisante; la stratégie mesure plusieurs ruptures de MA, assure un signal après une force suffisante et est fiable.
  2. Cycle de suivi configurable. Ajustement des paramètres de MA à court terme pour capturer les tendances à différents niveaux. Ajustement des paramètres de MA à long terme pour contrôler le rythme de sortie.
  3. Il suffit d’en faire plus pour éviter les erreurs et suivre la tendance à la hausse à long terme. La stratégie consiste à en faire plus et à suivre la tendance à la baisse, ce qui réduit les pertes de retournement.

Analyse des risques

  1. Il existe un risque de retrait. Il existe un risque de retrait plus élevé lorsque la ligne courte traverse la ligne moyenne de la ligne moyenne de la ligne longue. Les pertes individuelles peuvent être réduites par la méthode de stop-loss.
  2. Il existe un risque de reprise. Les opérations de marché à long terme nécessitent un ajustement, la stratégie doit être arrêtée à temps. Il est recommandé de combiner des techniques telles que les bandes d’ondes et les canaux pour juger de la fin du cycle et contrôler le risque de reprise.
  3. Risque des paramètres. Une configuration incorrecte des paramètres peut entraîner un signal erroné. Les paramètres doivent être ajustés pour s’adapter aux différentes variétés afin d’en assurer la stabilité.

Direction d’optimisation

  1. Il est possible d’envisager de combiner les quantités de trafic, de vérifier la quantité et de donner un signal pour éviter les fausses percées.
  2. Augmenter les arrêts de perte. Les arrêts de mouvement, les arrêts de courbe permettent de réduire les pertes lors d’un redressement. Les arrêts de blocage peuvent également être envisagés pour bloquer les bénéfices et éviter les retours.
  3. Considérez la configuration des variétés futures et de devises. La rupture de la ligne MA est plus appropriée pour les variétés tendancielles. La stabilité des paramètres de différentes variétés futures peut être évaluée et la meilleure variété choisie.

Résumer

La stratégie est basée sur le calcul de la force de l’indicateur de MA pour déterminer la tendance des prix et suivre la tendance en utilisant le croisement de la même ligne comme source de signal. L’avantage de la stratégie est de déterminer avec précision l’intensité de la tendance, la fiabilité est élevée. Le principal risque réside dans le renversement de la tendance et l’ajustement des paramètres.

Code source de la stratégie
/*backtest
start: 2023-12-19 00:00:00
end: 2024-01-18 00:00:00
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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("MA Strength Strategy", overlay=false, initial_capital = 20000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01)
MAType = input(title="Moving Average Type", defval="ema", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
LookbackPeriod = input(10, step=10)

IndexMAType = input(title="Moving Average Type", defval="hma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
IndexMAPeriod = input(200, step=10)

considerTrendDirection = input(true)
considerTrendDirectionForExit = input(true)
offset = input(1, step=1)
tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "End Time", type = input.time)
inDateRange = true

f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma
    

f_getMaAlignment(MAType, includePartiallyAligned)=>
    ma5 = f_getMovingAverage(close,MAType,5)
    ma10 = f_getMovingAverage(close,MAType,10)
    ma20 = f_getMovingAverage(close,MAType,20)
    ma30 = f_getMovingAverage(close,MAType,30)
    ma50 = f_getMovingAverage(close,MAType,50)
    ma100 = f_getMovingAverage(close,MAType,100)
    ma200 = f_getMovingAverage(close,MAType,200)

    upwardScore = 0.0
    upwardScore := close > ma5? upwardScore+1.10:upwardScore
    upwardScore := ma5 > ma10? upwardScore+1.10:upwardScore
    upwardScore := ma10 > ma20? upwardScore+1.10:upwardScore
    upwardScore := ma20 > ma30? upwardScore+1.10:upwardScore
    upwardScore := ma30 > ma50? upwardScore+1.15:upwardScore
    upwardScore := ma50 > ma100? upwardScore+1.20:upwardScore
    upwardScore := ma100 > ma200? upwardScore+1.25:upwardScore
    
    upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200
    downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200
    trendStrength = upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 6? 0.5: upwardScore < 2?-0.5:upwardScore>4?0.25:-0.25) : 0
    [trendStrength, upwardScore]
    
includePartiallyAligned = true
[trendStrength, upwardScore] = f_getMaAlignment(MAType, includePartiallyAligned)

upwardSum = sum(upwardScore, LookbackPeriod)

indexSma = f_getMovingAverage(upwardSum,IndexMAType,IndexMAPeriod)

plot(upwardSum, title="Moving Average Strength", color=color.green, linewidth=2, style=plot.style_linebr)
plot(indexSma, title="Strength MA", color=color.red, linewidth=1, style=plot.style_linebr)
buyCondition = crossover(upwardSum,indexSma) and (upwardSum > upwardSum[offset] or not considerTrendDirection) 
sellCondition = crossunder(upwardSum,indexSma) and (upwardSum < upwardSum[offset]  or not considerTrendDirection)

exitBuyCondition = crossunder(upwardSum,indexSma)
exitSellCondition = crossover(upwardSum,indexSma) 
strategy.risk.allow_entry_in(tradeDirection)
strategy.entry("Buy", strategy.long, when= inDateRange and buyCondition, oca_name="oca_buy")
strategy.close("Buy", when = considerTrendDirectionForExit? sellCondition : exitBuyCondition)
strategy.entry("Sell", strategy.short, when= inDateRange and sellCondition, oca_name="oca_sell")
strategy.close( "Sell", when = considerTrendDirectionForExit? buyCondition : exitSellCondition)