La stratégie relative de l'élan

Auteur:ChaoZhang est là., Date: 2024-01-29 08:38:04 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie de dynamique relative compare la dynamique des actions individuelles et des indices pour juger de la force relative des actions sur le marché plus large.

Principaux

La logique de base de cette stratégie est de juger de la force relative des stocks individuels par rapport au marché, en particulier:

  1. Calculer le rendement sur une période de temps comme l'élan du stock
  2. Calculer le rendement de l'indice sur la même période que la dynamique de l'indice
  3. Utiliser la moyenne mobile pour lisser la dynamique des actions et des indices
  4. Lorsque la moyenne mobile de la dynamique des actions dépasse celle de l'indice, la dynamique des actions est considérée comme plus forte que le marché dans son ensemble - c'est le signal d'achat
  5. Lorsque la moyenne mobile de l'élan des actions dépasse la moyenne mobile de l'élan de l'indice, l'élan des actions est considéré comme plus faible, déclenchant le signal de vente.

Grâce à cette logique, nous pouvons acheter des actions quand leur croissance est florissante et les vendre à mesure que la dynamique de croissance s'estompe, ce qui garantit des rendements excédentaires pendant la période de pointe de croissance des actions.

Analyse des avantages

Les principaux avantages de la stratégie de dynamique relative:

  1. Peut capturer dynamiquement le pic de croissance des stocks sans se préoccuper des conditions spécifiques du marché - achetez simplement lorsque la croissance des stocks dépasse le marché global
  2. L'aplatissement avec des moyennes mobiles filtre les fluctuations à court terme et améliore la fiabilité du signal
  3. Conditions d'achat et de vente directes simples, faciles à comprendre et à utiliser
  4. Flexibilité pour configurer la période de temps pour le calcul de l'élan relatif et optimiser

Analyse des risques

Il existe également certains risques liés à la stratégie de dynamique relative:

  1. Les stocks peuvent baisser après la fin du pic de croissance, ce qui représente un risque insuffisant de réalisation de bénéfices
  2. Les signaux de dynamique relative peuvent être faux, identifiant un faux au lieu d'un véritable pic
  3. Besoin de régler le stop loss pour contrôler la perte maximale

Ces risques peuvent être gérés par une prise de profit raisonnable, un arrêt des pertes, un ajustement des paramètres, etc.

Directions d'optimisation

La stratégie relative de dynamique peut être optimisée principalement à partir des aspects suivants:

  1. Testez différentes périodes de temps pour calculer le momentum pour trouver le meilleur
  2. Essayez différents types et longueurs de moyennes mobiles pour les meilleurs paramètres
  3. Ajoutez un filtre de volume pour éviter les fausses ruptures dues au manque de momentum
  4. Incorporer d'autres indicateurs pour confirmer le calendrier d'entrée optimal

Conclusion

La stratégie de dynamique relative capture les phases de croissance excédentaires des actions individuelles par rapport au marché global pour générer de l'alpha. Avec sa logique d'achat / vente simple et claire et sa facilité d'utilisation, et lorsqu'elle est associée à l'optimisation des paramètres et au contrôle des risques, cette stratégie peut très bien fonctionner.


/*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)

Plus de