
La stratégie est un système de trading de suivi de tendance basé sur l’indicateur de volatilité dynamique (VIDYA), combiné à l’ATR pour améliorer la capacité d’identification des tendances et de gestion des risques. La stratégie est capable de capturer en temps opportun les signaux de retournement du marché en ajustant dynamiquement la vitesse de réponse aux fluctuations du marché, tout en conservant la capacité de suivre les tendances.
Le cœur de la stratégie est d’utiliser les caractéristiques dynamiques de l’indicateur VIDA pour identifier les tendances. VIDA ajuste dynamiquement le poids des moyennes mobiles en calculant les variations de la dynamique, afin d’avoir une sensibilité différente dans différents environnements de marché.
La stratégie, combinée à VIDYA et ATR, permet le suivi dynamique et le contrôle des risques liés aux tendances du marché. Son avantage central réside dans sa capacité à s’adapter aux fluctuations du marché, tout en conservant la capacité de suivre les tendances.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-11 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © PakunFX
//@version=5
strategy("VIDYA Auto-Trading(Reversal Logic)", overlay=true)
// INPUTS ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
int vidya_length = input.int(10, "VIDYA Length")
int vidya_momentum = input.int(20, "VIDYA Momentum")
float band_distance = input.float(2, "Distance factor for upper/lower bands", step = 0.1)
float source = input.source(close, "Source")
color up_trend_color = input(#17dfad, "+")
color down_trend_color = input(#dd326b, "-")
bool shadow = input.bool(true, "Shadow")
// Define VIDYA (Variable Index Dynamic Average) function
vidya_calc(src, vidya_length, vidya_momentum) =>
float momentum = ta.change(src)
float sum_pos_momentum = math.sum((momentum >= 0) ? momentum : 0.0, vidya_momentum)
float sum_neg_momentum = math.sum((momentum >= 0) ? 0.0 : -momentum, vidya_momentum)
float abs_cmo = math.abs(100 * (sum_pos_momentum - sum_neg_momentum) / (sum_pos_momentum + sum_neg_momentum))
float alpha = 2 / (vidya_length + 1)
var float vidya_value = 0.0
vidya_value := alpha * abs_cmo / 100 * src + (1 - alpha * abs_cmo / 100) * nz(vidya_value[1])
ta.sma(vidya_value, 15)
// Calculate VIDYA
float vidya_value = vidya_calc(source, vidya_length, vidya_momentum)
// Calculate upper and lower bands
float atr_value = ta.atr(200)
float upper_band = vidya_value + atr_value * band_distance
float lower_band = vidya_value - atr_value * band_distance
// Detect trend direction
bool is_trend_up = na
if ta.crossover(source, upper_band)
is_trend_up := true
if ta.crossunder(source, lower_band)
is_trend_up := false
// Smooth the trend line
float smoothed_value = na
if is_trend_up
smoothed_value := lower_band
if not is_trend_up
smoothed_value := upper_band
// Detect trend change
bool trend_cross_up = ta.crossover(source, upper_band)
bool trend_cross_down = ta.crossunder(source, lower_band)
// ENTRY & EXIT ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
// Long logic: Enter long when down arrow appears and exit when up arrow appears
if trend_cross_up
strategy.close("Sell") // Close short position if any
strategy.entry("Buy", strategy.long)
if trend_cross_down
strategy.close("Buy") // Close long position if any
strategy.entry("Sell", strategy.short)