Stratégie de suivi de tendance quantitative


Date de création: 2024-02-01 11:42:22 Dernière modification: 2024-02-01 11:42:22
Copier: 0 Nombre de clics: 524
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance quantitative

Aperçu

La stratégie utilise plusieurs indicateurs tels que les bandes de Brin, le RSI, l’ADX et le MACD pour juger de la tendance du marché, avec une plus grande capacité de reconnaissance de la tendance. Lorsque le signal est à la fois haussier, une stratégie de rattrapage est utilisée.

Principe de stratégie

  • Utilisez les bandes de Brin pour déterminer si le prix est proche de la trajectoire de Brin ou de la trajectoire de Brin pour déterminer si une tendance se forme
  • En combinant l’indicateur RSI pour déterminer si vous êtes dans une zone de survente ou de survente, évitez les fausses percées
  • Utilisez l’ADX pour déterminer la force d’une tendance et émettez un signal uniquement lorsque la tendance est forte
  • Utilisation du MACD pour déterminer la cohérence des tendances à court et à long terme
  • Combinaison de périodes de la journée, uniquement pour les périodes de négociation spécifiées

L’analyse de la composition de plusieurs indicateurs permet d’identifier avec précision les tendances des prix, de les suivre en temps opportun et de réaliser des gains supplémentaires.

Analyse des avantages

Le plus grand avantage de cette stratégie réside dans le fait que la combinaison d’indicateurs est plus complète et précise, ce qui permet d’identifier efficacement les tendances des prix et d’éviter les faux signaux causés par un seul indicateur.

Les avantages sont les suivants:

  1. Les courbes de Brin permettent de juger de la force et de l’ampleur des fluctuations des prix
  2. Le RSI évite de s’acheter dans les zones de survente et de vendre dans les zones de survente
  3. L’ADX juge la force de la tendance en suivant uniquement la tendance forte
  4. Le MACD décide de la cohérence de la courte et de la longue ligne
  5. Limiter le temps de négociation pour éviter les risques de nuit

Le choix d’une combinaison d’indicateurs permet de réduire au maximum les faux signaux et de renforcer la stabilité de la stratégie.

Analyse des risques

Les principaux risques liés à cette stratégie sont:

  1. Les événements imprévus ont entraîné une défaillance de l’indicateur
  2. Les tremblements de terre ont généré de nombreux faux signaux

En ce qui concerne le risque 1, la dépendance à plusieurs indicateurs a permis d’éviter dans une certaine mesure l’échec d’un seul indicateur, mais il reste nécessaire d’améliorer les mécanismes de contrôle des risques.

Les paramètres peuvent être adaptés en fonction du risque 2, afin de réduire les intervalles de négociation, de réduire la fréquence des transactions et de réduire le risque.

Direction d’optimisation

Les principaux axes d’optimisation de cette stratégie sont les suivants:

  1. Augmentation des mécanismes de freinage, tels que le freinage de mouvement, le freinage de temps, le freinage de rupture, etc., pour éviter un retrait trop profond
  2. Optimiser les paramètres, ajuster les combinaisons de paramètres de l’indicateur et rechercher les paramètres optimaux
  3. Augmentation des conditions de filtrage, telles que le filtrage en masse, pour éviter les fausses percées de petite quantité
  4. Combinaison d’autres indicateurs tels que KDJ, OBV, etc. pour améliorer la précision du signal
  5. Optimisation automatique des paramètres avec une méthode d’apprentissage automatique

L’amélioration continue de la robustesse des paramètres stratégiques et la réduction de la probabilité de faux signaux par une optimisation continue.

Résumer

La stratégie est globalement plus efficace pour identifier les signaux de tendance, en utilisant une combinaison d’indicateurs permettant d’identifier efficacement les tendances de prix, max.

Cependant, il existe également un certain risque, qui nécessite une amélioration continue du mécanisme de contrôle des vents et une optimisation continue des paramètres pour assurer un fonctionnement stable à long terme. Si des méthodes telles que l’apprentissage automatique des paramètres peuvent être introduites ultérieurement, la robustesse et la rentabilité de la stratégie seront considérablement améliorées.

Code source de la stratégie
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 00:00:00
period: 5h
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/
// © abilash.s.90


