Cette stratégie est appelée
La stratégie calcule le ROC des prix de clôture de Heikin Ashi au cours des dernières périodes de rocLength. Elle calcule ensuite les valeurs rocLow les plus élevées et les plus basses de ROC au cours des 50 dernières périodes. La ligne KillLine supérieure et la ligne KillLine inférieure sont générées sur la base de certains pourcentages de rocHigh et rocLow. Lorsque le ROC dépasse la ligne KillLine inférieure, une position longue est ouverte. Lorsque le ROC dépasse la ligne KillLine supérieure, la position longue est fermée. Inversement, lorsque le ROC dépasse la ligne KillLine supérieure, une position courte est ouverte. Lorsque le ROC dépasse la ligne KillLine inférieure, la position courte est fermée.
Le plus grand avantage de cette stratégie est l'utilisation de la forte capacité de suivi des tendances de l'indicateur ROC, combinée à la fonctionnalité de lissage des informations sur les prix de Heikin Ashi. Cela permet à la stratégie d'identifier efficacement les changements de tendance et d'entrer dans les transactions en temps opportun. Par rapport aux moyennes mobiles simples, ROC répond plus sensiblement aux changements de prix. En outre, les rails supérieurs et inférieurs générés à partir de centiles peuvent filtrer efficacement les consolidations et éviter les transactions inutiles de fausses ruptures.
Le principal risque de cette stratégie est que les paramètres incorrects peuvent entraîner un sur-trading ou une sensibilité insuffisante. Les périodes de rétrospective des rocLength et des percentiles doivent être réglées avec prudence, sinon les rails peuvent devenir trop ternes ou rigides, causant des transactions manquées ou des pertes inutiles. En outre, les paramètres des percentiles doivent être testés et ajustés à plusieurs reprises pour différents marchés afin de trouver des combinaisons optimales. La stratégie est également sujette à certaines pertes lorsque les tendances s'inversent, en raison de sa dépendance à l'égard des indicateurs de tendance.
La stratégie peut être optimisée de la manière suivante: 1) Ajouter des filtres avec d'autres indicateurs comme le RSI; 2) Optimiser dynamiquement les paramètres avec l'apprentissage automatique; 3) Définir un stop loss et un profit pour une gestion automatique des risques; 4) Combiner avec des stratégies non tendance pour équilibrer les risques.
En résumé, cette stratégie utilise la puissante capacité de suivi des tendances de l'indicateur ROC, combinée à Heikin Ashi pour l'identification et le suivi des tendances. Les rails supérieurs et inférieurs générés à partir des percentiles ROC permettent un filtrage efficace des pertes. Cela permet d'obtenir de bonnes performances de suivi des tendances.
/*backtest start: 2023-09-22 00:00:00 end: 2023-10-22 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/ // © jensenvilhelm //@version=5 strategy("Heikin Ashi ROC Percentile Strategy", shorttitle="ROC ON" , overlay=false) // User Inputs zerohLine = input(0, title="Midline") // Zero line, baseline for ROC (customer can modify this to adjust midline) rocLength = input(100, title="roc Length") // Lookback period for SMA and ROC (customer can modify this to adjust lookback period) stopLossLevel = input(2, title="Stop Loss (%)") // Level at which the strategy stops the loss (customer can modify this to adjust stop loss level) startDate = timestamp("2015 03 03") // Start date for the strategy (customer can modify this to adjust start date) // Heikin Ashi values var float haClose = na // Define Heikin Ashi close price var float haOpen = na // Define Heikin Ashi open price haClose := ohlc4 // Calculate Heikin Ashi close price as average of OHLC4 (no customer modification needed here) haOpen := na(haOpen[1]) ? (open + close) / 2 : (haOpen[1] + haClose[1]) / 2 // Calculate Heikin Ashi open price (no customer modification needed here) // ROC Calculation roc = ta.roc(ta.sma(haClose, rocLength), rocLength) // Calculate Rate of Change (ROC) (customer can modify rocLength in the inputs) rocHigh = ta.highest(roc, 50) // Get the highest ROC of the last 50 periods (customer can modify this to adjust lookback period) rocLow = ta.lowest(roc, 50) // Get the lowest ROC of the last 50 periods (customer can modify this to adjust lookback period) upperKillLine = ta.percentile_linear_interpolation(rocHigh, 10, 75) // Calculate upper kill line (customer can modify parameters to adjust this line) lowerKillLine = ta.percentile_linear_interpolation(rocLow, 10, 25) // Calculate lower kill line (customer can modify parameters to adjust this line) // Trade conditions enterLong = ta.crossover(roc, lowerKillLine) // Define when to enter long positions (customer can modify conditions to adjust entry points) exitLong = ta.crossunder(roc, upperKillLine) // Define when to exit long positions (customer can modify conditions to adjust exit points) enterShort = ta.crossunder(roc, upperKillLine) // Define when to enter short positions (customer can modify conditions to adjust entry points) exitShort = ta.crossover(roc, lowerKillLine ) // Define when to exit short positions (customer can modify conditions to adjust exit points) // Strategy execution if(time >= startDate) // Start strategy from specified start date if (enterLong) strategy.entry("Long", strategy.long) // Execute long trades if (exitLong) strategy.close("Long") // Close long trades if (enterShort) strategy.entry("Short", strategy.short) // Execute short trades if (exitShort) strategy.close("Short") // Close short trades // Plotting plot(zerohLine,title="Zeroline") // Plot zero line plot(roc, "RSI", color=color.rgb(248, 248, 248)) // Plot ROC plot(rocHigh, "Roc High", color = color.rgb(175, 78, 76)) // Plot highest ROC plot(rocLow, "Roc Low", color = color.rgb(175, 78, 76)) // Plot lowest ROC plot(upperKillLine, "Upper Kill Line", color = color.aqua) // Plot upper kill line plot(lowerKillLine, "Lower Kill Line", color = color.aqua) // Plot lower kill line