
4.2 案例:设置Buy买入价格
下面看看具体的案例,案例文件名是:btr_e004buy.py。
程序主体部分的代码和前面的案例是完全一样的。第一组和第二组源码都是设置数据及策略参数:

adddata类函数,作用是添加量化交易数据,设置数据源参数:

addstrategy类函数,作用是添加量化策略,设置策略参数:

第三组代码运行量化程序;第四组代码输出回测数据,绘制相关图表,如下:

运行案例程序,主要输出信息如下:


在以前的案例程序中,因为是空策略,所以没有买卖交易,程序的起始资金和资产总值都是10万元。
但在本节案例中,从输出信息来看,有稍许亏损:
资产总值 Final Portfolio Value:99923.51
本案例回测的时间周期是:2018年1月~2018年12月。
2018年,国内A股大盘形式不好,但本案例的亏损额很少,说明这个策略在2018年的行情中还是比较优秀的策略。
如图4-2所示是程序生成的买入策略分析图。

图4-2 买入策略分析图
图4-2最上方的蓝色曲线是资产总额,包括股票和持有现金的总额。资产总额曲线,可以反映用户买卖的盈亏情况。
大家注意蓝色资产总额曲线的走势变化:起点是10万元,这是开始时的现金持有量。随着股票的买入增多,现金持有量越来越少。但当前案例不是正式交易,只是单边买入股票,没有卖出。
案例中出现的亏损数额很少,还有一个原因是量化软件默认只买入一手股票。而每只股票价格才6元多,每次交易就只是买卖一手,即使亏损也不会亏损太多。
图4-2中价格曲线附近的三角符号就是股票的实际交易买卖点。
我们在实际测试时发现,这些买卖点存在一些时间误差,前后误差大约是两天时间。
笔者分析,造成误差的原因有两个:
(1)时差和时区。例如,zipline量化软件要求要把导入数据转换为UTC世界统一时间。
(2)交易日历模块库。目前还没有统一的交易时间标准,因为各国风俗不同,所以各国的节假日也有所不同。
这些误差,对于量化程序的实际分析结果影响不大,图中的买卖点图标也只是提示参考图标。