Стратегия торговли парой MCL-YG Bollinger Band Breakout

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

img

Обзор

Эта стратегия использует прорывы полосы Боллинджера для генерации торговых сигналов и реализации пары торговли между двумя положительно коррелирующими активами MCL и YG. Она длинная MCL и короткая YG, когда цена MCL касается верхней полосы, и короткая MCL и длинная YG, когда цена MCL касается нижней полосы, для торговли вдоль ценового тренда.

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

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

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

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

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

  1. Брейк-трейдинг на основе полос Боллинджера может эффективно фильтровать рыночный шум и выявлять тенденции
  2. Торговля парами на коррелирующих активах может получить альфа-доходность от ценовой дивергенции
  3. Динамическое размещение позиций помогает контролировать риск для отдельных сделок
  4. Стандартная логика входа и выхода отмены делает логику стратегии простой и понятной

Риски

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

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

Возможности оптимизации

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

Резюме

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


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © shark792

//@version=5

// 1. Define strategy settings
strategy(title="MCL-YG Pair Trading Strategy", overlay=true,
     pyramiding=0, initial_capital=10000,
     commission_type=strategy.commission.cash_per_order,
     commission_value=4, slippage=2)

smaLength = input.int(title="SMA Length", defval=20)
stdLength = input.int(title="StdDev Length", defval=20)

ubOffset = input.float(title="Upper Band Offset", defval=1, step=0.5)
lbOffset = input.float(title="Lower Band Offset", defval=1, step=0.5)

usePosSize = input.bool(title="Use Position Sizing?", defval=true)
riskPerc   = input.float(title="Risk %", defval=0.5, step=0.25)


// 2. Calculate strategy values
smaValue = ta.sma(close, smaLength)
stdDev   = ta.stdev(close, stdLength)

upperBand = smaValue + (stdDev * ubOffset)
lowerBand = smaValue - (stdDev * lbOffset)

riskEquity  = (riskPerc / 100) * strategy.equity
atrCurrency = (ta.atr(20) * syminfo.pointvalue)
posSize     = usePosSize ? math.floor(riskEquity / atrCurrency) : 1


// 3. Output strategy data
plot(series=smaValue, title="SMA", color=color.teal)

plot(series=upperBand, title="UB", color=color.green,
     linewidth=2)
plot(series=lowerBand, title="LB", color=color.red,
     linewidth=2)


// 4. Determine long trading conditions
enterLong = ta.crossover(close, upperBand)
exitLong  = ta.crossunder(close, smaValue)


// 5. Code short trading conditions
enterShort = ta.crossunder(close, lowerBand)
exitShort  = ta.crossover(close, smaValue)


// 6. Submit entry orders
if enterLong
    strategy.entry(id="EL", direction=strategy.long, qty=posSize)

if enterShort
    strategy.entry(id="ES", direction=strategy.short, qty=posSize)


// 7. Submit exit orders
strategy.close(id="EL", when=exitLong)
strategy.close(id="ES", when=exitShort)



Больше