python实现 bollinger band 交易策略

首先介绍的第一个指标是应用最为广泛的Bollinger Bands,即布林带指标。

python实现 bollinger band 交易策略_第1张图片
image

该指标是在1980年由John Bollinger提出的。总体的思想是利用移动平均线以及标准差预估出价值带,鉴于价格是环绕价值上下波动的,上突破该带即为超买,下突破该带即为超卖,以此来判断价格与价值的相对位置。

Bolling Bands包含了三条线,分别是一条中心线(Center Line)和两条价格通道线(Price Channel)。中心线为一条价格的N日移动平均线(SMA),在某些场合下也有使用N日加权移动平均线(EMA)作为中心线的。上下两个通道的宽度相等,是为N日的价格标准差。

因此,Bollinger Bands的扩大和收缩的市场意义就昭然若揭了:当Bollinger Bands扩大之时,便是市场开始开始单边趋势之时,或上涨,或下跌,总而言之市场已经开始变化,脱离了横盘抑或震荡的趋势;当Bollinger Bands缩小之时,市场从拉伸亦或是下跌中开始逐步走向平稳,开始横盘震荡的趋势

在实际策略中可以考虑使用Bollinger Bands作为判断市场位置的指标之一,在Bollinger Bands开始扩大之时结合其他指标进行判断,可以对于横盘之后的市场方向有一个较为清晰明确的认识和判断。

很多人在交易的时候喜欢使用箱体来划分固定的压力支撑线,固然箱体有着成本和心理的双重意义可以作为买卖点存在,但是Bollinger Bands作为一个动态反映市场信息的指标,其揭示的买点与买点也是具有相当程度的意义的。

接下来给出Bollinger Bands的计算公式以及Python和大智慧的代码。

计算公式:

布林中线(Middle Line) = N日的移动平均线

布林上轨(Upper Line) = 布林中线 + N日的标准差

布林下轨(Lower Line) = 布林中线 - N里的标准差

本文采用了聚宽平台接口进行量化策略设置:
python 代码:

import jqdata

def initialize(context):
    set_option('use_real_price', True)
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    set_benchmark('000300.XSHG')
    
    g.security = ['600036.XSHG']
    
    g.N = 2
    g.ma_days = 20
    
def handle_data(context, data):
    for stock in g.security:
        df = attribute_history(stock, g.ma_days)
        middle = df['close'].mean()
        upper = middle + g.N * df['close'].std()
        lower = middle - g.N * df['close'].std()
        
        p = get_current_data()[stock].day_open
        # 如果价格突破阻力线
        if p >= upper and stock in context.portfolio.positions:
            order_target(stock, 0)
    
    cash = context.portfolio.available_cash / len(g.security)
    
    for stock in g.security:
        df = attribute_history(stock, g.ma_days)
        middle = df['close'].mean()
        upper = middle + g.N * df['close'].std()
        lower = middle - g.N * df['close'].std()
        
        p = get_current_data()[stock].day_open
        # 如果价格跌破支撑线
        
        if p <= lower and stock not in context.portfolio.positions:
            order_target(stock, cash)
效果图
python实现 bollinger band 交易策略_第2张图片
image.png

你可能感兴趣的:(python实现 bollinger band 交易策略)