
Эта стратегия является системой торговли с отслеживанием тенденций, основанной на динамическом индикаторе волатильности (VIDYA), в сочетании с ATR-волатильностью для повышения способности к идентификации тенденций и управлению рисками. Эта стратегия позволяет вовремя улавливать сигналы рыночного разворота, динамически регулируя скорость реагирования на рыночные колебания, сохраняя способность отслеживать тенденции.
В основе стратегии лежит использование динамических свойств индикатора VIDYA для выявления тенденций. VIDYA динамически корректирует вес движущихся средних, рассчитывая динамические изменения, чтобы иметь разную чувствительность в разных рыночных условиях. В частности:
Эта стратегия в сочетании с VIDYA и ATR позволяет динамично отслеживать и контролировать риски от рыночных тенденций. Ее основное преимущество заключается в том, что она может адаптироваться к рыночным колебаниям, сохраняя способность отслеживать тенденции, а также своевременно улавливать возможности для обратного пути. Хотя в некоторых рыночных условиях риски могут возникать, стратегия по-прежнему имеет хорошую практическую ценность с помощью разумной оптимизации параметров и мер управления рисками.
/*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)