
В данной статье представлена стратегия оптимизированной количественной торговли на основе Hull Moving Average (HMA), которая сочетает в себе многоциклический анализ и динамический стоп-механизм. Эта стратегия была улучшена на основе известного Hull Suite, добавив в PineScript v5 команду “strategy.exit (() ” для осуществления стоп-трейлинга или задержки стоп-трейлинга. Стратегия в основном использует характеристики быстрого реагирования HMA для захвата рыночных тенденций, а также повышает надежность сигнала путем анализа на протяжении нескольких циклических периодов времени.
Hull Moving Average (HMA): в основе стратегии лежит использование HMA и его вариантов (EHMA и THMA) для выявления рыночных тенденций. HMA обладает более быстрой реакцией и меньшей задержкой по сравнению с традиционными движущимися средними.
Многоциклический анализ: стратегия для создания торговых сигналов, сравнивая HMA с различными временными периодами. Этот метод может уменьшить ложные сигналы и повысить точность торгов.
Динамический стоп: стратегия использует механизм trailing stop, который активируется после того, как прибыль достигнет определенного количества пунктов, чтобы эффективно блокировать прибыль и контролировать риск.
Контроль времени торговли: стратегия позволяет пользователям определять конкретные периоды торговли, что помогает избежать торговли в периоды низкой волатильности или недостаточной ликвидности.
Управление направлением: стратегия предоставляет возможность выбора направления торговли (до, до или в обоих направлениях), что позволяет ей адаптироваться к различным рыночным условиям и стилям торговли.
Гибкость: стратегия позволяет пользователям выбирать различные варианты Hull Moving Averages (HMA, EHMA, THMA) для различных рыночных условий.
Управление рисками: благодаря использованию динамического механизма остановки убытков, стратегия позволяет ограничить потенциальные потери при одновременной защите прибыли.
Адаптируемость: методы многоциклического анализа позволяют стратегии адаптироваться к различным рыночным условиям, уменьшая влияние ложных сигналов.
Хорошая визуализация: стратегия предлагает множество вариантов визуализации, таких как цветные кодированные полосы HMA, которые помогают трейдерам более интуитивно понимать тенденции рынка.
Высокая степень автоматизации: стратегия может быть полностью автоматизирована, что снижает вероятность человеческих эмоциональных воздействий и операционных ошибок.
Слишком много торгов: из-за стратегии, основанной на быстром реагировании HMA, может быть создано слишком много ложных сигналов на горизонтальном рынке, что приводит к чрезмерной торговле.
Риск скольжения: стратегия, использующая технологию скальпинга, может иметь более высокий риск скольжения, особенно на рынках с низкой ликвидностью.
Чувствительность к параметрам: эффективность стратегии сильно зависит от параметров, неправильные параметры могут привести к плохой работе стратегии.
Изменение рыночных условий: при резких изменениях рыночных условий стратегии могут потребоваться переоптимизация параметров, чтобы оставаться эффективными.
Технологическая зависимость: реализация стратегии зависит от стабильных сетевых связей и торговой платформы, технические сбои могут привести к значительным потерям.
Повышение показателей рыночной сентиментальности: в сочетании с такими показателями рыночной сентиментальности, как VIX, опционы и имплицитная волатильность, может помочь стратегии лучше адаптироваться к различным рыночным условиям.
Внедрение алгоритмов машинного обучения: использование технологий машинного обучения для динамической корректировки параметров HMA и уровня остановочных потерь может повысить адаптивность стратегии.
Увеличение анализа объема торгов: объединение данных объема торгов может повысить точность определения тенденций и уменьшить потери от ложных прорывов.
Оптимизация выбора временных рамок: поиск оптимальной многоциклической аналитической настройки путем отслеживания различных комбинаций временных рамок.
Внедрение метода выравнивания риска: распределение средств в рамках метода выравнивания риска в многообразных сделках позволяет лучше контролировать риск в целом портфеле.
HMA оптимизирует многоциклическую количественную торговую стратегию в сочетании с динамическим остановкой. Это гибкая, эффективная торговая система. Она предоставляет трейдерам всестороннее решение для количественной торговли, объединяя быстро реагирующие характеристики Hull Moving Averages, стабильность многоциклического анализа и контроль риска динамического остановки. Хотя эта стратегия отлично работает на быстро меняющихся рынках, она требует от трейдеров внимательного внимания к изменению рыночных условий и своевременной корректировки параметров, чтобы сохранить ее эффективность.
/*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")