RSI布林带交易策略


创建日期: 2023-09-18 22:13:18 最后修改: 2023-09-18 22:13:18
复制: 0 点击次数: 641
avatar of ChaoZhang ChaoZhang
1
关注
1364
关注者

概述

该策略通过RSI指标判断超买超卖情况,并配合布林带指标的价格震荡通道,形成交易信号。当RSI指标显示超买或超卖现象,同时价格接近或触及布林带上下轨时,产生买入和卖出信号。策略综合趋势分析和震荡判断,动态找机会。

策略原理

该策略主要基于以下两个指标进行判定:

  1. RSI指标判断超买超卖

计算一定周期内的相对强弱指标RSI,根据预设参数判断其是否进入超买或超卖区域,如超买区上限设定为40,超卖区下限设定为45。

  1. 布林带指标描绘价格震荡范围

计算一定周期内的布林带,通过其上轨及下轨形成价格通道,描述价格震荡的范围。

在此基础上,策略给出以下交易规则:

当RSI指标上穿45进入超卖区时,并且价格上穿布林带下轨,产生买入信号; 当RSI指标下穿40进入超卖区时,并且价格下穿布林带上轨,产生卖出信号。

优势分析

该策略结合RSI与布林带指标,具有以下优势:

  1. RSI判断超买超卖状况,布林带判断价格趋势方向,两者互相补充;

  2. 布林带上下轨可作为止损位定位,有利于风险控制;

  3. 参数设置简单,容易实现与回测;

  4. 可针对RSI参数进行优化,确定最佳超买超卖区间;

  5. 可选择不同的价格输入,适应多种市场环境。

风险及解决方案

该策略也存在一些风险:

  1. 布林带范围过宽导致止损预期差

    • 适当调整布林带宽度参数,优化止损范围
  2. RSI参数设置不当,超买超卖区间判断错误

    • 通过回测优化RSI参数,确定最佳交易区间
  3. 无法准确判断趋势反转点,存在错过信号风险

    • 适当缩短布林带周期参数,提前捕捉趋势反转
  4. 无法有效控制亏损,存在大幅行情冲击止损风险

    • 增加移动止损或动态止损策略,优化止损方式

优化方向

该策略可以从以下几个方面进行优化:

  1. 优化RSI参数,确定最佳超买超卖区间

  2. 优化布林带宽度参数,控制止损范围

  3. 加入其他指标判断趋势反转,避免漏掉信号

  4. 应用机器学习算法判断买卖时机

  5. 根据不同市场环境使用不同参数组合

  6. 增加动态止损机制

  7. 开发参数自动优化程序

总结

总而言之,该策略通过RSI与布林带指标的配合使用,形成较为稳定的交易决策依据。策略逻辑简单清晰,有利于风险控制,但也存在一定优化空间。通过参数优化、止损优化、算法引入等方式可以进一步增强策略效果,使其更适应复杂的市场环境。该策略为构建交易系统提供了思路,值得进一步研究与应用。

策略源码
/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Mdemoio


//@version=4
strategy("Madri", shorttitle="Madri", overlay=true)


// Version 1.1


///////////// RSI
RSIlength = input(2,title="A") 
RSIoverSold = 45
RSIoverBought = 40
price = close
vrsi = rsi(price, RSIlength)


///////////// Bollinger Bands
BBlength = input(150, minval=1,title="B")
BBmult = 2// 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
buyEntry = crossover(source, BBlower)
sellEntry = crossunder(source, BBupper)


///////////// Colors
//switch1=input(true, title="Enable Bar Color?")
//switch2=input(true, title="Enable Background Color?")
//TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? green : na
//barcolor(switch1?TrendColor:na)
//bgcolor(switch2?TrendColor:na,transp=50)


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

    if (crossover(vrsi, RSIoverSold) and crossover(source, BBlower))
        strategy.entry("RSI_BB_L", strategy.long, stop=BBlower,  comment="Buy")
    else
        strategy.cancel(id="RSI_BB_L")
        
    if (crossunder(vrsi, RSIoverBought) and crossunder(source, BBupper))
        strategy.entry("RSI_BB_S", strategy.short, stop=BBupper, comment="Sell")
    else
        strategy.cancel(id="RSI_BB_S")

//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)