Стратегия прорыва Bollinger Bands с использованием RSI

Автор:Чао Чжан, Дата: 2024-02-21 13:59:31
Тэги:

img

Обзор

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

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

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

  2. Включите индикатор RSI для выявления уровней перекупленности / перепродажи. RSI выше 70 предполагает условия перекупленности, а ниже 30 предполагает условия перепродажи. Взлет RSI выше 70 подтверждает ослабление подъемного импульса. Взлет RSI ниже 30 подтверждает ослабление подъемного импульса.

  3. Используйте более высокие временные рамки, чтобы отфильтровать ложные прорывы.

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

  1. Интеграция нескольких индикаторов повышает стабильность и рентабельность стратегии.

  2. Включение RSI уменьшает потери от ложных прорывов.

  3. Многочасовой анализ эффективно отфильтровывает различные рынки и предотвращает попадание в ловушку.

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

  5. Индикатор вихря определяет направление зарождающейся тенденции на ранней стадии.

Риски

  1. Недостаточная параметризация полос Боллинджера приводит к ошибочным сигналам о перекуплении/перепродаже.

  2. Разумные значения параметров RSI должны определяться отдельно для различных продуктов.

  3. Сигналы прорыва могут оказаться ложными.

  4. Поддерживать достаточную маржу стоп-лосса, например, в 3 раза ATR.

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

  1. Применение алгоритмов машинного обучения для автоматической настройки параметров для полос Боллинджера и RSI.

  2. Оптимизировать уровни стоп-лосса на основе показателей волатильности.

  3. Включить модуль размещения позиций для калибровки позиций на основе меняющихся рыночных условий.

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

  5. Оцените стабильность сигнала на разных торговых сеансах.

Заключение

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


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
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/
// © Noway0utstorm
//@version=5
strategy(title='Vortex0.71.3 + bb 3bar breakout + rsi - close hit upper or lower', shorttitle='truongphuthinh', format=format.price, precision=4,overlay = true)

length = input(20, title="Length")
mult = input(2.0, title="Multiplier")
source = close

basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)

upperBand = basis + dev
lowerBand = basis - dev

isClosedBar = ta.change(time("15"))

var bool closeAboveUpperBand = false
var bool closeBelowLowerBand = false


// Vortex Indicator Settings
period_ = input.int(14, title='Period', minval=2)

VMP = math.sum(math.abs(high - low[1]), period_)
VMM = math.sum(math.abs(low - high[1]), period_)
STR = math.sum(ta.atr(1), period_)
VIP = VMP / STR
VIM = VMM / STR

//
lengthrsi = input(14, title="RSI Length")
overboughtLevel = input(70, title="Overbought Level")
oversoldLevel = input(30, title="Oversold Level")

sourcersi = close
rsiValue = ta.rsi(sourcersi, lengthrsi)

shouldShort = rsiValue > overboughtLevel
shouldLong = rsiValue < oversoldLevel




if bool(isClosedBar[1]) and bool(isClosedBar[2]) and bool(isClosedBar[3])

    if close[1] > upperBand[1] and close[2] > upperBand[2] and close[3] > upperBand[3] and VIP > 1.25 and VIM < 0.7 and rsiValue > overboughtLevel
        strategy.entry("Short", strategy.short)
        closeAboveUpperBand := false  // Reset the condition when entering a new Short position
    if close[1] < lowerBand[1] and close[2] < lowerBand[2] and close[3] < lowerBand[3] and VIP < 0.7 and VIM > 1.25 and rsiValue < oversoldLevel
        strategy.entry("Long", strategy.long)
        closeBelowLowerBand := false  // Reset the condition when entering a new Long position



if strategy.position_size > 0  // Check if there is an open Long position
    closeAboveUpperBand := close > upperBand  // Update the condition based on close price
    if closeAboveUpperBand
        strategy.close("Long",disable_alert=true)  // Close the Long position if close price is above upper band

if strategy.position_size < 0  // Check if there is an open Short position
    closeBelowLowerBand := close < lowerBand  // Update the condition based on close price
    if closeBelowLowerBand
        strategy.close("Short",disable_alert=true)  // Close the Short position if close price is below lower band

// Plots
plot(basis, color=color.orange, title="Basis")
p1 = plot(upperBand, color=color.blue, title="Upper Band")
p2 = plot(lowerBand, color=color.blue, title="Lower Band")
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

Больше