开源量化框架Catalyst中文教程(4)——布林带策略

GitHub:https://github.com/enigmampc/catalyst
官方文档:https://enigma.co/catalyst/index.html
系统环境:macOS High Sierra 10.13.6

官方没有布林带策略的示例文件,不过我们很容易自己实现。
首先安装开源技术指标库TA-Lib,在Catalyst环境下

pip install TA-Lib

一. 布林带

布林带由三条线构成,分别是上轨(Upper),中轨(Middle,即均线),下轨(Lower)
布林线中轨:n天收盘价的移动平均线
布林线上轨:n天收盘价的移动平均线 + (m x n天收盘价的标准差)
布林线下轨:n天收盘价的移动平均线 - (m x n天收盘价的标准差)
其中m称为标准差,是整数,因此布林带的参数是[n, m]。

用TA-Lib很容易得到这三条线:

upper, middle, lower = talib.BBANDS(history_data, timeperiod=BOLL_N, nbdevdn=BOLL_M, nbdevup=BOLL_M)

其中history_data是历史收盘价dataframe,timeperiod是统计周期n天,nbdevdnnbdevup就是上下轨要乘的标准差m。

二. 策略逻辑

布林带的策略逻辑有很多,为了简单起见,这里仅做如下示例:

  1. K线上穿下轨,买入
  2. K线下穿上轨,卖出

你也可以尝试其它做法比如:

  1. 当收盘价由下向上穿过上轨的时候,做多;然后由上向下穿过中轨的时候,平仓。
  2. 当收盘价由上向下穿过下轨的时候,做空;然后由下向上穿过中轨的时候,平仓。

三. 代码实现

1. 常数设置和程序初始化
NAMESPACE = 'bollinger_bands'
log = Logger(NAMESPACE)
SIGNAL_BUY = 'buy'  # 买入信号
SIGNAL_SELL = 'sell'  # 卖出信号
SIGNAL_INIT = ''  # 观望信号
BOLL_N = 20      # bbands参数n
BOLL_M = 2       # bbands参数m


def initialize(context):
    """
        初始化
    """
    context.i = 0  # 经历过的交易周期
    context.asset = symbol('bab_usd')  # 交易对
    context.base_price = None  # 初始价格
    context.signal = SIGNAL_INIT  # 交易信号
2. 策略实现
def handle_data(context, data):
    """
        策略
    """
    # 经历过的交易周期大于周期窗口才开始计算
    context.i += 1
    if context.i < BOLL_N + 1:
        return

    # 获取历史数据,返回dataframe
    history_data = data.history(context.asset,
                                'close',
                                bar_count=BOLL_N + 1,
                                frequency="1D",
                                )

    # 获取当前持仓数量
    pos_amount = context.portfolio.positions
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值