Stratégie quantitative combinant inversion moyenne et suivi de tendance

Auteur:ChaoZhang est là., Date: le 14 septembre 2023 à 20h45
Les étiquettes:

Cet article explique en détail une stratégie de trading quantitative qui combine à la fois la réversion moyenne et les techniques de suivi de tendance.

I. Logique stratégique

La stratégie utilise principalement l'indicateur Simple Moving Average et RSI pour générer des signaux de trading:

  1. Lorsque le prix est inférieur à la SMA à 200 périodes, il juge le marché actuel comme tendance à la baisse.

  2. Quand le RSI est en dessous de 20, il faut des transactions de contre-tendance.

  3. Lorsque le prix est supérieur à la SMA à 200 périodes, il juge le marché actuel comme tendance haussière.

  4. Quand le prix dépasse la SMA, il faut suivre la tendance.

  5. Les sorties sont déclenchées lorsque le RSI dépasse 80 ou que le prix tombe en dessous de la SMA d'un certain pourcentage.

  6. Le dimensionnement des positions pour l'inversion moyenne et le suivi de la tendance peut être ajusté séparément.

La stratégie combine des techniques de réversion moyenne et de suivi de tendance et les applique à différentes étapes du marché.

II. Avantages de la stratégie

Les principaux avantages sont les suivants:

  1. La combinaison de deux techniques améliore l'adaptabilité de la stratégie.

  2. Il peut trouver des opportunités de négociation sur des marchés tendance et variable.

  3. Les risques peuvent être maîtrisés en ajustant la taille des positions.

  4. Des paramètres simples le rendent facile à mettre en œuvre.

III. Risques potentiels

Cependant, les risques sont les suivants:

  1. Des indicateurs comme la SMA et le RSI sont sensibles à de fausses ruptures.

  2. Le passage entre deux modes peut être retardé.

  3. Certaines baisses doivent être supportées pour des gains à long terme.

IV. Résumé

En résumé, cet article a expliqué une stratégie quantitative utilisant des techniques de réversion moyenne et de suivi de tendance. Il peut négocier dans différentes étapes du marché pour améliorer l'adaptabilité. Mais les risques tels que l'échec de l'indicateur et le changement de mode retardé doivent être gérés. Dans l'ensemble, il fournit une approche flexible pour combiner différentes techniques.


/*backtest
start: 2022-09-07 00:00:00
end: 2023-04-05 00:00:00
period: 1d
basePeriod: 1h
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/
// © I11L

//@version=5
strategy("Mean Reversion and Trendfollowing", overlay=true, pyramiding=1, default_qty_value=100000, initial_capital=100000, default_qty_type=strategy.cash, process_orders_on_close=false, calc_on_every_tick=false)

// Input for the starting date
start_date = input(timestamp("1 Feb 2000 12:00"), title="Starting Date")
enableMeanReversion = input.bool(true)
enableTrendfollowing = input.bool(true)
trendPositionFactor = input.float(1)
meanReversionPositionFactor = input.float(0.5)

// Convert the input string to a timestamp
start_ts = timestamp(year(start_date), month(start_date), dayofmonth(start_date), 0, 0)

// Check if the current bar's time is greater than or equal to the start timestamp
start_condition = time >= start_ts

var tradeOrigin = ""

sma200 = ta.sma(close,200)
rsi2 = ta.rsi(close,2)

isMeanReversionMode = close < sma200 or not(enableTrendfollowing)
isTrendfollowingMode = close > sma200 or not(enableMeanReversion)

isRsiBuy = rsi2 < 20 and enableMeanReversion
isRsiClose = rsi2 > 80 and enableMeanReversion

isSmaBuy = close > sma200 and enableTrendfollowing
isSmaClose = close < sma200 * 0.95 and enableTrendfollowing

isBuy = (isMeanReversionMode and isRsiBuy) or (isTrendfollowingMode and isSmaBuy)

positionSizeFactor = isSmaBuy ? trendPositionFactor : meanReversionPositionFactor

// Only execute the strategy after the starting date
if (start_condition)
    if (isBuy and strategy.opentrades == 0)
        tradeOrigin := isSmaBuy ? "SMA" : "RSI"
        strategy.entry("My Long Entry Id", strategy.long, qty=(strategy.equity / close) * positionSizeFactor, comment=str.tostring(positionSizeFactor))
    isClose = tradeOrigin == "SMA" ? isSmaClose : isRsiClose
    if (isClose)
        strategy.exit("Exit", limit = close)

plot(sma200)
plot(sma200 * 0.95, color=color.orange)

Plus de