Тенденционная стратегия, основанная на полосах Боллинджера, RSI и скользящей средней

Автор:Чао Чжан, Дата: 2024-02-02 11:35:17
Тэги:

img

Обзор

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

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

Стратегия использует две полосы Боллинджера с разными параметрами для создания ценовых каналов. Параметры по умолчанию составляют длину 20 периодов и стандартное отклонение 2. Верхние и нижние полосы служат динамическим уровнем сопротивления и поддержки.

Индикатор RSI измеряет силу импульса цен. Его значения используются для определения наличия условий перекупа или перепродажи.

Движущаяся средняя за 50 периодов используется для определения общего направления тренда. Когда цена выше MA, она указывает на восходящий тренд. Когда цена ниже MA, она указывает на нисходящий тренд.

Условия входа для длинных сделок - это когда RSI выходит выше уровня перекупленности, а полосы Боллинджера не сокращаются.

Условия выхода для длинных сделок заключаются в том, что RSI падает ниже уровня перекупа или когда цена закрывается ниже 50-периодного MA. Для коротких сделок это когда RSI поднимается выше уровня перепродажи или когда цена закрывается выше 50-периодного MA.

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

  1. Объединение полос Боллинджера, RSI и MA позволяет избежать создания ложных сигналов посредством перекрестного подтверждения сигналов.

  2. Bollinger Bands определяет местные максимумы / минимумы и подтверждает прорывы. RSI фильтрует ложные прорывы. MA определяет общий тренд. Сигналы проверяются.

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

Риски

  1. Показатель RSI также нейтрален и следует избегать торговли.

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

  3. Разрывы в ценах не могут быть эффективно устранены.

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

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

  2. Добавьте ордеры стоп-лосса, которые автоматически запускаются при нарушении уровня стоп-лосса.

  3. Добавьте трендовый фильтр, такой как ADX, чтобы избежать неэффективных сделок на рыночных рынках.

  4. Интегрируется с автоматизированной торговой системой для автоматического исполнения сигналов без ручного вмешательства.

Заключение

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


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

//@version=5
strategy("Bollinger Bands, RSI, and MA Strategy", overlay=true)

// Define input variables
b_len = input(20, title="BB Length")
bb_mult = input(2.0, title="BB Standard Deviation")
bb_deviation1 = input(1.0, title="BB Deviation 1")
rsi_len = input(14, title="RSI Length")
overbought = input(70, title="Overbought RSI Level")
oversold = input(30, title="Oversold RSI Level")
ma_len = input(50, title="MA Length")
stop_loss_percent = input(1.0, title="Stop Loss Percentage")
source = input(close, title="Source")

// Calculate Bollinger Bands
bb_upper = ta.sma(source, b_len) + bb_mult * ta.stdev(source, b_len)
bb_lower = ta.sma(source, b_len) - bb_mult * ta.stdev(source, b_len)
bb_upper1 = ta.sma(source, b_len) + bb_deviation1 * ta.stdev(source, b_len)
bb_lower1 = ta.sma(source, b_len) - bb_deviation1 * ta.stdev(source, b_len)

// Calculate RSI
rsi = ta.rsi(source, rsi_len)

// Calculate Moving Average
ma = ta.sma(source, ma_len)

// Determine if Bollinger Bands are contracting
bb_contracting = ta.stdev(source, b_len) < ta.stdev(source, b_len)[1]

// Entry conditions
enterLong = rsi > overbought and not bb_contracting
enterShort = rsi < oversold and not bb_contracting

// Exit conditions
exitLong = close < ma
exitShort = close > ma

// Exit trades and generate alerts
if strategy.position_size > 0 and exitLong
    strategy.close("Long") // Exit the long trade
    alert("Long Exit", alert.freq_once_per_bar_close)
if strategy.position_size < 0 and exitShort
    strategy.close("Short") // Exit the short trade
    alert("Short Exit", alert.freq_once_per_bar_close)

// Strategy orders
if enterLong
    strategy.entry("Long", strategy.long)
if enterShort
    strategy.entry("Short", strategy.short)
if exitLong
    strategy.close("Long")
if exitShort
    strategy.close("Short")

// Plotting Bollinger Bands
plot(bb_upper, color=color.blue, title="BB Upper 2")
plot(bb_lower, color=color.blue, title="BB Lower 2")
plot(bb_upper1, color=color.red, title="BB Upper 1")
plot(bb_lower1, color=color.red, title="BB Lower 1")

// Plotting RSI
plot(rsi, color=color.orange, title="RSI")

// Plotting Moving Average
plot(ma, color=color.green, title="Moving Average")


Больше