
L’idée principale de cette stratégie est de réaliser une stratégie de suivi de tendance aussi précise que possible. Elle juge la probabilité de perpétuation de la tendance linéaire actuelle en calculant le seuil de confiance de l’achèvement d’un certain nombre de prix dans le passé. La stratégie suppose qu’une fois que la confiance dépasse un certain niveau, la tendance linéaire en cours est plus susceptible de se poursuivre.
La stratégie utilise la méthode de régression linéaire ordinaire pour calculer la correspondance linéaire de N prix de clôture passés, obtenant une inclinaison de la correspondance linéaire de k et un écart standard par rapport au prix de clôture de σ. Puis définir l’incertitude de la tendance comme k/σ.
Lorsque la confiance de la tendance dépasse le seuil de pénétration de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-value de la plus-val
Ainsi, il peut filtrer les signaux générés par des variations de prix sauvages qui ne suivent pas une tendance clairement linéaire.
Cette stratégie, combinant le suivi des tendances et la méthode de régression linéaire de la statistique, permet d’éviter de suivre les fluctuations de prix à court terme et de suivre uniquement les tendances à long terme, ce qui entraîne une fréquence de négociation plus faible et un taux de victoire plus élevé.
Cette stratégie a un large éventail de paramètres et peut être généralisée en adaptant les paramètres à différentes variétés et périodes.
La stratégie présente un risque d’arbitrage. La stratégie peut entraîner des pertes plus importantes lorsque le prix est visiblement en train de s’inverser. De plus, une mauvaise configuration des paramètres peut entraîner une survente ou une perte de bonnes opportunités de trading.
Il est possible de mettre en place des arrêts de perte pour contrôler le risque de perte. En même temps, il faut évaluer soigneusement le choix des paramètres pour éviter une optimisation excessive.
Cette stratégie peut être optimisée dans les domaines suivants:
Augmentation de la logique de stop loss et de l’arrêt pour la sécurisation des bénéfices et la gestion des risques
Ajouter des paramètres pour adapter le module d’optimisation afin qu’ils puissent être ajustés dynamiquement
L’ajout de modèles d’apprentissage automatique pour déterminer les points de retournement de tendance et améliorer encore la probabilité de succès de la stratégie
Tester l’adaptation à différentes variétés et périodes de temps, améliorer la généralisation
La stratégie est globalement une stratégie quantitative basée sur des tendances à long terme, contrôlant les risques. Elle combine le suivi des tendances et les méthodes de régression linéaire, permettant de filtrer les signaux de négociation de bruit. Par l’ajustement des paramètres, elle s’adapte bien aux différentes variétés et périodes et constitue une stratégie efficace qui mérite d’être étudiée et améliorée.
/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 00:00: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/
// © carefulCamel61097
// ################################################################################################
// "This is a trend following strategy that performed very well on the past 5 years"
// "Intended to be used on BTC-USDT, 4hr timeframe"
// "A factor 2 Leverage can be added by changing Order Size to 200% of equity"
// "Higher leverage is not recommended due to big drawdowns"
// "Also seems to work on 1D timeframe, although ideal parameters may be different"
// "Also seems to work on ETH-USDT and some other altcoins, although ideal parameters are different"
// ################################################################################################
//@version=5
strategy("Trend Following based on Trend Confidence", overlay=false )
// Inputs
source = input(close)
since = input(timestamp('2000-01-01'), title='Start trading interval')
till = input(timestamp('2030-01-01'), title='End trading interval')
length = input(30, title='Length')
longs_on = input.bool(true, title='Longs')
shorts_on = input.bool(true, title='Shorts')
// Parameters for best performance 2018 - 2022
// long_entry = input.float(0.26, step=0.01, title='Long entry threshold')
// long_exit = input.float(-0.10, step=0.01, title='Long exit threshold')
// short_entry = input.float(-0.24, step=0.01, title='Short entry threshold')
// short_exit = input.float(-0.04, step=0.01, title='Short exit threshold')
long_entry = input.float(0.25, step=0.01, title='Long entry threshold')
long_exit = input.float(-0.10, step=0.01, title='Long exit threshold')
short_entry = input.float(-0.25, step=0.01, title='Short entry threshold')
short_exit = input.float(-0.05, step=0.01, title='Short exit threshold')
stop_loss = input.float(10, step=1, title='Stop loss (percentage)') / 100
// Trend Confidence
linreg = ta.linreg(source, length, 0)
linreg_p = ta.linreg(source, length, 0+1)
x = bar_index
slope = linreg - linreg_p
intercept = linreg - x*slope
deviationSum = 0.0
for i = 0 to length-1
deviationSum := deviationSum + math.pow(source[i]-(slope*(x-i)+intercept), 2)
deviation = math.sqrt(deviationSum/(length))
slope_perc = slope / source[0]
deviation_perc = deviation / source[0]
trend_confidence = slope_perc / deviation_perc
// Strategy
in_interval = true
sl_long = strategy.position_avg_price * (1 - stop_loss)
sl_short = strategy.position_avg_price * (1 + stop_loss)
if in_interval and longs_on and ta.crossover(trend_confidence, long_entry)
strategy.entry("TC Long Entry", strategy.long)
strategy.exit("TC Long Exit", stop=sl_long)
if in_interval and longs_on and ta.crossunder(trend_confidence, long_exit)
strategy.close("TC Long Entry")
if in_interval and shorts_on and ta.crossunder(trend_confidence, short_entry)
strategy.entry("TC Short Entry", strategy.short)
strategy.exit("TC Short Exit", stop=sl_short)
if in_interval and shorts_on and ta.crossover(trend_confidence, short_exit)
strategy.close("TC Short Entry")
// Plots
plot(trend_confidence, "Trend Confidence", color.rgb(255, 255, 255))
plot(long_entry, "", color.rgb(0, 255, 0), linewidth=1)
plot(long_exit, "", color.rgb(255, 0, 0), linewidth=1)
plot(short_entry, "", color=bar_index % 10 == 0 ? color.rgb(0, 255, 0) : #00000000, linewidth=1)
plot(short_exit, "", color=bar_index % 10 == 0 ? color.rgb(255, 0, 0) : #00000000, linewidth=1)