dIMinusCalc(adxLen) =>
    
    smoothedTrueRange = 0.0
    smoothedDirectionalMovementMinus = 0.0
    dIMinus = 0.0
    trueRange = 0.0
    directionalMovementMinus = 0.0
    
    trueRange := max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
    directionalMovementMinus := nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
    
    smoothedTrueRange := nz(smoothedTrueRange[1]) - (nz(smoothedTrueRange[1])/adxLen) + trueRange
    smoothedDirectionalMovementMinus := nz(smoothedDirectionalMovementMinus[1]) - (nz(smoothedDirectionalMovementMinus[1])/adxLen) + directionalMovementMinus
    
    dIMinus := smoothedDirectionalMovementMinus / smoothedTrueRange * 100
    
    dIMinus

dIPlusCalc(adxLen) =>
    
    smoothedTrueRange = 0.0
    smoothedDirectionalMovementPlus = 0.0
    dIPlus =  0.0
    trueRange = 0.0
    directionalMovementPlus = 0.0
    
    trueRange := max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
    directionalMovementPlus := high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
    
    smoothedTrueRange := nz(smoothedTrueRange[1]) - (nz(smoothedTrueRange[1])/adxLen) + trueRange
    smoothedDirectionalMovementPlus := nz(smoothedDirectionalMovementPlus[1]) - (nz(smoothedDirectionalMovementPlus[1])/adxLen) + directionalMovementPlus
    
    dIPlus := smoothedDirectionalMovementPlus / smoothedTrueRange * 100
    
    dIPlus
    
    
Adx(adxLen) =>
    dIPlus =  0.0
    dIMinus = 0.0
    dX = 0.0
    aDX = 0.0
    dIPlus := dIPlusCalc(adxLen)
    dIMinus := dIMinusCalc(adxLen)
    dX := abs(dIPlus-dIMinus) / (dIPlus+dIMinus)*100
    aDX := sma(dX, adxLen)
    
    aDX
    
BarInSession(sess) => time(timeframe.period, sess) != 0


//@version=4
strategy("Bollinger Band + RSI + ADX + MACD", overlay=true)

//Session

session = input(title="Trading Session", type=input.session, defval="0930-1500")

sessionColor = BarInSession(session) ? color.green : na

bgcolor(color=sessionColor, transp=95)

// Bollinger Bands
src = input(high, title="Bollinger Band Source", type=input.source)
length = input(3, minval=1, type=input.integer, title="Bollinger Band Length")
mult = input(4.989, minval=0.001, maxval=50, step=0.001, type=input.float, title="Bollinger Band Std Dev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev


plot(upper, title="Bollinger Band Upper", color=color.red)
plot(lower, title="Bollinger Band Lower", color=color.green)

// RSI
rsiSrc = input(close, title="RSI Source", type=input.source)
rsiLength = input(16, minval=1, type=input.integer, title="RSI Length")
rsiComparator = input(39.2, title="RSI Comparator", type=input.float, step=0.1)

rsi = rsi(rsiSrc, rsiLength)

// ADX
adxLength = input(14, minval=1, type=input.integer, title="ADX Length")
adxComparator = input(14, minval=1, type=input.integer, title="ADX Comparator")

adx = Adx(adxLength)

// Heikinashi

haClose = security(heikinashi(syminfo.ticker), timeframe.period, close)
haOpen = security(heikinashi(syminfo.ticker), timeframe.period, open)

nextHaOpen = (haOpen + haClose) / 2

//MACD

macdCalcTypeProcessed = input(title="MACD Source", type=input.source, defval=high)
fast = input(12, title="MACD Fast")
slow = input(20, title="MACD Slow")
signalLen = input(15, title="MACD Signal")

fastMA = ema(macdCalcTypeProcessed, fast)
slowMA = ema(macdCalcTypeProcessed, slow)
macd = fastMA - slowMA
signal = sma(macd, signalLen)



longCondition() =>
    (low < lower) and (rsi[0] > rsiComparator) and (adx > adxComparator) and (close > nextHaOpen) and BarInSession(session) and macd > signal

stop = (close - max((low - (low * 0.0022)), (close - (close * 0.0032)))) / syminfo.mintick
target = (max(upper, (close + (close * 0.0075))) - close) / syminfo.mintick


strategy.entry("SX,LE", strategy.long, when=longCondition(), comment="SX,LE")
strategy.close_all(when=(not BarInSession(session)))
strategy.exit("LX", from_entry="SX,LE", profit=target, loss=stop)