Стратегия торговли с использованием динамической скользящей средней


Дата создания: 2023-12-21 11:33:50 Последнее изменение: 2023-12-21 11:33:50
Копировать: 1 Количество просмотров: 736
1
Подписаться
1623
Подписчики

Стратегия торговли с использованием динамической скользящей средней

Обзор

Эта стратегия объединяет преимущества динамического индикатора и движущейся средней для отслеживания среднесрочных тенденций цен на акции и достижения стабильной прибыли.

Принципы

Стратегия основана на трёх вариантах Hull Moving Average, включая обычную Hull Moving Average (HMA), взвешенную Hull Moving Average (WHMA) и индексированную Hull Moving Average (EHMA). Согласно коду, стратегия позволяет пользователю переключаться между тремя типами Hull MA.

Формула расчета HMA:

HMA = WMA(2*WMA(close,n/2)-WMA(close,n),sqrt(n))

Среди них WMA представляет собой весовую скользящую среднюю, n представляет собой циклический параметр. HMA реагирует на изменения цены быстрее, чем SMA (простая скользящая средняя).

Формулы расчета WHMA и EHMA аналогичны HMA. Политика HMA является опцией по умолчанию.

После вычисления HMA, стратегия использует цену средней линии HMA в качестве торгового сигнала. Когда цена пересекает среднюю линию HMA, она делает дополнительный вход; когда цена пересекает среднюю линию HMA, она делает вывод. Таким образом, она использует среднюю линию HMA, чтобы отслеживать среднесрочную тенденцию цены и получать прибыль.

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

По сравнению с традиционной стратегией скользящих средних, эта стратегия имеет следующие преимущества:

  1. Быстрое реагирование, лучшая способность отслеживать тенденции, своевременный вход и остановка убытков
  2. Снижение частоты бессмысленных сделок и избежание “последующих” падений
  3. Гибкая конфигурация параметров Hull MA для более широкого рынка
  4. Возможность переключаться между HMA, WHMA и EHMA, расширяя область применения

Риск

Однако эта стратегия также несет в себе некоторые риски:

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

Ответ:

  1. Оптимизация параметров Hull MA, чтобы найти оптимальное значение
  2. В сочетании с другими показателями можно определить переломный момент.
  3. Выберите акции с высокой ликвидностью и большим среднесуточным оборотом

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

Эта стратегия также может быть оптимизирована в следующих областях:

  1. Увеличение объема сделок или фильтрация других показателей, обеспечивающих надежность торговых сигналов
  2. В сочетании с другими индикаторами, такими как MACD, KDJ и т. Д., для определения времени входа в игру и повышения шансов на победу
  3. Параметры цикла Hull MA, скорректированные с учетом данных резюме на диске
  4. Переключение на WHMA или EHMA для тестирования наиболее эффективных вариантов Hull на конкретных акциях
  5. Повышение стратегии хранения убытков

Подвести итог

Эта стратегия динамического движущегося среднего трейдинга объединяет преимущества быстрого реагирования Hull MA, эффективно отслеживает среднесрочные тенденции цен на акции, делает больше позиций в подходящие моменты и прекращает потери, хорошо работает в исторической ретроспекции. Благодаря дальнейшей оптимизации параметров и выбора диапазона акций эта стратегия может получить более стабильную прибыль. Это количественная стратегия, которую легко реализовать и контролировать риск.

Исходный код стратегии
/*backtest
start: 2022-12-14 00:00:00
end: 2023-12-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Position Investing by SirSeff', overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0)
strat_dir_input = input.string(title='Strategy Direction', defval='long', options=['long', 'short', 'all'])
strat_dir_value = strat_dir_input == 'long' ? strategy.direction.long : strat_dir_input == 'short' ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
//////////////////////////////////////////////////////////////////////
// Testing Start dates
testStartYear = input(2000, 'Backtest Start Year')
testStartMonth = input(1, 'Backtest Start Month')
testStartDay = input(1, 'Backtest Start Day')
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, 'Backtest Stop Year')
testStopMonth = input(12, 'Backtest Stop Month')
testStopDay = input(30, 'Backtest Stop Day')
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)


testPeriod() => true
// Component Code Stop
//////////////////////////////////////////////////////////////////////
//INPUT
src = input(close, title='Source')
modeSwitch = input.string('Hma', title='Hull Variation', options=['Hma', 'Thma', 'Ehma'])
length = input(55, title='Length(180-200 for floating S/R , 55 for swing entry)')
switchColor = input(true, 'Color Hull according to trend?')
candleCol = input(false, title='Color candles based on Hull\'s Trend?')
visualSwitch = input(true, title='Show as a Band?')
thicknesSwitch = input(1, title='Line Thickness')
transpSwitch = input.int(40, title='Band Transparency', step=5)

//FUNCTIONS
//HMA
HMA(_src, _length) =>
    ta.wma(2 * ta.wma(_src, _length / 2) - ta.wma(_src, _length), math.round(math.sqrt(_length)))
//EHMA    
EHMA(_src, _length) =>
    ta.ema(2 * ta.ema(_src, _length / 2) - ta.ema(_src, _length), math.round(math.sqrt(_length)))
//THMA    
THMA(_src, _length) =>
    ta.wma(ta.wma(_src, _length / 3) * 3 - ta.wma(_src, _length / 2) - ta.wma(_src, _length), _length)

//SWITCH
Mode(modeSwitch, src, len) =>
    modeSwitch == 'Hma' ? HMA(src, len) : modeSwitch == 'Ehma' ? EHMA(src, len) : modeSwitch == 'Thma' ? THMA(src, len / 2) : na

//OUT
HULL = Mode(modeSwitch, src, length)
MHULL = HULL[0]
SHULL = HULL[2]

//COLOR
hullColor = switchColor ? HULL > HULL[2] ? #00ff00 : #ff0000 : #ff9800

//PLOT
///< Frame
Fi1 = plot(MHULL, title='MHULL', color=hullColor, linewidth=thicknesSwitch, transp=50)
Fi2 = plot(visualSwitch ? SHULL : na, title='SHULL', color=hullColor, linewidth=thicknesSwitch, transp=50)
///< Ending Filler
fill(Fi1, Fi2, title='Band Filler', color=hullColor, transp=transpSwitch)
///BARCOLOR
barcolor(color=candleCol ? switchColor ? hullColor : na : na)


if HULL[0] > HULL[2] and testPeriod()
    strategy.entry('Invest', strategy.long)
if HULL[0] < HULL[2] and testPeriod()
    strategy.entry('Pause', strategy.short)