BB双重多空头交易策略


创建日期: 2023-11-02 15:40:00 最后修改: 2023-11-02 15:40:00
复制: 0 点击次数: 431
1
关注
1188
关注者

BB双重多空头交易策略

概述

BB双重多空头交易策略是一个利用布林带进行双向交易的策略。它结合布林中轨、上轨和下轨,实现多空头双向开仓和平仓。当价格触碰上轨时开空头仓位,触碰下轨时开多头仓位,并设置止损和止盈价格。策略简单易操作,能够抓住市场的主要趋势。

原理分析

该策略主要基于布林带的原理。布林带由中轨、上轨和下轨组成,代表价格的移动趋势。中轨是n日移动平均线,上轨是中轨+k倍标准差,下轨是中轨-k倍标准差。当价格突破上轨时,表示市场处于超买状态,应该考虑开空头仓位;当价格跌破下轨时,表示市场处于超卖状态,应该考虑开多头仓位。

具体来看,该策略首先计算布林中轨、上轨和下轨。然后判断价格是否触碰上轨,如果触碰,则开空头仓位;判断价格是否触碰下轨,如果触碰,则开多头仓位。开仓后还设置了止损和止盈价格。例如开多仓位后,止损价格为开仓价格减去一定比例,止盈价格为开仓价格加上一定比例。最后,策略还定义了平仓条件,包括止损、止盈跳动和布林带重新进入区间等条件。

整个策略充分利用了布林带反映市场超买超卖的特点,实现了较为精确的多空头交易。当市场处于不同阶段时,也可以通过布林带指标判断目前的行情走势,从而采取相应的交易策略。

优势分析

该策略具有以下优势:

  1. 捕捉趋势,布林带能识别主要趋势方向,及时开仓捕捉趋势。

  2. 双向交易,可以同时进行多头和空头交易,不受限于单边方向。

  3. 风险控制,设置止损和止盈确保每个交易都有挡损措施。

  4. 简单明了,基于布林带指标,策略规则直接易于理解。

  5. 容易优化,通过调整参数如周期长度、标准差倍数等可以优化策略。

  6. 适用于不同市场,可适用于股票、外汇、加密货币等市场。

风险分析

该策略也存在一些风险:

  1. 布林带失效风险,行情剧烈波动时布林带可能失效。

  2. 止损被突破风险,行情趋势变化剧烈时止损可能被突破。

  3. 策略过优化风险,过度优化策略可能导致过拟合。

  4. 交易频率过高风险,布林带波动频繁时将过于频繁交易。

  5. 分位离场风险,仅依靠布林带分位可能导致过早离场。

对应的解决方法:

  1. 结合趋势指标,判断布林带失效后及时关闭策略。

  2. 采用移动止损,让止损跟踪价格。

  3. 多市场多时间框架回测,防止过优化。

  4. 适当放宽布林带波动范围,减少交易频率。

  5. 新增离场指标,如MACD等确认布林带信号。

优化方向

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

  1. 调整布林带参数,如调整周期参数以匹配不同周期行情,调整标准差倍数以适应市场波动率。

  2. 增加趋势过滤,结合移动平均线等指标判断趋势,避免布林带在无明确趋势时的错误信号。

  3. 优化止损策略,如移动止损让止损更紧跟价格,或根据ATR设置止损幅度。

  4. 增加入场过滤,如收盘价突破布林带等,避免布林带指标的中间假突破。

  5. 利用机器学习技术自动优化参数,实现参数智能调整。

  6. 增加离场指标,如MACD等指标的背离作为辅助布林带信号的离场指标。

总结

BB双重多空头交易策略整体来说是一个非常典型且实用的布林带策略。它利用布林带指标判断超买超卖来捕捉市场趋势,并进行双向交易,同时设置止盈止损来控制风险。该策略具有捕捉趋势、双向交易、风险控制的优势,也存在布林带失效等问题。我们可以通过调整布林带参数、增加趋势过滤、优化止损策略等方法来提高策略的效果。该策略有很强的实用性和发展潜力,是一种值得推荐的简单实用的交易策略。

策略源码
/*backtest
start: 2023-10-25 00:00:00
end: 2023-11-01 00:00:00
period: 2m
basePeriod: 1m
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/
// © samuelkanneman

//@version=5
strategy('MI_BB ', overlay=true)
// i_startTime = input.time(title='Start Date Filter', defval=timestamp('01 Nov 2020 13:30 +0000'), tooltip='Date & time to begin trading from')
// i_endTime = input.time(title='End Date Filter', defval=timestamp('1 Nov 2022 19:30 +0000'), tooltip='Date & time to stop trading')

dateFilter = true

longitud = input(20, title='Longitud')
Desv = input.float(2.0, title='Desvio estandar', step=0.1)
fuente = input(close, title='Fuente')

TakeP = input.float(5.0, title='Take Profit', step=0.1)
StopL = input.float(1.0, title='Stop Loss', step=0.1)
var SL = 0.0
var TP = 0.0

[banda_central, banda_sup, banda_inf] = ta.bb(fuente, longitud, Desv)

comprado = strategy.position_size > 0
vendido = strategy.position_size < 0



if not vendido and not comprado and dateFilter
// Short
    if close >= banda_sup
    //cantidad= (strategy.equity/close)
        strategy.entry('venta', strategy.short)
        SL := close * (1 + StopL / 100)
        TP := close*(1-TakeP/100)
        
//Long
    else if close <= banda_inf
    //cantidad= (strategy.equity/close)
        strategy.entry('compra', strategy.long)
        SL := close * (1 - StopL / 100)
        TP := close*(1+TakeP/100)
    
//cierrres short
if close <= TP and vendido
    strategy.close ("venta" , comment="Salto TP")
if close <= banda_inf and vendido
    strategy.close ("venta" , comment="Banda Inferior")
if close >= SL and vendido
    strategy.close ("venta" , comment="Salto SL")
    
   
//cierre long
if close >= TP and comprado
    strategy.close ("compra" , comment="Salto TP")  
if close >= banda_sup and comprado
    strategy.close ("compra" , comment="Banda Superior")
    
if close <= SL and comprado
    strategy.close ("compra" , comment="Salto SL")
    


p1 = plot(banda_central)
p2 = plot(banda_sup)
p3 = plot(banda_inf)
fill(p2, p3, transp=90)


更多内容