本策略综合利用布林带和RSI指标识别趋势方向变化的关键点,在趋势发生转折时建立头寸,随后利用趋势力量获利退出。
本策略首先通过布林带上下轨来判断价格震荡的范围和方向,结合RSI指标判定多空关键点,在震荡区间震荡加剧时建立反向头寸。例如当RSI从超买/超卖区域返回并在下轨附近出现金叉时建立看涨头寸,或者当RSI从超卖区域返回并在上轨附近出现死叉时建立看跌头寸。之后利用布林带上下轨这两个动态止损位来跟踪止损和止盈。
本策略主要利用布林带指标和RSI指标的组合来识别价格趋势的关键转折点。
布林带是根据股价的波动范围来计算上下轨的技术指标。布林带通过计算股价的标准差,得到股价波动的幅度,并据此画出股价的上下限。上轨就是股价波动的上限,下轨就是波动的下限。当股价接近上轨时,说明股价正在牛市中波动上涨,这时要警惕股价可能下跌;当股价接近下轨时,说明股价下跌加速,这时要警惕反弹机会。
RSI指标是通过计算一段时间内股价涨跌力度的强弱来判断股价趋势和超买超卖的技术指标。RSI通过比较一段时间内的平均收盘涨幅和平均收盘跌幅,测量股价正在上涨或下跌的动量。当RSI大于70时为超买,小于30时为超卖。股票价格可能反转。
本策略的交易决策是结合布林带上下轨和RSI指标的信号。当RSI从超买区下跌进入中性区,并且股价下破布林带下轨时,就表明股价的上涨趋势被打破,这时看跌的机会出现。我们可以建立看跌头寸。反之,当RSI从超卖区上升进入中性区,并且股价上破布林带上轨时,就表明股价的下跌趋势被打破,这时看涨的机会出现。我们可以建立看涨头寸。
在建立头寸后,我们会利用布林带上轨和下轨作为止损位和止盈位。当股价反转重新突破这两个关键位时,我们就及时止损或止盈。
本策略最大的优势在于利用布林带和RSI这两个指标互为验证,识别股价关键的转折点。单独利用布林带指标,很容易产生错误信号。但结合RSI指标的超买超卖区域判断,可以有效避免错误操作。另一个优势是利用布林带上下轨作为动态的止盈止损位,这比预先设定固定止盈止损位更加灵活和合理。
本策略风险主要体现在两个方面:
布林带参数设置不当。如果布林带参数设置得过大或过小,那么识别震荡加剧的效果就会大打折扣。
指标发出假信号。本策略主要依赖布林带指标结合RSI指标识别关键点,但在个别情况下还是可能出现指标发出的信号是错误的。这时如果盲目跟单就可能造成损失。
针对以上风险,我们可以从以下几个方面进行优化:
测试不同市场不同周期参数下布林带参数的最优值,设定合理的参数。
增加其他指标作为验证信号,避免单一指标判断错误。例如可以加入KD指标等。
增加人工经验规则,根据具体行情选择是否入场。
本策略还可从以下几个方面进行优化:
测试优化布林带参数,寻找更加适合该品种的最优参数。
增加止损止盈策略,可以设置追踪止损或移动止盈来锁定更大利润。
结合更多指标和形态作为入场信号验证,例如量价指标、基本面因素等,提高操作的准确性。
根据不同品种和市场的特点,设定参数集优化组合,形成多种参数组合的策略仓库。
本策略综合运用布林带指标和RSI指标,在两个指标互相验证的基础上识别价格可能反转的关键点。它在判断行情关键点时比较可靠,通过动态跟踪布林带上下轨进行止盈止损也较为合理。但本策略也存在一定风险,需要增加其他辅助工具来优化和验证操作策略,在实盘中还需结合人工经验进行调整。总体来说,本策略为一种典型的量化交易策略。
/*backtest start: 2024-01-28 00:00:00 end: 2024-02-04 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("TradeOptix 2.0", shorttitle="TradeOptix 2.0", overlay=true) ///////////// RSI RSIlength = input(6, title='RSI Period Length') RSIoverSold = 50 RSIoverBought = 50 price = close vrsi = ta.rsi(price, RSIlength) ///////////// Bollinger Bands BBlength = input.int(200, minval=1, title='Bollinger Period Length') BBmult = 2 // input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation") BBbasis = ta.sma(price, BBlength) BBdev = BBmult * ta.stdev(price, BBlength) BBupper = BBbasis + BBdev BBlower = BBbasis - BBdev source = close buyEntry = ta.crossover(source, BBlower) sellEntry = ta.crossunder(source, BBupper) plot(BBbasis, color=color.new(color.aqua, 0), title='Bollinger Bands SMA Basis Line') p1 = plot(BBupper, color=color.new(#7787b9, 0), title='Bollinger Bands Upper Line') p2 = plot(BBlower, color=color.new(#7787b9, 0), title='Bollinger Bands Lower Line') fill(p1, p2, color = color.rgb(40, 226, 255, 90)) ///////////// RSI + Bollinger Bands Strategy long = ta.crossover(vrsi, RSIoverSold) and ta.crossover(source, BBlower) close_long = ta.crossunder(vrsi, RSIoverBought) and ta.crossunder(source, BBupper) if not na(vrsi) if long strategy.entry('Long', strategy.long, stop=BBlower, alert_message = "Exit") alert("Enter Calls") else strategy.cancel(id='Long') alert("Exit Calls") if close_long strategy.close('Long',alert_message = "Exit") alert("Exit Calls") plotshape(long, title='UpTrend Begins', location=location.belowbar, style=shape.flag, size=size.tiny, color=color.new(color.green, 0)) plotshape(close_long, title='DownTrend Begins', location=location.abovebar, style=shape.flag, size=size.tiny, color=color.new(color.red, 0))