La stratégie de suivi de la tendance auto-adaptative est une stratégie de trading quantitatif qui combine l’indicateur de la bande de Brin et l’indicateur de la ligne de parité, ajuste dynamiquement le facteur de force de la tendance, pour réaliser le suivi de la tendance et l’arrêt des pertes. La stratégie utilise l’indicateur de la bande de Brin pour calculer la volatilité des prix, en fonction de cette dynamique, pour calculer la force de la tendance raisonnable, puis, en combinaison avec l’indicateur ATR, pour tracer le canal de la tendance auto-adaptative, pour réaliser le jugement et le suivi de la tendance haussière et baissière.
La stratégie est centrée sur la bande de Brin. La bande de Brin est composée de la voie centrale, de la voie supérieure et de la voie inférieure. La voie centrale est une moyenne mobile simple de n jours, la voie supérieure est une différence standard de n jours de la voie centrale + k fois, la voie inférieure est une différence standard de n jours de la voie centrale - k fois.
On calcule ensuite le rapport entre la bande de Bryn (bandwidth ((up-track - down-track)) et le milieu de la bande, appelé le coefficient d’intensité de l’acier (coefficient d’intensité de l’acier). Ce rapport reflète la volatilité du marché actuel et l’intensité de la tendance. On fixe une valeur maximale ou minimale pour le coefficient d’intensité, afin d’éviter qu’il ne soit trop grand ou trop petit.
Après avoir obtenu un facteur d’intensité raisonnable, combiné avec l’indicateur ATR, le rail ascendant et descendant déplacent respectivement l’ATR vers le haut et vers le bas*Le facteur d’intensité, cette distance, forme un canal de tendance qui s’adapte. Lorsque le cours de clôture se déplace de bas en haut, faites plus; lorsque le cours de clôture se déplace de haut en bas, faites moins.
En outre, la stratégie met en place un mécanisme d’arrêt des pertes. Lorsque des positions à plusieurs têtes sont formées, si le prix atteint le point le plus bas de l’ouverture de la position, la position est arrêtée.
Cette stratégie présente les avantages suivants:
La méthode de calcul du facteur d’intensité permet à la stratégie d’ajuster la largeur des canaux en fonction de la dynamique des fluctuations du marché, d’élargir les canaux dans les marchés à tendance haussière et de les rétrécir dans les marchés à choc, pour s’adapter aux différents types de marchés.
La fréquence d’opération est modérée. Comparée à la simple stratégie des moyennes mobiles, la stratégie de la ceinture de Brin modifie les canaux à une fréquence plus faible, évitant ainsi les ouvertures de positions nettes inutilement fréquentes.
L’entrée est précise. La méthode d’entrée par rupture de la voie ascendante et descendante permet de filtrer efficacement le bruit du marché et d’assurer un démarrage de la tendance avec une forte probabilité.
Il y a un mécanisme d’arrêt des pertes. Le système d’arrêt des pertes intégré permet de contrôler efficacement les pertes individuelles, ce qui est un avantage majeur de la stratégie.
Cette stratégie comporte aussi des risques:
Les paramètres sont plus sensibles. Les cycles n et les multiples k de la bande de Bryn ont une grande influence sur les résultats et nécessitent des tests répétés pour trouver la meilleure combinaison de paramètres.
L’orbite de la ceinture de Brin ne peut pas suivre la tendance pendant la dispersion. Lorsque les prix fluctuent fortement, l’orbite de la ceinture de Brin s’étire rapidement, ce qui entraîne l’impossibilité de suivre la tendance. Il est alors nécessaire de suspendre la stratégie et d’attendre la convergence de l’orbite.
Il y a parfois des signaux erronés. La stratégie de la ceinture de Brin n’est pas parfaite, il y a aussi des signaux erronés qui nécessitent des pertes correspondantes.
La stratégie de stop loss est simple: elle ne prend en compte que le prix le plus élevé et le prix le plus bas après l’ouverture de la position. Elle ne prend pas en compte les méthodes de stop loss plus complexes, telles que la volatilité, qui peuvent être trop radicales ou conservatrices et doivent être optimisées.
La stratégie doit également être optimisée dans les domaines suivants:
Tester l’efficacité de paramètres de différentes devises et de différentes périodes. Les paramètres de la stratégie peuvent être optimisés pour différentes devises et périodes, ce qui améliore l’adaptabilité de la stratégie.
Optimisation des mécanismes d’arrêt des pertes. On peut introduire l’arrêt mobile, l’arrêt d’oscillation, l’arrêt de suivi, etc., pour rendre l’arrêt des pertes plus intelligent.
Il est possible d’ajouter des indicateurs tels que MACD, KDJ, etc. pour éviter que la bande de Brin ne génère de faux signaux dans le marché de la secousse de la boîte latérale.
Augmentation des mécanismes de gestion des positions. La mise en œuvre de méthodes de gestion telles que le suivi des stop-loss, des enchères pyramidales et des positions à taux fixe peut améliorer la rentabilité de la stratégie.
Optimiser les retours. Examiner l’efficacité de la stratégie et trouver les paramètres optimaux en élargissant le délai de retour, en ajustant les paramètres, en analysant les rapports de retours, etc.
La stratégie d’auto-adaptation suit la tendance est une stratégie quantitative plus mature dans l’ensemble. Elle utilise la capture dynamique de la tendance des indicateurs de la bande de Bryn pour construire un canal d’adaptation avec les indicateurs ATR, permettant de juger des tendances de plus d’espace. Le mécanisme d’arrêt intégré contrôle les risques.
/*backtest
start: 2023-12-15 00:00:00
end: 2024-01-14 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("[Th] Adaptive Trend v1", shorttitle="[TH] Adaptive Trend", overlay=true)
Pd=input(2, minval=1,maxval = 100, title="Period")
Bw=input(50, minval=1,maxval = 100, title="Bandwidth")
minFactor = input(0.5, minval=0.1, maxval=1.0, step=0.1, title="Minimum Factor")
maxFactor = input(3.00, minval=0.2, maxval=5.0, step=0.1, title="Maximum Factor")
plot_trend=input(true, title="Plot trend")
plot_losscut = input(true, title="Plot losscut")
/////////////// Calculate the BB's ///////////////
basisBB = ema(close, 20)
devBB = 2 * stdev(close, 20)
upperBB = basisBB + devBB
lowerBB = basisBB - devBB
//plot(upperBB)
//plot(lowerBB)
///////////// Trend ////////////////////////////
rawFactor = ((upperBB-lowerBB)/basisBB)*Bw
Factor = rawFactor > minFactor ? (rawFactor > maxFactor ? maxFactor : rawFactor) : minFactor
Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))
TrendUp=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
TrendUpPlot=plot(plot_trend?TrendUp:na, style=line, color=green, linewidth=1)
TrendDownPlot=plot(plot_trend?TrendDown:na, style=line, color=red, linewidth=1)
Trend = close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
fill(TrendUpPlot,TrendDownPlot, color=Trend == 1 ? green : red, transp=80)
sig_trend_long = Trend[1] == -1 and Trend == 1
sig_trend_short = Trend[1] == 1 and Trend == -1
///////////// Loss Cut ////////////////////////////
price_cut = sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1] ? open : price_cut[1]
current_trend = sig_trend_long[1] ? 1 : (sig_trend_short[1] ? -1 : current_trend[1])
sig_loss_cut = sig_trend_long or sig_trend_short ? false : ( current_trend == 1 ? (price_cut > low) : (current_trend == -1 ? (price_cut < high) : false) )
has_position = sig_loss_cut ? false : ((sig_trend_long[1] or sig_trend_short[1] or sig_reentry_long[1] or sig_reentry_short[1]) ? true : has_position[1])
sig_reentry_long = not has_position and current_trend == 1 and low > price_cut
sig_reentry_short = not has_position and current_trend == -1 and high < price_cut
bgcolor(plot_losscut and ( not has_position or sig_loss_cut ) ? silver : white, transp=70)
plotshape(plot_losscut and sig_loss_cut and current_trend == 1? 1 : na, color=green, style=shape.xcross, location=location.belowbar ,size=size.tiny)
plotshape(plot_losscut and sig_loss_cut and current_trend == -1? 1 : na, color=red, style=shape.xcross, location=location.abovebar ,size=size.tiny)
LossCutPlot = plot(plot_losscut ? price_cut : na, linewidth=4, color=black, transp=60)
fill(TrendDownPlot, LossCutPlot, color=silver, transp=90)
plotshape(sig_trend_long or sig_reentry_long ? Trend : na, title="Up Entry Arrow", color=green, style=shape.triangleup, location=location.belowbar, size=size.tiny)
plotshape(sig_trend_short or sig_reentry_short ? Trend : na, title="Down Entry Arrow",color=red, style=shape.triangledown, size=size.tiny)
///////////// Strategy ////////////////////////////
if true
strategy.entry('long', long=strategy.long, comment='Long', when=sig_trend_long or sig_reentry_long)
strategy.entry('short', long=strategy.short, comment='Short', when=sig_trend_short or sig_reentry_short)
if(current_trend == 1)
strategy.close('long', when=sig_loss_cut == true)
//strategy.exit('lc',from_entry='long', stop=price_cut)
if( current_trend == -1 )
strategy.close('short', when=sig_loss_cut == true)
//strategy.exit('sc',from_entry='short', stop=price_cut)