Стратегия обратного испытания вертикального горизонтального фильтра

Автор:Чао Чжан, Дата: 2024-01-08 10:20:25
Тэги:

img

Обзор: Эта стратегия оценивает, находятся ли цены в состоянии тренда, рассчитывая соотношение между разницей между наивысшей и наименьшей ценами за определенный период и амплитудой цены закрытия, и использует это в качестве индикатора торгового сигнала.

Принцип стратегии: основным показателем этой стратегии является вертикальный горизонтальный фильтр (VHF), который рассчитывается по следующей формуле:

VHF = (высшая ((длина) - низшая ((длина)) / SUM ((ABS ((близко-близко[1]), длина)

где Highest ((Length) и Lowest ((Length) соответственно являются самыми высокими и самыми низкими ценами в цикле Length. Числитель отражает диапазон амплитуды цен, а знаменатель отражает фактическое колебание цен. Их соотношение может судить о тенденции движения цен. Когда VHF выше установленного порога сигнала, считается, что цены находятся в трендовом состоянии. Когда ниже указанного порога сигнала, считается, что цены находятся в шоковом состоянии.

Эта стратегия проста и интуитивно понятна. Сравнивая диапазон колебаний цены с фактическим колебанием, чтобы судить о тренде, она избегает проблемы полагаться исключительно на SMA, EMA и другие индикаторы, игнорируя характеристики самой цены. Но эта стратегия чувствительна к оптимизации параметров, параметры длины и сигнала должны быть скорректированы для адаптации к различным циклам и условиям рынка.

Анализ преимуществ:

  1. Интуитивно понятный индикатор оценки тренда, простой и эффективный.
  2. Рассмотрим характеристики самой цены, не полагаясь на какую-либо кривую.
  3. Конфигурируемые параметры регулируют чувствительность суждения.
  4. Можно легко интегрировать в различные торговые стратегии.

Анализ рисков:

  1. Чувствительные к параметрам, неправильные настройки могут вызвать слишком много ложных сделок.
  2. Неспособность различать псевдо-тенденции, когда цены находятся в точках перелома.
  3. Не чувствительны к краткосрочным ценовым шокам при больших циклах.
  4. Нужно использовать стоп-лосс для контроля одиночных потерь.

Направления оптимизации:

  1. Оптимизировать параметр длины, чтобы сбалансировать чувствительность оценки тренда.
  2. Комбинируйте другие индикаторы для фильтрации сигналов VHF. Например, MACD может определять точки преломления.
  3. Попробуйте методы машинного обучения, чтобы соответствовать кривой VHF.
  4. Создать параллельные стратегии с различными настройками цикла для получения сигналов стратегии на нескольких уровнях.

Резюме: Эта стратегия интуитивно определяет тренд на основе характеристик самой цены, проста и действительна, стоит дальнейшего изучения, оптимизации и проверки.


/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 27/04/2018
// Vertical Horizontal Filter was initiated by Adam White. It was first published 
// in a magazine called “Issues of Futures” in August, 1991. The Vertical Horizontal 
// Filter (VHF) is a very common Indicator used by traders to find out the Phase of 
// a Price Trend. Normally, a price trend can be in a Trending Phase or a Congestion 
// Phase/Choppy Movement Phase. Adam White created this particular Technical Indicator 
// to determine whether prices are trending in a particular direction or are they going 
// through a transitional period. He used it to measure the range of Futures available
// in the market.
//
// You can change long to short in the Input Settings
// WARNING:
//  - For purpose educate only
//  - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title="Vertical Horizontal Filter Backtest")
Length = input(28, minval=1)
Signal = input(0.4, step=0.01)
reverse = input(false, title="Trade reverse")
hline(Signal, color=blue, linestyle=line)
xHH = highest(high, Length)
xLL = lowest(low, Length)
xNumerator = abs(xHH - xLL)
xDenominator = sum(abs(close - close[1]), Length)
xVHF = xNumerator / xDenominator 
pos = iff(xVHF > Signal, 1,
       iff(xVHF < Signal, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue ) 
plot(xVHF, color=blue, title="VHF")

Больше