La stratégie de suivi de l'explosion de l'élan juge les percées de prix en calculant le pourcentage des changements de prix et filtre les signaux avec le volume de négociation pour implémenter une capture à haute probabilité des points de percée de tendance.
Les principaux indicateurs utilisés par cette stratégie pour déterminer les signaux d'entrée sont:
Changement de prix en pourcentage (isFourPercentBull) - Calcule la variation en pourcentage du prix de clôture par rapport au prix de clôture de la journée précédente pour déterminer si le prix a effectivement franchi le seuil.
Ratio entre prix de clôture et prix le plus élevé (HighCloseRatio) - Calculer le rapport entre le prix de clôture et le prix le plus élevé pour déterminer la force de la percée de prix.
Volume de négociation (volume) - Exiger que le volume de négociation soit supérieur à celui de la journée précédente pour assurer une percée valide.
Moyenne mobile simple de 200 jours (SMA) - Exige que le prix de clôture et le prix d'ouverture soient supérieurs à la ligne de 200 jours pour déterminer la direction de la tendance.
Lorsque les conditions multiples ci-dessus sont remplies en même temps, un signal d'achat est émis. Par la suite, la stratégie utilise le suivi des prix pour arrêter activement les pertes et verrouiller les bénéfices.
trailPrice = close * (100 - trailPercent) / 100
où trailPercent est le pourcentage de stop loss configurable. Cela garantit que tant que les prix augmentent, la ligne de stop loss augmentera également pour verrouiller les bénéfices. Lorsque les prix reviennent à la ligne de stop loss, fermez les positions pour arrêter les pertes.
En tant que stratégie de rupture typique, elle présente les avantages suivants:
Le filtrage multiconditionnel assure la validité de l'évasion et évite les fausses évasions.
Adopter le suivi des prix stop loss, qui peut réduire activement les pertes et verrouiller les bénéfices pour maximiser l'évitement des retraits.
La logique de la stratégie est simple et claire, facile à comprendre et à optimiser.
La stratégie comporte également certains risques:
Il y a encore une probabilité d'échec des évasions qui ne peuvent pas éviter complètement les pertes.
Des arrêts de suivi trop agressifs peuvent entraîner des arrêts fréquents.
Des paramètres mal réglés peuvent entraîner des fréquences de négociation excessives ou des signaux manqués.
Les solutions aux risques correspondants sont les suivantes:
Optimiser les paramètres et réduire l'amplitude de la perte d'arrêt pour assurer un espace suffisant.
Réduire raisonnablement les conditions de rupture pour s'assurer que les tendances claires ne sont pas manquées.
Testez différentes variétés pour évaluer la stabilité de la stratégie.
Compte tenu de la fréquence élevée des arrêts dans cette stratégie, les orientations suivantes peuvent être encore optimisées:
Les méthodes d'évaluation de la volatilité sont décrites ci-dessous.
Améliorer les algorithmes d'apprentissage automatique pour former des jugements sur des combinaisons de paramètres plus performantes basées sur des données historiques.
Ajouter des conditions de jugement auxiliaires basées sur les écarts de volume pour assurer l'efficacité.
Évaluer les différences de paramètres entre les différentes variétés pour trouver le meilleur ajustement.
La stratégie de suivi de l'explosion de l'élan est une stratégie de suivi de tendance très pratique dans l'ensemble. Elle résout le problème de l'incapacité d'arrêter efficacement les pertes et les profits dans les stratégies de rupture, tout en contrôlant bien les risques lors de la capture des tendances.
/*backtest start: 2023-03-01 00:00:00 end: 2023-12-10 05:20: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/ // © doks23 //@version=5 strategy(title = "SD:Momentum Burst", overlay=true, initial_capital=1000,commission_value = 0,slippage = 0,process_orders_on_close=true) //Check Vol checkVol = input.bool(defval=false,title="IncludeAvgVolume?") volSMAlength = input(50, title="VolumeLength") volumeSma = ta.sma(volume, volSMAlength) highvolume = volume >= volumeSma volumeCond=checkVol?highvolume:true // Profit and Loss trailPercent = input.float(title="Trail%", defval=3, step=0.1) //longCondition PercentThreshold=input.float(3.8,'BreakoutPercent', step=0.1) MaxThreshold=input.float(10,'Max Breakout', step=0.1) HighCloseRatio=input.float(70,'Close to High Ratio', step=1) float candleCloseBull = ((close[0] - open[0]) / (high[0] - open[0]) * 100) float isFourPercentBull = (((close[0] - close[1]) / close[1]) * 100) LongCond=volume > volume[1] and isFourPercentBull > PercentThreshold and candleCloseBull > HighCloseRatio and isFourPercentBull<MaxThreshold barcolor(color=(LongCond?color.yellow: na),title='BObar') longCondition= LongCond and volumeCond and close>ta.sma(close,200) and open>ta.sma(close,200) //Input Strategy DateCheck= input.bool(title = 'Custom Date Range?', defval=true,group = 'Strategy') FromDate= input(defval = timestamp("1 Jan 2019 00:00"),group = 'Strategy') ToDate =input(defval = timestamp("31 Dec 2023 00:00"),group = 'Strategy') PostionSize =input.string('Contract','Select Position Size',options = ['Percent of Equity','Contract'],group = 'Strategy') ContractQty =input.int(1,'No of Contract',group = 'Strategy') //Backtesting Date Range TimeWindow=true // Number of Contract var int trade_qty=na if(PostionSize=='Contract') trade_qty:=ContractQty else trade_qty:= (strategy.equity>strategy.initial_capital)?math.floor(strategy.equity/strategy.initial_capital):ContractQty //Position Buy BuyTriggerPrice = ta.valuewhen(longCondition,high,0) //Trailing price var float trailPrice = na float percentMulti = (100 - trailPercent) / 100 longCondition2=longCondition and TimeWindow if longCondition2 strategy.entry("Long", strategy.long,qty=trade_qty,stop = BuyTriggerPrice) trailPrice := close*percentMulti if strategy.position_size>0 trailPrice := math.max(close*percentMulti,trailPrice[1]) if low <= trailPrice strategy.exit('Exit','Long',stop = trailPrice) if strategy.position_size==0 trailPrice:=na // Plot Strategy var float trail_long_SL=na if strategy.position_size>0 trail_long_SL:=trailPrice else trail_long_SL:=na //Strategy Plot PlotMA=input.bool(title="Plot MA?", defval=false) plot(PlotMA?ta.sma(close,10):na,color = color.red,title = '10MA') plot(PlotMA?ta.sma(close,21):na,color = color.white,title = '21MA') plot(PlotMA?ta.sma(close,200):na,color = color.orange,title = '200MA') // plot(trail_long_SL,color = color.gray,style = plot.style_steplinebr,linewidth = 1)