Двойная стратегия RSI и полос Боллинджера


Дата создания: 2023-12-12 11:53:49 Последнее изменение: 2023-12-12 11:53:49
Копировать: 0 Количество просмотров: 685
1
Подписаться
1621
Подписчики

Двойная стратегия RSI и полос Боллинджера

Обзор

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

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

Стратегический принцип

В разделе RSI мы одновременно обращаем внимание на два различных цикла RSI, более короткий цикл используется для захвата сигналов о перепродаже, более длинный цикл используется для подтверждения обратного тренда. Когда короткий цикл RSI показывает перепродажу, а длинный цикл RSI показывает обратный тренд, считается, что это создает торговые возможности.

На участке бурин-пояса мы обращаем внимание на то, будет ли цена пробиваться вверх-вниз. Пробивание бурин-пояса вверх-вниз - это точка продажи, а вниз-вниз - точка покупки. В то же время мы также обращаем внимание на то, будет ли цена отклоняться от бурин-пояса, чтобы вовремя уловить возможность поворота.

Когда сигнал RSI и сигнал Brin-band появляются одновременно, мы считаем, что сделка сформировалась, и выпускаем торговые указания.

Анализ преимуществ

  • Фильтрация двойных показателей, высокая надежность, предотвращение излишних сделок
  • Уметь учитывать тенденции и перемены, использовать возможности различных этапов рынка
  • Параметры конфигурируемы, их можно корректировать по мере необходимости
  • Встроенное управление временем и деньгами

Анализ рисков

  • Неправильная настройка параметров пояса Брин может привести к ложному сигналу
  • Невозможность справиться с экстремальными рыночными колебаниями
  • RSI может подавать ошибочные сигналы
  • Необходимо оптимизировать параметры для различных сортов и циклов

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

Направление оптимизации

  • Настройка RSI на оптимизацию перепродажи
  • Регулирование пропускной способности и оптимизация стратегии прорыва
  • Повышение механизма управления позициями
  • Увеличение стратегии по удержанию
  • Многофакторная модель с использованием других показателей

Подвести итог

Двойная стратегия RSI и BRI позволяет использовать преимущества обоих индикаторов для создания высококачественных сигналов, при условии оптимизации параметров и управления рисками.

Исходный код стратегии
/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Ezieh Str.v2", shorttitle="Ezieh Str.v2", overlay=true, pyramiding=10, currency=currency.USD, slippage=3, commission_type=strategy.commission.cash_per_order, commission_value=0.04, initial_capital=1000)



UseDateFilter  = input(title="Enable Date Filter"         ,type=input.bool    ,defval=false                               ,group="Date & Time" ,tooltip="Turns on/off date filter")
StartDate      = input(title="Start Date Filter"          ,type=input.time    ,defval=timestamp("1 Jan 2000 00:00 +0000") ,group="Date & Time" ,tooltip="Date & time to start excluding trades")
EndDate        = input(title="End Date Filter"            ,type=input.time    ,defval=timestamp("1 Jan 2100 00:00 +0000") ,group="Date & Time" ,tooltip="Date & time to stop excluding trades")
UseTimeFilter  = input(title="Enable Time Session Filter" ,type=input.bool    ,defval=false                               ,group="Date & Time" ,tooltip="Turns on/off time session filter")
TradingSession = input(title="Trading Session"            ,type=input.session ,defval="1000-2200:1234567"                 ,group="Date & Time" ,tooltip="No trades will be taken outside of this range")

In(t)      => na(time(timeframe.period, t)) == false
TimeFilter = (UseTimeFilter and not In(TradingSession)) or not UseTimeFilter
DateFilter = time >= StartDate and time <= EndDate

DateTime = (UseDateFilter ? not DateFilter : true) and (UseTimeFilter ? In(TradingSession) : true) 

///////////// RSI
L_RSI_Length     = input(7  , title="L_Length")
L_RSI_OverSold   = input(45 , title="L_OverSold")
S_RSI_Length     = input(14 , title="S_Length")
S_RSI_OverBought = input(65 , title="S_OverBought")

price = close
Lvrsi = rsi(price, L_RSI_Length)
Svrsi = rsi(price, S_RSI_Length)

///////////// Bollinger Bands
BBlength = input(title="Bollinger Period Length", type=input.integer, defval=100, minval=2)
BBmult = 2.1 // input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation")
BBbasis = sma(price, BBlength)
BBdev = BBmult * stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
plot(BBbasis, color=color.aqua,title="Bollinger Bands SMA Basis Line")
p1 = plot(BBupper, color=color.silver,title="Bollinger Bands Upper Line")
p2 = plot(BBlower, color=color.silver,title="Bollinger Bands Lower Line")
fill(p1, p2)


///////////// Colors
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Background Color?")



///////////// Condition
LongCondition  = crossover(Lvrsi, L_RSI_OverSold)    and crossover(close  ,BBlower)
ShortCondition = crossunder(Svrsi, S_RSI_OverBought) and crossunder(close,BBupper)
Longexcon      = crossunder(low, BBupper)
Shortexcon     = crossover(low, BBlower)

qt = round(strategy.equity/price, 3)

///////////// RSI + Bollinger Bands Strategy
if (not na(Lvrsi))

    if LongCondition and DateTime
        strategy.entry("RSI_BB_L", strategy.long, qty=qt,  comment="Long")
    else
        strategy.cancel(id="RSI_BB_L")
        
    if Longexcon
        strategy.close("RSI_BB_L", qty_percent = 100, comment = "L_exit")
    
    if ShortCondition and DateTime
        strategy.entry("RSI_BB_S", strategy.short, qty=qt,  comment="Short")
    else
        strategy.cancel(id="RSI_BB_S")
        
    if Shortexcon
        strategy.close("RSI_BB_S", qty_percent = 100, comment = "S_exit")
    
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)