Stratégie combinée d'optimisation de la tendance de l'élan

Auteur:ChaoZhang est là., Date: 2024-02-06 15:11:57 Le projet de loi est en cours d'adoption.
Les étiquettes:

img

Résumé

La stratégie de combinaison d'optimisation de la tendance de l'élan est une stratégie de trading quantitative à moyen et long terme qui combine les facteurs d'élan et de tendance. Elle génère des signaux d'achat et de vente en utilisant une combinaison de moyennes mobiles exponentielles, moyennes mobiles, indicateurs de volume et de pente.

La logique de la stratégie

La stratégie utilise une moyenne mobile simple de 6 jours et une moyenne mobile simple de 35 jours pour définir deux moyennes mobiles. La ligne de signal d'achat est définie comme une moyenne mobile exponentielle de 2 jours et la ligne de signal de vente est calculée en fonction de la pente sur les 8 derniers prix de clôture.

Lorsque le prix de clôture est supérieur à la moyenne mobile de 35 jours, le volume de négociation est supérieur au volume de négociation moyen de 20 jours, et le chèque hebdomadaire montre un marché haussier, une croix dorée du bas déclenche un signal d'achat.

Pour la gestion des risques, la stratégie introduit un mécanisme d'ajustement dynamique de la position. La position réelle est calculée sur la base du capital du compte, du ratio de position maximal, de l'ATR et du facteur de risque. Cela aide à contrôler le tirage maximal de la stratégie.

Analyse des avantages

La stratégie combine des facteurs de dynamique et le filtrage des tendances, ce qui permet d'identifier efficacement les orientations à moyen et long terme. En même temps, le filtrage du bruit est également en place pour éviter de faux signaux dans les marchés volatils. En outre, l'introduction de mécanismes de gestion des risques permet également un contrôle approprié des retraits maximaux, assurant ainsi la robustesse de la stratégie.

D'après les résultats des backtests, le rendement global de la stratégie a atteint 128,86%, avec un alpha très significatif.

Analyse des risques

Bien que la stratégie elle-même ait été optimisée pour les mécanismes de gestion des risques, certains risques nécessitent encore une attention.

  1. Le risque de retracement. D'après la plus grande perte unique de 222 021,46 yuans, on peut voir que l'amplitude de retracement de la stratégie est grande. Cela est lié au mécanisme de gestion de position imparfait.

  2. Risque de stabilité du signal: le signal de stratégie peut être affecté par des facteurs particuliers de stocks individuels, ce qui entraîne des situations de faux signaux.

  3. Si l'environnement du marché macroéconomique change de manière significative, il peut être nécessaire d'ajuster les paramètres de la stratégie afin de maintenir l'effet.

Directions d'optimisation

D'après l'analyse des risques ci-dessus, il est encore nécessaire et possible d'optimiser cette stratégie.

  1. À en juger par la perte maximale, le mécanisme de gestion des positions peut être encore optimisé par l'introduction d'un module de stop loss pour contrôler l'ampleur des pertes uniques.

  2. Il convient d'envisager d'ajouter davantage d'indicateurs de filtrage afin d'identifier certains phénomènes spéciaux des stocks et de réduire la probabilité de faux signaux.

  3. Continuer les tests de retour et la vérification des paramètres de stratégie, et apporter des ajustements opportuns des paramètres en fonction des changements dans les conditions du marché.

Résumé

La stratégie de combinaison d'optimisation de la tendance de l'élan est une stratégie de trading quantitative à moyen et long terme qui combine les facteurs d'élan et le filtrage de tendance et est spécialement optimisée pour le trading T+1. À en juger par les indicateurs de backtest, l'effet global de la stratégie est significatif, avec un alpha très étonnant. Mais les risques potentiels doivent également être pris en compte et les paramètres doivent être ajustés à temps en fonction des changements des conditions du marché. La stratégie peut apporter un alpha supplémentaire aux traders quantitatifs et mérite d'être étudiée et vérifiée.


/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 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/
// © fzj20020403

////@version=5
//@version=5
strategy("Optimized Zhaocaijinbao", overlay=true, margin_long=100, margin_short=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Define two moving averages
ma6 = ta.sma(close, 6)
ma35 = ta.sma(close, 35)

// Define buy and sell signal lines
buyLine = ta.ema(close, 2)
sellSlope = (close - close[8]) / 8
sellLine = sellSlope * 1 + ta.sma(close, 8)

// Define volume indicator
volumeEMA = ta.ema(volume, 20)

// Define weekly slope factor
weeklyMa = ta.sma(close, 50)
weeklySlope = (weeklyMa - weeklyMa[4]) / 4 > 0

// Generate buy and sell signals
buySignal = ta.crossover(buyLine, sellLine) and close > ma35 and volume > volumeEMA and weeklySlope
sellSignal = ta.crossunder(sellLine, buyLine)

// Define dynamic position sizing factor
equity = strategy.equity
maxPositionSize = equity * input.float(title='Max Position Size (%)', defval=0.01, minval=0.001, maxval=0.5, step=0.001)
riskFactor = input.float(title='Risk Factor', defval=2.0, minval=0.1, maxval=10.0, step=0.1)
atr = ta.atr(14)
positionSize = maxPositionSize * riskFactor / atr

// Define position status
var inPosition = false

// Define buy and sell conditions
buyCondition = buySignal and not inPosition
sellCondition = sellSignal and inPosition

// Perform buy and sell operations
if (buyCondition)
    strategy.entry("Long", strategy.long, qty=positionSize)
    inPosition := true
if (sellCondition)
    strategy.close("Long")
    inPosition := false

// Draw vertical line markers for buy and sell signals
plotshape(buyCondition, style=shape.arrowdown, location=location.belowbar, color=color.green, size=size.small)
plotshape(sellCondition, style=shape.arrowup, location=location.abovebar, color=color.red, size=size.small)

// Draw two moving averages
plot(ma6, color=color.blue)
plot(ma35, color=color.orange)

// Draw volume indicator line
plot(volumeEMA, color=color.yellow)

// Define stop loss and take profit
stopLoss = strategy.position_avg_price * 0.5
takeProfit = strategy.position_avg_price * 1.25

if inPosition
    strategy.exit("Long Stop Loss", "Long", stop=stopLoss)
    strategy.exit("Long Take Profit", "Long", limit=takeProfit)



Plus de