В процессе загрузки ресурсов... загрузка...

Индекс динамической волатильности (VIDYA) со стратегией обратного отклонения от тренда ATR

Автор:Чао Чжан, Дата: 2024-12-13 10:21:14
Тэги:ATRООПSMAМ.А.

img

Обзор

Эта стратегия представляет собой торговую систему, основанную на динамической средней переменной индексации (VIDYA), в сочетании с диапазонами ATR для повышения возможностей идентификации трендов и управления рисками. Стратегия динамически корректирует свой ответ на волатильность рынка, сохраняя при этом возможности отслеживания трендов и улавливая сигналы обворота рынка. Система использует VIDYA в качестве основного индикатора и диапазоны ATR для динамического размещения стоп-лосса.

Принципы стратегии

Основной принцип заключается в использовании динамических характеристик VIDYA для определения тренда.

  1. Использует Осиллятор импульса Chande для расчета импульса цены.
  2. Вычисляет адаптивный фактор альфа на основе импульса
  3. Конструирует динамические диапазоны волатильности с использованием ATR
  4. Сгенерирует длинные сигналы на верхнем прорыве и короткие сигналы на нижнем прорыве
  5. Использует логику обратной позиции - новые сигналы закрывают существующие позиции и открывают новые

Преимущества стратегии

  1. Сильная динамическая адаптация: VIDYA автоматически регулирует параметры на основе волатильности рынка
  2. Всеобъемлющий контроль рисков: использует динамические диапазоны ATR для адаптации к стоп-лосс
  3. Ясные сигналы: использует логику обратного тренда с различными торговыми сигналами
  4. Отличная визуализация: отличает тенденции вверх и вниз с помощью цветового кодирования
  5. Гибкие параметры: ключевые параметры могут быть оптимизированы для различных характеристик рынка

Стратегические риски

  1. Рыночный риск: склонность к ложным сигналам на различных рынках
  2. Влияние скольжения: Двусторонние сделки по каждому сигналу увеличивают риск скольжения
  3. Риск управления денежными средствами: размерность фиксированных позиций может привести к значительным потерям на волатильных рынках
  4. Чувствительность параметров: эффективность стратегии сильно зависит от параметров VIDYA и ATR
  5. Зависимость от рыночной среды: хорошо работает на развивающихся рынках, но может испытывать трудности на других

Руководство по оптимизации

  1. Добавить фильтры трендов: реализовать долгосрочную оценку трендов для фильтрации сигналов на различных рынках
  2. Улучшение управления позициями: внедрение динамического размещения позиций на основе волатильности рынка
  3. Улучшить логику входа: добавить подтверждение технических показателей для повышения надежности сигнала
  4. Усовершенствовать механизм остановки потерь: рассмотреть возможность остановки остановки или динамической остановки на основе волатильности
  5. Включайте временные фильтры: корректируйте параметры стратегии на основе различных характеристик периода времени

Резюме

Эта стратегия достигает динамического отслеживания трендов и контроля рисков путем объединения 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)

Связанные

Больше