Trend Trader Bands Backtest Strategy Based on Trend Trader Moving Average (Стратегия обратного теста на основе скользящей средней трендового трейдера)

Автор:Чао Чжан, Дата: 2023-12-11 13:12:44
Тэги:

img

Обзор

Основная идея этой стратегии заключается в том, чтобы судить о ценовых тенденциях и генерировать торговые сигналы с использованием скользящих средних и полос Боллинджера. В частности, сначала он вычисляет средний истинный диапазон (ATR) за определенный период, чтобы получить диапазон волатильности, а затем объединяет самые высокие и самые низкие цены, чтобы сформировать ограничительный канал. Если цена проходит через этот канал, цена закрытия устанавливается как цена канала. После этого он вычисляет движущуюся среднюю из ограниченных цен закрытия, которая называется движущейся средней Trend Trader (AVR).

Логика стратегии

Стратегия сначала рассчитывает диапазон ATR и образует ограничительный канал в сочетании с самыми высокими и самыми низкими ценами. Цена закрытия будет ограничена ценой канала только тогда, когда она пройдет через канал. После этого она рассчитывает движущуюся среднюю цену Trend Trader ограниченных закрытий, которая отражает направление средне-долгосрочного тренда. Наконец, нарисуйте верхнюю полосу и нижнюю полосу параллельно движущемуся среднему Trend Trader как полосы Боллинджера. Пробивание через верхнюю полосу генерирует длинный сигнал, а прорыв через нижнюю полосу генерирует короткий сигнал.

Основой оценки тренда является скользящая средняя, которая отражает направление тренда в среднесрочной и долгосрочной перспективе. Роль полос Боллинджера заключается в том, чтобы отфильтровать некоторые ложные прорывы и сделать торговые сигналы более надежными.

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

  1. ATR и ценовой диапазон создают адаптивный канал для отслеживания волатильности рынка
  2. Trend Trade AVR четко оценивает среднесрочную и долгосрочную тенденцию
  3. Боллингерские полосы фильтруют ложные прорывы и улучшают качество сигнала
  4. Система отражает сильную тенденцию, долгое владение может получить хорошую прибыль

Риски

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

Решения:

  1. Правильно сократить период хранения и установить стоп-лосс
  2. Оптимизируйте параметры, чтобы дать сигналам достаточно буфера
  3. Использовать исторические данные и прямую торговлю для настройки параметров

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

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

Заключение

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


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 16/10/2018
// This is plots the indicator developed by Andrew Abraham 
// in the Trading the Trend article of TASC September 1998  
// It was modified, result values wass averages.
// And draw two bands above and below TT line.
////////////////////////////////////////////////////////////
strategy(title="Trend Trader Bands Backtest", overlay = true)
Length = input(21, minval=1),
LengthMA = input(21, minval=1),
BandStep = input(20),
Multiplier = input(3, minval=1)
reverse = input(false, title="Trade reverse")
avgTR      = wma(atr(1), Length)
highestC   = highest(Length)
lowestC    = lowest(Length)
hiLimit = highestC[1]-(avgTR[1] * Multiplier)
loLimit = lowestC[1]+(avgTR[1] * Multiplier)
ret = 0.0
ret :=  iff(close > hiLimit and close > loLimit, hiLimit,
         iff(close < loLimit and close < hiLimit, loLimit, nz(ret[1], 0)))
nResMA = ema(ret, LengthMA)        
pos = 0.0
pos := iff(close < nResMA - BandStep , -1,
       iff(close > nResMA + BandStep, 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 ) 
barcolor(pos == -1 ? red: pos == 1 ? green : blue )
plot(nResMA, color= blue , title="Trend Trader AVR")
plot(nResMA+BandStep, color= red , title="Trend Trader UpBand")
plot(nResMA-BandStep, color= green, title="Trend Trader DnBand")

Больше