JiaYiBing Tendance quantitative et stratégie de trading

Auteur:ChaoZhang est là., Date: 2024-03-08 15h40:05
Les étiquettes:

img

Résumé

La stratégie quantitative de trading de tendance de momentum de JiaYiBing est une stratégie quantitative de trading à long terme qui combine le suivi de tendance, les indicateurs de momentum et les canaux de Bollinger Bands.

Principes de stratégie

Le principe de base de cette stratégie est de saisir les opportunités du marché en tirant parti des tendances des prix et des effets de l'élan. Plus précisément, la stratégie utilise deux moyennes mobiles avec des périodes différentes (rapide et lent) pour déterminer la direction de la tendance des prix. Lorsque la moyenne mobile rapide dépasse la moyenne mobile lente, elle indique une tendance à la hausse et la stratégie génère un signal long; inversement, lorsque la moyenne mobile rapide dépasse la moyenne mobile lente, elle indique une tendance à la baisse et la stratégie génère un signal court.

Pour confirmer davantage la tendance et le moment de l'entrée, la stratégie intègre également des bandes de Bollinger et des indicateurs de dynamique. Les bandes de Bollinger se composent de trois lignes: la ligne du milieu est la moyenne mobile, tandis que les bandes supérieure et inférieure sont un certain nombre d'écart standard au-dessus et en dessous de la ligne du milieu. Lorsque le prix dépasse la bande de Bollinger supérieure, cela indique une forte dynamique haussière et la stratégie ira longue; lorsque le prix dépasse la bande de Bollinger inférieure, cela indique une forte dynamique descendante et la stratégie ira courte.

En outre, la stratégie introduit également un indicateur de dynamique, qui mesure la vitesse des variations de prix en comparant le prix actuel avec le prix d'il y a une certaine période.

En ce qui concerne la taille des positions, la stratégie permet de définir la taille de la position en fonction du capital du compte et de la préférence du risque.

Dans l'ensemble, la stratégie de négociation quantitative JiaYiBing tendance dynamique vise à saisir les opportunités de marché en tendance tout en contrôlant strictement le risque à travers plusieurs dimensions telles que le suivi de la tendance, la confirmation de la dynamique et la gestion des risques, afin d'obtenir des rendements stables des investissements.

Analyse des avantages

  1. Suivi des tendances: la stratégie utilise le croisement des moyennes mobiles rapides et lentes pour saisir les opportunités de prix en tendance, ce qui lui permet d'aller long dans les tendances haussières et court dans les tendances baissières, en s'adaptant aux différentes conditions du marché.

  2. Confirmation de l'élan: l'introduction de l'indicateur d'élan comme confirmation secondaire de la tendance aide à filtrer les faux signaux et à améliorer la qualité de l'entrée.

  3. Les bandes de Bollinger aident à la prise de décision: les bandes de Bollinger peuvent refléter la fourchette de volatilité des prix, et les ruptures des bandes de Bollinger peuvent être considérées comme des signaux d'accélération de la tendance ou de fluctuations anormales des prix, fournissant une référence pour l'entrée.

  4. Taille des positions: la stratégie utilise une méthode de taille des positions basée sur un pourcentage du capital du compte et une limite maximale, permettant un contrôle flexible du capital employé dans chaque transaction, en utilisant pleinement les fonds et en évitant une exposition excessive au risque.

  5. Profitez et arrêtez la perte: les ensembles de stratégies prennent des niveaux de profit, de stop-loss et de stop-loss, qui peuvent protéger les profits lorsque le prix se déplace dans la direction attendue et réduire de manière décisive les pertes lorsque le prix s'inverse, contrôlant efficacement la perte maximale de chaque transaction.

  6. Optimisation multi-paramètres: la stratégie comprend plusieurs paramètres réglables, tels que les périodes moyennes mobiles, les paramètres Bollinger Bands, les pourcentages de prise de profit et de stop-loss, etc., qui peuvent être optimisés pour améliorer l'adaptabilité et la robustesse de la stratégie.

