Basé sur une stratégie de momentum relatif


Date de création: 2024-01-29 08:38:04 Dernière modification: 2024-01-29 08:38:04
Copier: 0 Nombre de clics: 722
1
Suivre
1617
Abonnés

Basé sur une stratégie de momentum relatif

Aperçu

La stratégie de dynamique relative consiste à comparer la dynamique d’une action et celle d’un indice pour juger de la force d’une action par rapport à celle d’un grand marché. Elle consiste à acheter une action lorsque la dynamique est supérieure au grand marché et à vendre une action lorsque la dynamique est inférieure au grand marché, afin de capturer le pic de croissance d’une action.

Principe de stratégie

Cette stratégie est basée sur la détermination de la force et de la faiblesse d’une action par rapport à un marché plus large, selon la logique suivante:

  1. Calculer le taux de rendement d’une action sur une période donnée en tant que dynamique d’une action
  2. Calculer l’indice de rendement sur la même période comme dynamique de l’indice
  3. Calculer le mouvement par action et le mouvement de l’indice
  4. Lorsque l’indicateur est plus fort que l’indice dans son ensemble, cela devient un signal d’achat.
  5. Lorsque la moyenne mobile des mouvements d’une action est inférieure à la moyenne mobile des mouvements d’un indice, on considère qu’une action est plus faible que l’indice dans son ensemble, ce qui devient un signal de vente.

Avec cette logique, on peut acheter une action pendant une période de forte croissance, et la vendre à temps quand sa dynamique de croissance s’affaiblit, et ainsi bloquer les gains excédentaires de sa période de forte croissance.

Analyse des avantages

La stratégie de dynamique relative présente principalement les avantages suivants:

  1. Il est possible de capturer dynamiquement les pics de croissance des actions individuelles sans se soucier de la situation, à condition que la croissance des actions soit plus rapide que celle du grand marché.
  2. Le traitement des moyennes mobiles permet de filtrer l’interférence des fluctuations à court terme et d’améliorer la fiabilité du signal.
  3. Les conditions d’achat et de vente sont simples et directes, et les opérations sont faciles à comprendre.
  4. Paramètres de temps de calcul de la dynamique relative et stratégies d’optimisation

Analyse des risques

La stratégie de dynamisme relatif comporte aussi des risques:

  1. Il y a un risque de rebond après la fin du pic de la croissance des actions individuelles et un manque de retenue.
  2. L’indicateur de dynamique relative peut générer de faux signaux, les pics de croissance identifiés ne sont pas des pics réels
  3. Il faut un arrêt de perte pour contrôler les pertes maximales

Ces risques peuvent être maîtrisés par des méthodes telles que le stop loss raisonnable et l’ajustement approprié des paramètres.

Direction d’optimisation

Les stratégies de dynamique relative peuvent être optimisées dans les domaines suivants:

  1. Tester différents paramètres de temps de calcul du mouvement pour trouver le paramètre optimal
  2. Test des moyennes mobiles de différents types et de différentes longueurs pour trouver les paramètres optimaux
  3. Ajout d’un filtre pour les indicateurs de transaction afin d’éviter les fausses percées en cas de manque de capacité
  4. Délai de confirmation d’achat associé à d’autres indicateurs techniques

Résumer

La stratégie de dynamique relative permet de capturer des gains supplémentaires en capturant les pics de croissance d’un portefeuille relativement important. La stratégie présente les avantages d’une logique d’achat et de vente simple et claire, d’une facilité d’utilisation et d’un meilleur effet grâce à l’optimisation des paramètres et à la maîtrise des risques.

Code source de la stratégie
/*backtest
start: 2024-01-21 00:00:00
end: 2024-01-28 00:00:00
period: 15m
basePeriod: 5m
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("Relative Returns Strategy", overlay=false, initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

index_ticker=input("BTC_USDT:swap")
Loopback = input(40, step=20)
useStopAndIndexReturns = input(true)
useStopAndIndexReturnsMa = input(true)

useDifference = not useStopAndIndexReturns

MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
MALength = input(10, minval=10,step=10)

i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Backtest Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "Backtest End Time", type = input.time)
inDateRange = true

f_secureSecurity(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on)
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

index = f_secureSecurity(index_ticker, '1D', close, 0)
stock_return = (close - close[Loopback])*100/close
index_return = (index - index[Loopback])*100/index

stock_return_ma = f_getMovingAverage(stock_return, MAType, MALength)
index_return_ma = f_getMovingAverage(index_return, MAType, MALength)
relativeReturns = stock_return - index_return
relativeReturns_ma = f_getMovingAverage(relativeReturns, MAType, MALength)

plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma : stock_return : na, title="StockReturn", color=color.green, linewidth=1)
plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? index_return_ma : index_return : na, title="IndexReturn", color=color.red, linewidth=1)

plot(useDifference?relativeReturns:na, title="Relative-Returns", color=color.blue, linewidth=1)
plot(useDifference?relativeReturns_ma:na, title="MA", color=color.red, linewidth=1)

buyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma > index_return_ma : stock_return > index_return : relativeReturns > relativeReturns_ma)
closeBuyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma < index_return_ma : stock_return < index_return : relativeReturns < relativeReturns_ma)
strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca")
strategy.close("Buy", when=closeBuyCondition)