backtrader量化平台教程(二)第一个可用的策略

第一个可用的策略

指数基金的收益率怎么样?

写一个实用的策略,验证指数基金的收益情况。

获取回测数据

我们从证券宝baostock免费获取中证500(000905)指数数据。

这里我们写了一个工具get_daily_data2.py,具体代码见下文:

使用前需要pip安装baostock,pandas,click这三个python库。

$ python get_daily_data2.py --code sh.000905
login success!
login respond error_code:0
login respond  error_msg:success
query_history_k_data_plus respond error_code:0
query_history_k_data_plus respond  error_msg:success

加载数据

首先我们继承GenericCSVData定义了自己的CSV读取函数。

class BSCSVData(btfeed.GenericCSVData):
    params = (
        ("fromdate", datetime.datetime(2010, 1, 1)),
        ("todate", datetime.datetime(2019, 12, 31)),
        ('dtformat', ('%Y-%m-%d')),
        ('openinterest', -1)
    )

这里我们主要定义了起始结束时间,时间的格式。

GenericCSVData默认会读取datetime,open,high,low,close,volume,openinterest这些line,并定义了这些数据在CSV文件中对应的列号。

    data = BSCSVData(dataname="./datas/{0}".format(filename))

如果我们的CSV数据中,没有某指标,需要设置该指标为-1。

如果我们的CSV数据中包含了PE指标,并且我们想加载进来,也可以通过这种方式定义。

    ('pe', 7)

数据读取后,在backtrader加载数据很简单,使用adddata函数。

cerebro.adddata(data)

设置现金总额

在backtrader中可以设置初始投入金额:

cerebro.broker.set_cash(1000000.0)

实现策略(买入并持有指数基金)

我们继承bt.Strategy,定制自己的策略。

策略中重要的函数是next,函数next在每个时间点,都会被框架自动调用。

我们的策略很简单,如果发现当前是空仓,就把资金全部投入到目标标的,然后一只持有到天长地久。
购买使用的buy这个方法,这个方法实际上参数很多,可以指定数量购买,可以指定价格购买等方式。

init函数中的dataclose是引用回测数据中收盘价这条line。

总结

从我们回测持有中证500指数10年的情况看,总收益率只有15%,年收益率在1.5%左右。

甚至跑输余额宝这样的现金理财。
有兴趣的话,你也可以尝试评估下沪深300,上证50这样的指数。

回测的完整代码

#!/usr/bin/env python
# -*- coding: utf-8; py-indent-offset:4 -*-
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import datetime  # For datetime objects
import backtrader as bt
import backtrader.feeds as btfeed
import math


class BSCSVData(btfeed.GenericCSVData):
    params = (
        ("fromdate", datetime.datetime(2010, 1, 1)),
        ("todate", datetime.datetime(2019, 12
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值