Криптовалютная стратегия Bollinger Bands с несколькими временными рамками

Автор:Чао Чжан, Дата: 2024-02-27 14:13:39
Тэги:

img

Обзор

Эта стратегия применяет индикатор Болинджерских полос в течение 1 минуты, 3 минуты, 5 минут и 15 минут для анализа движения цен криптовалют с целью выявления возможностей покупки и продажи. Она использует 5-минутные цены Биткоина в качестве ориентира для общего настроения на рынке криптовалют. Когда цена Биткоина превышает верхнюю полосу, рынок считается бычьим. Когда цена превышает нижнюю полосу, рынок считается медвежьим. Стратегия ищет нарушения верхней или нижней полосы в разных крипто и временных рамках. Эти модели нарушения обычно означают сдвиги на рынке и тенденции, тем самым обеспечивая сигналы входа и выхода настроения.

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

Стратегия рассчитывает полосы Боллинджера одновременно на 1-минутных, 3-минутных, 5-минутных и 15-минутных временных рамках. По умолчанию полосы Боллинджера состоят из движущейся средней продолжительностью n дней (по умолчанию 20 дней) и ряда стандартных отклонений (по умолчанию 1.5x) выше и ниже нее. Движущаяся средняя представляет собой среднюю цену криптовалюты за определенный период времени, а стандартное отклонение измеряет волатильность.

Используя эту особенность полос Боллинджера, стратегия оценивает последние рыночные события в разных временных горизонтах - 1 минуту, 3 минуты, 5 минут и 15 минут. Когда в 3-минутных или 5-минутных временных рамках происходит прорыв верхней или нижней полосы, плюс подтверждающие сигналы в 1-минутных и 15-минутных временных рамках, стратегия определяет, что запускается последний сигнал покупки или продажи. Кроме того, стратегия также относится к 5-минутным ценам Биткоина, чтобы оценить общую рыночную тенденцию и настроение (бычий / медвежий уклон) на всем крипторынке.

После входа в сделки, стратегия также устанавливает условия получения прибыли и остановки потери. Если цена входа повышается или падает на 25%, то будет активирована прибыль. Если цена движется более чем на 25% против направления входа, будет активирована остановка потери.

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

  1. Стратегия включает как краткосрочные, так и среднесрочные прогнозы рынка - 1 минуту и 5 минут для последних обновлений, 15 минут для среднесрочной тенденции, чтобы избежать введения в заблуждение временными колебаниями рынка.

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

  3. Биткойн служит ориентиром и барометром для общей рыночной конъюнктуры и настроений, повышая точность принятия решений.

  4. Механизмы получения прибыли и остановки потерь эффективно контролируют риски.

Риски

  1. Прорывы полосы Боллинджера имеют некоторые задержки и могут пропустить лучшее время входа.

  2. Стратегия уязвима к системным рискам на рынке, таким как события с паролями и черными лебедями.

  3. Несмотря на то, что на рынке существуют режим "приобретение прибыли" и "стоп-лосс", убытки могут превышать маржу стоп-лосса при экстремальных ситуациях.

  4. Неправильные параметры, такие как период времени, мультипликатор стандартного отклонения, могут привести к плохому качеству сигнала.

Соответствующие решения:

  1. Включите больше показателей для определения оптимального времени входа.

  2. Улучшить оценку системных рисков на рынке.

  3. Уменьшить размер позиции и маржу стоп-лосса для каждой сделки.

  4. Оптимизируйте параметры с помощью обратного тестирования.

Возможности для расширения

  1. Добавьте больше временных рамок, таких как 30-минутные или 60-минутные полосы Боллинджера.

  2. Выберите параметры Bollinger Bands, более подходящие для характеристик каждого крипто.

  3. Включить объем торгов для проверки результатов, поскольку объемы торгов подтверждают надежность движения цен.

  4. Сочетание других индикаторов, таких как Stoch RSI, MACD для улучшения точности принятия решений.

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

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

Заключение

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