Analyse des risques

  1. Commerce fréquent: la stratégie génère des signaux d'entrée basés sur des croisements de moyennes mobiles et des ruptures de bande de Bollinger.

  2. Sensitivité des paramètres: la stratégie comprend plusieurs paramètres, tels que les périodes moyennes mobiles, les périodes de dynamique, les paramètres des bandes de Bollinger, etc. Le choix de différents paramètres peut avoir un impact significatif sur la performance de la stratégie.

  3. Reconnaissance des tendances en retard: les moyennes mobiles sont des indicateurs en retard, en particulier lorsque la période de moyenne mobile est longue, la vitesse d'identification des renversements de tendance sera plus lente et le meilleur moment d'entrée peut être manqué.

  4. Risque de stop loss: bien que la stratégie définisse des mesures de stop loss, dans des conditions de marché extrêmes (telles que des écarts rapides), le prix peut franchir directement le niveau de stop loss, ce qui entraîne des pertes réelles supérieures aux attentes.

  5. Risque de position concentré: si la stratégie génère continuellement des signaux dans la même direction pendant une certaine période, elle peut entraîner une concentration excessive des positions dans un sens, ce qui entraîne un risque de position plus élevé.

  6. Risque de liquidité: la performance de la stratégie dans le backtesting et le trading en direct peut être affectée par la liquidité du marché, en particulier lorsqu'il s'agit de grands fonds, qui peuvent faire face à des problèmes de glissement et à un volume de négociation insuffisant.

Directions d'optimisation

  1. Introduire plus d'indicateurs techniques: sur la base des moyennes mobiles, du momentum et des bandes de Bollinger actuels, plus d'indicateurs techniques tels que le RSI et le MACD peuvent être introduits pour améliorer la fiabilité des signaux grâce à la confirmation multi-indicateur.

  2. Optimiser les mécanismes d'entrée et de sortie: davantage de conditions peuvent être introduites dans le jugement de l'entrée et de la sortie, telles que l'exigence d'un certain volume de négociation avant la rupture des prix, l'utilisation de la fermeture par étapes de la position ou de la prise de bénéfices pour les sorties, afin d'améliorer la flexibilité et la rentabilité de la stratégie.

  3. Ajustement dynamique des paramètres: pour les périodes de moyennes mobiles, les périodes de dynamique, les paramètres des bandes de Bollinger, etc., un ensemble de mécanismes d'adaptation des paramètres peut être conçu pour ajuster dynamiquement les valeurs des paramètres en fonction des différents états du marché et des niveaux de volatilité, améliorant ainsi l'adaptabilité de la stratégie.

  4. Améliorer la taille des positions: sur la base de la taille actuelle des positions, des méthodes de gestion de l'argent plus avancées telles que le critère Kelly, le ratio fixe, le capital dynamique, etc. peuvent être introduites pour améliorer les rendements et les risques de solde.

  5. Combiner avec l'analyse fondamentale: les stratégies d'analyse technique pure peuvent faire face au risque d'inefficacité ou d'échec du marché.

  6. Améliorer la cohérence du backtesting et du live trading: les performances de la stratégie dans le backtesting et le live trading peuvent différer. Il est nécessaire de se concentrer sur la qualité d'exécution du backtesting et du live trading, y compris des facteurs tels que le prix d'exécution, le glissement et la latence, afin d'assurer la cohérence des performances en direct avec les résultats du backtesting.

Résumé

La Stratégie de trading quantitative de tendance à la dynamique de JiaYiBing est une stratégie de trading quantitative qui intègre plusieurs méthodes d'analyse technique.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('甲易炳', overlay=true)

// Parameters
trendPeriod = input(50, 'Trend Period')
momentumPeriod = input(14, 'Momentum Period')
bbPeriod = input(20, 'Bollinger Bands Period')
bbDeviation = input(2, 'Bollinger Bands Deviation')
fastMALen = input(23, 'Fast SMA Length')
slowMALen = input(50, 'Slow SMA Length')
longTakeProfitPerc = input.float(0.5, 'Long Take Profit %', minval=0.05, step=0.05) * 0.01
shortTakeProfitPerc = input.float(0.5, 'Short Take Profit %', minval=0.05, step=0.05) * 0.01
stopLossPerc = input.float(0.5, 'Stop Loss %', minval=0.05, step=0.05) * 0.01
enableTrailing = input.bool(true, 'Enable Trailing')
trailingTakeProfitPerc = input.float(0.01, 'Trailing Take Profit %', minval=0.01, maxval=100, step=0.01) * 0.01
trailingStopLossPerc = input.float(0.5, 'Trailing Stop Loss %', minval=0.05, step=0.05) * 0.01
qty_percent = input.int(20, 'Position Size %', step=1)
qty_cap = input.int(10000, 'Max Position Size', step=1000)
beast_mode = input.bool(false, 'Beast Mode')
set_cap = input.bool(true, 'Cap Position Size')
strategy.initial_capital = 50000
// Calculate position size
qty1 = (strategy.initial_capital + strategy.netprofit) * qty_percent / 10 / close
qty = (set_cap and qty1 > qty_cap) ? qty_cap : qty1

