加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

量化交易策略——布林线指标(一)

(2016-10-24 12:20:35)
量化交易策略——布林线指标(一)

转载:
http://blog.sina.com.cn/shearing
    约翰·布林格(John Bollinger),独自创立了一套分析方法就是布林线,利用统计学原理标准差求其信赖区间,本指标相较Envelopes,更能随机调整其变异性,上下限之范围不被固定,随股价之变动而变动。布林线分析法充分体现了布林格先生对包括证券市场在内的资本市场的独到认识和价值分析观念。《Bollinger on Bollinger Bands》是约翰·布林格讲述的如何利用“布林线”这一技术指标进行交易的投资专著。

策略实现:

1.股价高于这个波动区间,即突破上顶,说明股价虚高,故卖出;

2.股价低于这个波动区间,即穿破下底,说明股价虚低,故买入。

收益风险

源码:

#此例子采用Talib提供的BBANDS( Bollinger Bands )
#布林线(Boll)指标是通过计算股价的“标准差”,再求股价的“信赖。
#该指标在图形上画出三条线,其中上下两条线可以分别看成是股价的阻力线和支撑线,
#而在两条线之间还有一条股价平均线,布林线指标的参数最好设为20。
#一般来说,股价会运行在压力线和支撑线所形成的通道中。
import talib
#import numpy as np
#import pandas as pd

def initialize(context):
    # 定义一个全局变量, 保存要操作的证券
    context.stocks = ['600036.XSHG']#,'601328.XSHG','600196.XSHG','600010.XSHG']
    # 设置我们要操作的股票池
    set_universe(context.stocks)
# 初始化此策略
def handle_data(context, data):
    # 取得当前的现金
    cash = context.portfolio.cash
    # 循环股票列表
    for stock in context.stocks:
        # 获取股票的数据
        h = attribute_history(stock, 25, '1d', ('high','low','close'))
        # 创建布林线买卖信号,包括价格和参数
        # 注意:函数使用的price必须是narray
        upper, middle, lower = talib.BBANDS(
                h['close'].values, 
                timeperiod=20,
                # number of non-biased standard deviations from the mean
                nbdevup=2,
                nbdevdn=2,
                # Moving average type: simple moving average here
                matype=0)
        # 获取当前股票的数据
        current_position = context.portfolio.positions[stock].amount
        # 获取当前股票价格
        current_price = data[stock].price
        # 当价格突破阻力线upper时,且拥有的股票数量>=0时,卖出所有股票
        if current_price >= upper[-1] and current_position >= 0:
            order_target(stock, 0)
        # 当价格跌破支撑线lower时, 且拥有的股票数量<=0时,则全仓买入
        elif current_price <= lower[-1]  and current_position <= 0:
            number_of_shares = int(cash/current_price)
            # 购买量大于0时,下单
            if number_of_shares > 0:
                # 买入股票
                order(stock, +number_of_shares)
                # 记录这次买入
                log.info("Buying %s" % (stock))
        record(upper=upper[-1],
           lower=lower[-1],
           mean=middle[-1],
           price=current_price,
           position_size=current_position) 

     

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有