/*backtest
start: 2024-01-27 00:00:00
end: 2024-02-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(shorttitle="Crypto BB", title="Multi-Interval Bollinger Band Crypto Strategy", overlay=true)
length = input.int(20, minval=1)
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = input.float(1.5, minval=0.001, maxval=50, title="StdDev")

interval1m = request.security(syminfo.tickerid, '1', src)
interval3m = request.security(syminfo.tickerid, '3', src)
interval5m = request.security(syminfo.tickerid, '5', src)
interval15m = request.security(syminfo.tickerid, '5', src)
btcinterval5m = request.security("BTC_USDT:swap", "5", src)
bitcoinSignal = 'flat'

var entryPrice = 0.000

ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

bitcoinBasis = ma(btcinterval5m, length, maType)
bitcoinDev = ta.stdev(btcinterval5m, length)
bitcoinUpper = bitcoinBasis + bitcoinDev
bitcoinLower = bitcoinBasis - bitcoinDev

basis1m = ma(interval1m, length, maType)
basis3m = ma(interval3m, length, maType)
basis5m = ma(interval5m, length, maType)
basis15m = ma(interval5m, length, maType)
dev1m = mult * ta.stdev(interval1m, length)
dev3m = mult * ta.stdev(interval3m, length)
dev5m = mult * ta.stdev(interval5m, length)
upper1m = basis1m + dev1m
lower1m = basis1m - dev1m
upper3m = basis3m + dev3m
lower3m = basis3m - dev3m
upper5m = basis5m + dev5m
lower5m = basis5m - dev5m
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis3m, "Basis 3 minute", color=#2962FF, offset = offset)
p3upper = plot(upper3m, "Upper", color=#2962FF, offset = offset)
p3lower = plot(lower3m, "Lower", color=#2962FF, offset = offset)

//Exit protocols
if strategy.opentrades != 0 and strategy.opentrades.entry_id(0) == 'Buy'
    entryPrice := strategy.opentrades.entry_price(0)
    if ((interval1m - entryPrice)/entryPrice) * 30 > .25
        strategy.close('Buy', comment='Take Profit on Buy')
    if ((interval1m - entryPrice)/entryPrice) * 30 < -.25
        strategy.close('Buy', comment='Stop Loss on Buy')

if strategy.opentrades != 0 and strategy.opentrades.entry_id(0) == 'Sell'
    entryPrice := strategy.opentrades.entry_price(0)
    if ((entryPrice - interval1m)/entryPrice) * 30 > .25
        strategy.close('Sell', comment='Take Profit on Sell')
    if ((entryPrice - interval1m)/entryPrice) * 30 < -.25
        strategy.close('Sell', comment='Stop Loss on Sell')

//Bitcoin Analysis
if (btcinterval5m < bitcoinUpper and btcinterval5m[1] > bitcoinUpper[1] and btcinterval5m[2] < bitcoinUpper[2] and btcinterval5m[3] < bitcoinUpper[3])
    bitcoinSignal := 'Bear'
if (btcinterval5m > bitcoinUpper and btcinterval5m[1] < bitcoinUpper[1] and btcinterval5m[2] > bitcoinUpper[2] and btcinterval5m[3] > bitcoinUpper[3])
    bitcoinSignal := 'Bull'

//Short protocols
if (interval3m < basis3m and interval3m[1] > basis3m[1] and interval3m[2] < basis3m[2] and interval3m[3] < basis3m[3]) or 
 (interval5m < basis5m and interval5m[1] > basis5m[1] and interval5m[2] < basis5m[2] and interval5m[3] < basis5m[3]) 
  and strategy.opentrades.entry_id(0) != 'Sell'
   and src < basis1m and src < basis15m
    if strategy.opentrades.entry_id(0) == 'Buy'
        strategy.close('Buy', 'Basis Band Bearish Reversal')
    //strategy.order('Sell', strategy.short, comment = 'Basis band fractal rejection', stop = (upper1m + basis1m)/2)

if (interval3m < upper3m and interval3m[1] > upper3m[1] and interval3m[2] < upper3m[2] and interval3m[3] < upper3m[3]) or 
 (interval5m < upper5m and interval5m[1] > upper5m[1] and interval5m[2] < upper5m[2] and interval5m[3] < upper5m[3]) 
  and strategy.opentrades.entry_id(0) != 'Sell' and bitcoinSignal == 'Bear' and src < upper1m  and src < basis15m
    if strategy.opentrades.entry_id(0) == 'Buy'
        strategy.close('Buy', 'Bearish Trend Reversal')
    strategy.order('Sell', strategy.short, comment = 'Upper band fractal rejection', stop = (upper1m + basis1m)/2)

if (interval3m > basis3m and interval3m[1] < basis3m[1] and interval3m[2] > basis3m[2] and interval3m[3] > basis3m[3]) or 
 (interval5m > basis5m and interval5m[1] < basis5m[1] and interval5m[2] > basis5m[2] and interval5m[3] > basis5m[3]) and strategy.opentrades.entry_id(0) != 'Buy' 
  and src > basis1m  and src > basis15m
    if strategy.opentrades.entry_id(0) == 'Sell'
        strategy.close('Sell', 'Basis Band Bullish Reversal')
    //strategy.order('Buy', strategy.long, comment = 'Basis band fractal rejection', stop = (lower1m + basis1m)/2)

if (interval3m > lower3m and interval3m[1] < lower3m[1] and interval3m[2] > lower3m[2] and interval3m[3] > lower3m[3]) or 
 (interval5m > lower5m and interval5m[1] < lower5m[1] and interval5m[2] > lower5m[2] and interval5m[3] > basis5m[3]) and strategy.opentrades.entry_id(0) != 'Buy' 
  and src > lower1m  and src > basis15m and bitcoinSignal == 'Bull' 
    if strategy.opentrades.entry_id(0) == 'Sell'
        strategy.close('Sell', 'Bullish Trend Reversal')
    strategy.order('Buy', strategy.long, comment = 'Lower band fractal rejection', stop = (lower1m + basis1m)/2)

Больше