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

VWMA HMA BB MTF RSI
Дата создания: 2024-11-29 17:00:00 Последнее изменение: 2024-11-29 17:00:00
Копировать: 0 Количество просмотров: 507
1
Подписаться
1617
Подписчики

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

Обзор

Стратегия является торговой системой, основанной на анализе с использованием нескольких временных рамок, в сочетании с генерированием сигналов для торговли в Bollinger Bands, Hull Moving Averages и Weighted Moving Averages. Стратегия работает в основном на 1-часовых временных рамках, а также объединяет рыночные данные за 5 минут, 1 час и 3 часа в течение трех временных периодов, чтобы подтвердить торговые возможности с помощью комбинации нескольких технических показателей.

Стратегический принцип

Основная логика стратегии основана на перекрестном подтверждении нескольких технических показателей. Одновременно на нескольких временных периодах отслеживается связь цены с различными типами равномерных линий, включая весомые подвижные средние для 5-минутного периода (VWMA), весомые подвижные средние для 1-часового периода и Hull Moving Average для 3-часового периода (HMA).

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

  1. Анализ нескольких временных циклов снижает риск ложных прорывов и повышает надежность торговых сигналов
  2. Динамические настройки стоп-стоп, адаптирующиеся к различным рыночным условиям
  3. Управление позициями на основе учетных записей гарантирует рациональность использования средств
  4. Выбор различных механизмов выхода из игры увеличивает адаптивность стратегии.
  5. Графический интерфейс обеспечивает четкое отображение торговых сигналов, облегчает анализ и суждение
  6. Интеграция нескольких усовершенствованных технических показателей для повышения точности принятия решений в торговле

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

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

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

  1. Внедрение индикаторов волатильности для динамической корректировки уровней тейк-профита и стоп-лосса
  2. Добавление функции распознавания рыночных условий, использование различных параметров в различных рыночных состояниях
  3. Оптимизация механизма фильтрации сигналов, снижение потерь от ложных прорывов
  4. Добавление анализа объемов сделок для повышения надежности прорывного сигнала
  5. Разработка адаптивных механизмов оптимизации параметров для повышения устойчивости стратегий

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

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

Исходный код стратегии
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("1H- 280, 2.7", overlay=true)


// Fetch the indicator values from different timeframes
vwma5 = request.security(syminfo.tickerid, "5", ta.wma(close, 233), lookahead = barmerge.lookahead_off)
vwma_hourly = request.security(syminfo.tickerid, "60", ta.wma(close, 89), lookahead = barmerge.lookahead_off)
hullma155_3h = request.security(syminfo.tickerid, "180", ta.hma(close, 155), lookahead = barmerge.lookahead_off)


// Calculate the deviation value
deviation = close * 0.032


// Initialize the signal variables
var float signalLine = na
var color lineColor = na


// Long Entry Conditions
longCondition_5min = close > vwma5
longCondition_hourly = close > vwma_hourly
longCondition_3h = close > hullma155_3h


// Short Entry Conditions
shortCondition_5min = close < vwma5
shortCondition_hourly = close < vwma_hourly
shortCondition_3h = close < hullma155_3h


// Long Entry
if longCondition_5min and longCondition_hourly and longCondition_3h
    signalLine := close + deviation
    lineColor := color.rgb(0, 255, 0, 1)


// Short Entry
if shortCondition_5min and shortCondition_hourly and shortCondition_3h
    signalLine := close - deviation
    lineColor := color.rgb(255, 0, 0, 1)


// Plotting the connecting line
plot(signalLine, title="Signal Line", color=lineColor, linewidth=1, style=plot.style_line)


// Colorize the signal line
bgcolor(signalLine > close ? color.rgb(0, 255, 0, 99) : color.rgb(255, 0, 0, 99), transp=90)



// Strategy settings
useTPSL = input(true, "Use TP/SL for closing long positions?")
useDownbreakOutbreak = input(false, "Use Downbreak and Outbreak for closing positions?")
useM7FClosing = input(false, "Use M7F Signal for closing positions?")


length1 = input.int(280, minval=1)
src = input(close, title="Source")
mult = input.float(2.7, minval=0.001, maxval=50, title="StdDev")


basis = ta.vwma(src, length1)
dev = mult * ta.stdev(src, length1)
upper = basis + dev
lower = basis - dev


offset = input.int(0, "Offset", minval = -500, maxval = 500)


length2 = input.int(55, minval=1)
src2 = input(close, title="Source")
hullma = ta.wma(2 * ta.wma(src2, length2 / 2) - ta.wma(src2, length2), math.floor(math.sqrt(length2)))


hullmacrosslower = ta.crossover(hullma, lower)
hullmacrossupper = ta.crossunder(hullma, upper)


breakout = ta.crossover(ohlc4, upper)
breakdown = ta.crossunder(ohlc4, upper)
outbreak = ta.crossover(ohlc4, lower)
downbreak = ta.crossunder(ohlc4, lower)


// Calculate position size and leverage
margin_pct = 1
leverage = 1
position_size = strategy.equity * margin_pct
qty = position_size / close / leverage


// Define take profit and stop loss levels
take_profit = 0.14
stop_loss = 0.06


// Opening a long position
if breakout
    strategy.entry("Long", strategy.long, qty, limit=close*(1+take_profit), stop=close*(1-stop_loss))


// Opening a short position
if downbreak
    strategy.entry("Short", strategy.short, qty, limit=close*(1-take_profit), stop=close*(1+stop_loss))


// Closing positions based on chosen method
if useTPSL
    // Using TP/SL for closing long positions
    if strategy.position_size > 0 and breakdown
        strategy.close("Long", comment="Breakdown")
else if useDownbreakOutbreak
    // Using Downbreak and Outbreak for closing positions
    if strategy.position_size > 0 and (breakdown or downbreak)
        strategy.close("Long", comment="Breakdown")
    if strategy.position_size < 0 and (outbreak or downbreak)
        strategy.close("Short", comment="Outbreak")
else if useM7FClosing
    // Using M7F Signal for closing positions
    if strategy.position_size > 0 and (signalLine < close)
        strategy.close("Long", comment="M7F Signal")
    if strategy.position_size < 0 and (signalLine > close)
        strategy.close("Short", comment="M7F Signal")


// Plotting entry signals
plotshape(hullmacrosslower, title="High Bear Volatility", style=shape.arrowup, text="^^^^^", color=color.rgb(75, 202, 79), location=location.belowbar)
plotshape(hullmacrossupper, title="High Bull Volatility", style=shape.arrowdown, text="-----", color=color.rgb(215, 72, 72), location=location.abovebar)
plotshape(breakout ? 1 : na, title="Breakout", style=shape.arrowup, text="", color=color.rgb(75, 202, 79), location=location.belowbar, size=size.tiny)
plotshape(breakdown ? 1 : na, title="Breakdown", style=shape.arrowdown, text="", color=color.rgb(201, 71, 71), location=location.abovebar, size=size.tiny)
plotshape(outbreak ? 1 : na, title="Outbreak", style=shape.arrowup, text="", color=color.rgb(0, 110, 255), location=location.belowbar, size=size.tiny)
plotshape(downbreak ? 1 : na, title="Downbreak", style=shape.arrowdown, text="", color=color.rgb(255, 111, 0), location=location.abovebar, size=size.tiny)