// Calculate moving averages
fastMA = ta.sma(close, fastMALen)
slowMA = ta.sma(close, slowMALen)

// Bollinger Bands
[upperBB, middleBB, lowerBB] = ta.bb(close, bbPeriod, bbDeviation)

// Entry conditions
buySignal = ta.crossover(close, fastMA) and close > upperBB
sellSignal = ta.crossunder(close, fastMA) and close < lowerBB

// Rampage mode entry conditions
if beast_mode
    buySignal := buySignal and fastMA > fastMA[2]
    sellSignal := sellSignal and fastMA < fastMA[2]

// Active positions
longIsActive = buySignal or strategy.position_size > 0
shortIsActive = sellSignal or strategy.position_size < 0

// Declare take profit and stop loss variables
var float longTakeProfitPrice = na
var float shortTakeProfitPrice = na

// Take profit and stop loss calculation
if longIsActive
    if buySignal and not (strategy.position_size > 0)
        longTakeProfitPrice := close * (1 + longTakeProfitPerc)
    else
        longTakeProfitPrice := nz(longTakeProfitPrice[1], close * (1 + longTakeProfitPerc))
if shortIsActive
    if sellSignal and not (strategy.position_size < 0)
        shortTakeProfitPrice := close * (1 - shortTakeProfitPerc)
    else
        shortTakeProfitPrice := nz(shortTakeProfitPrice[1], close * (1 - shortTakeProfitPerc))

longTrailingTakeProfitStepTicks = longTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
shortTrailingTakeProfitStepTicks = shortTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
longTrailingStopLossPrice = close * (1 - trailingStopLossPerc)
shortTrailingStopLossPrice = close * (1 + trailingStopLossPerc)

// Entries and exits
if strategy.position_size == 0
    strategy.entry('Long Entry', qty=qty, direction=strategy.long, when=buySignal, alert_message='Long Entry')
    strategy.entry('Short Entry', qty=qty, direction=strategy.short, when=sellSignal, alert_message='Short Entry')
    strategy.exit('Long Take Profit', 'Long Entry', loss=close * stopLossPerc / syminfo.mintick, limit=enableTrailing ? na : longTakeProfitPrice, trail_price=enableTrailing ? longTakeProfitPrice : na, trail_offset=enableTrailing ? longTrailingTakeProfitStepTicks : na, when=longIsActive, alert_message='Long Take Profit')
    strategy.exit('Short Take Profit', 'Short Entry', loss=close * stopLossPerc / syminfo.mintick, limit=enableTrailing ? na : shortTakeProfitPrice, trail_price=enableTrailing ? shortTakeProfitPrice : na, trail_offset=enableTrailing ? shortTrailingTakeProfitStepTicks : na, when=shortIsActive, alert_message='Short Take Profit')
else
    if longIsActive
        strategy.exit('Long Stop Loss', 'Long Entry', stop=longTrailingStopLossPrice, when=longIsActive)
    if shortIsActive
        strategy.exit('Short Stop Loss', 'Short Entry', stop=shortTrailingStopLossPrice, when=shortIsActive)

// Plotting
plot(fastMA, 'Fast SMA', color=color.blue, linewidth=1, style=plot.style_line)
plot(slowMA, 'Slow SMA', color=color.orange, linewidth=1, style=plot.style_line)
plot(upperBB, 'Upper BB', color=color.green, linewidth=1, style=plot.style_line)
plot(lowerBB, 'Lower BB', color=color.red, linewidth=1, style=plot.style_line)


Plus de