Количественная стратегия торговли, основанная на полосах Боллинджера и RSI

Автор:Чао Чжан, Дата: 2023-12-20 15:39:19
Тэги:

img

Обзор

Эта стратегия разрабатывает количественную торговую стратегию, основанную на полосах Боллинджера и индексе относительной силы (RSI). Она сочетает в себе отслеживание тренда и суждение о перекуплении / перепродаже, чтобы войти на рынок в начале тренда и выйти на уровне перекупления / перепродажи для получения прибыли.

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

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

Конкретные правила торговли таковы: идти длинным, когда цена ниже нижней полосы Боллинджера, а RSI ниже 30; идти коротким, когда цена выше верхней полосы Боллинджера, а RSI выше 70. Для получения прибыли установите среднюю полосу Боллинджера или противоположную полосу Боллинджера как уровень получения прибыли. Стоп-лосс устанавливается на определенном проценте от цены входа.

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

Стратегия сочетает в себе Bollinger Bands способность отслеживать тренд и RSI перекупленный/перепроданный суждение, чтобы захватить хорошее время начала тренда.

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

Риски

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

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

Оптимизация параметров рекомендуется для оценки уровня получения прибыли/остановки убытков и эффективности различных активов и рыночных режимов.

Руководство по оптимизации

Некоторые аспекты могут быть улучшены:

  1. Оценка и оптимизация параметров для полос Боллинджера и RSI для лучшего соответствия характеристикам инструментов торговли

  2. Включить дополнительные показатели, такие как KDJ, MACD, чтобы построить многофакторную модель

  3. Оценить стратегии получения прибыли/остановки потерь, такие как отставание стоп-лосса или масштабированный выход

  4. Проведение динамической настройки параметров на основе конкретных активов и рыночных условий

  5. Добавление моделей машинного обучения для оценки качества сигнала и уровня риска

Резюме

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


/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("BB + RSI Estrategia", overlay=true)

longitud = input(20, title="Longitud BB", minval=5, maxval=50, step=1)
multiplicador = input(2.0, title="Multiplicador BB", type=input.float, step=0.1)
timeframe_bb = input("D", title="Marco de Tiempo BB", type=input.resolution)
rsi_length = input(14, title="Longitud RSI", minval=5, maxval=50, step=1)
rsi_overbought = input(70, title="Nivel de sobrecompra RSI", minval=50, maxval=80, step=1)
rsi_oversold = input(30, title="Nivel de sobreventa RSI", minval=20, maxval=50, step=1)
take_profit = input("Central", title="Take Profit (banda)", options=["Central", "Opuesta"])
stop_loss = input(2.00, title="Stop Loss", type=input.float, step=0.10)

var SL = 0.0

[banda_central, banda_superior, banda_inferior] = security(syminfo.tickerid, timeframe_bb, bb(close, longitud, multiplicador))
rsi_value = rsi(close, rsi_length)

comprado = strategy.position_size > 0
vendido = strategy.position_size < 0

if not comprado and not vendido
    if close < banda_inferior and rsi_value < rsi_oversold
        // Realizar la compra
        cantidad = round(strategy.equity / close)
        strategy.entry("Compra", strategy.long, qty=cantidad, when=cantidad > 0)
        SL := close * (1 - (stop_loss / 100))

    if close > banda_superior and rsi_value > rsi_overbought
        // Realizar la Venta
        cantidad = round(strategy.equity / close)
        strategy.entry("Venta", strategy.short, qty=cantidad, when=cantidad > 0)
        SL := close * (1 + (stop_loss / 100))

if comprado
    // Verificar el take profit
    if take_profit == "Central" and close >= banda_central
        strategy.close("Compra", comment="TP")
        SL := 0

    if take_profit == "Opuesta" and close >= banda_superior
        strategy.close("Compra", comment="TP")
        SL := 0
    // Verificar el stop loss
    if close <= SL
        strategy.close("Compra", comment="SL")
        SL := 0

if vendido
    // Verificar el take profit
    if take_profit == "Central" and close <= banda_central
        strategy.close("Venta", comment="TP")
        SL := 0

    if take_profit == "Opuesta" and close <= banda_inferior
        strategy.close("Venta", comment="TP")
        SL := 0
    // Verificar el Stop loss
    if close >= SL
        strategy.close("Venta", comment="SL")
        SL := 0

// Salida
plot(SL > 0 ? SL : na, style=plot.style_circles, color=color.red)
g1 = plot(banda_superior, color=color.aqua)
plot(banda_central, color=color.red)
g2 = plot(banda_inferior, color=color.aqua)
fill(g1, g2, color=color.aqua, transp=97)

// Dibujar niveles de sobrecompra/sobreventa del RSI
hline(rsi_overbought, "RSI Overbought", color=color.red)
hline(rsi_oversold, "RSI Oversold", color=color.green)

Больше