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

HMA оптимизирует многоциклическую стратегию количественной торговли в сочетании с динамическими остановками

Автор:Чао Чжан, Дата: 2024-07-31 11:28:09
Тэги:HMAEHMATHMAWMAЕМАSMA

HMA优化多周期量化交易策略与动态止损结合

Обзор

В статье представлена оптимизированная квантовая стратегия торговли, основанная на Hull Moving Average (HMA), которая сочетает в себе многоциклический анализ и механизм динамического остановки. Эта стратегия была улучшена на основе известного Hull Suite, и добавлена команда "strategy.exit" из v5 PineScript для реализации "trailing stop" или "delay trailing stop". Стратегия использует быстро реагирующие свойства HMA для улавливания рыночных тенденций, а также для повышения надежности сигналов посредством анализа нескольких временных циклов.

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

  1. Hull Moving Average (HMA): в основе стратегии лежит использование HMA и его вариантов (EHMA и THMA) для выявления рыночных тенденций. HMA имеет более быструю скорость реагирования и меньшую задержку по сравнению с традиционными движущимися средними.

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

  3. Динамическая остановка убытков: стратегия использует механизм trailing stop, который активируется после того, как прибыль достигнет определенного показателя, что позволяет эффективно блокировать прибыль и контролировать риск.

  4. Контроль времени торговли: политика позволяет пользователю определять определенные временные рамки торговли, что помогает избежать торговли в периоды с низкой или недостаточной волатильностью.

  5. Управление направлением: стратегия предоставляет опции выбора направления торговли (большой, небольшой или двусторонний), что позволяет ей адаптироваться к различным рыночным условиям и стилям торговли.

Стратегические преимущества

  1. Гибкость: стратегия позволяет пользователям выбирать различные варианты Hull Moving Average (HMA, EHMA, THMA) для адаптации к различным рыночным условиям.

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

  3. Сильная адаптивность: методы многоциклического анализа позволяют стратегии адаптироваться к различным рыночным условиям и уменьшить влияние ложных сигналов.

  4. Хорошая визуализация: Стратегия предоставляет множество вариантов визуализации, таких как цветно-кодированные HMA-рисунковые диаграммы, которые помогают трейдерам более интуитивно понять тенденции рынка.

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

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

  1. Превышение торговли: из-за HMA, основанной на быстром реагировании на стратегию, может возникнуть слишком много ложных сигналов на кристаллическом рынке, что приводит к переоценке торговли.

  2. Риск скольжения: Стратегия, использующая скальпинг, может иметь более высокий риск скольжения, особенно на рынках с низкой ликвидностью.

  3. Параметрочувствительность: производительность стратегии сильно зависит от параметров, а неправильные параметры могут привести к плохой работе стратегии.

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

  5. Технологическая зависимость: выполнение стратегии зависит от стабильного сетевого соединения и платформы для торговли, а технические сбои могут привести к значительным потерям.

Оптимизация стратегии

  1. Увеличение показателей настроения рынка: в сочетании с такими показателями настроения рынка, как VIX, опционы с подразумеваемым уровнем волатильности, можно помочь стратегии лучше адаптироваться к различным рыночным условиям.

  2. Внедрение алгоритмов машинного обучения: использование технологий машинного обучения для динамической корректировки параметров HMA и уровня остановки может повысить адаптивность стратегии.

  3. Увеличение анализа объема сделок: в сочетании с данными объема сделок можно повысить точность суждений о тенденциях и уменьшить убытки от ложных прорывов.

  4. Оптимизировать выбор временных рамок: найти оптимальные многоциклические аналитические настройки путем ретрансляции комбинаций различных временных рамок.

  5. Внедрение рискованного паритета: использование рискованного паритета при распределении капитала в многовариантных сделках позволяет лучше контролировать риск в общем портфеле.

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

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


/*backtest
start: 2023-07-25 00:00:00
end: 2024-07-30 00:00:00
period: 1d
basePeriod: 1h
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/
// © anotherDAPTrader

//Based upon Hull Suite by InSilico and others//
//with SCALP exit//

//@version=5
strategy('DAP Hull Sweet Scalp v1 Strategy', overlay=true)

// Session //

session = input(title='Session (Goes flat at end of session!)', defval='1800-1700')

//Check if it's in session//

is_session(session) =>
    not na(time(timeframe.period, session))

//Call the function
Session = is_session(session)

//Start and end of the session
start = Session and not Session[1]
end = not Session and Session[1]

//Plot the background color to see the session
bgcolor(Session ? color.new(color.white, 0) : na)

// trade directions //

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)

src = close

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)


// Scalp //

slPoints = input.int(title='Profit Points Before Stop', minval=0, maxval=1000, step=1, defval=1, confirm=false)

slOffset = input.int(title='Then Trailing Stop Loss of ', minval=1, maxval=1000, step=1, defval=1, confirm=false)

//trades//

// Long Entry Function//

if Session and ta.crossover(HULL[0] , HULL[2])
    strategy.entry('long', strategy.long)
    strategy.exit('trailing stop', from_entry='long', trail_points=slPoints, trail_offset=slOffset)

// Short Entry Function//

if Session and ta.crossunder(HULL[0] , HULL[2])
    strategy.entry('short', strategy.short)
    strategy.exit('trailing stop', from_entry='short', trail_points=slPoints, trail_offset=slOffset)

if end
    strategy.close_all("End of Session - Go FLat")


Содержание

Больше информации