![BackTrader量化交易案例图解](https://wfqqreader-1252317822.image.myqcloud.com/cover/581/34667581/b_34667581.jpg)
2.6 案例:数据预处理
大家都知道,Python的原生运算速度相对比较慢。BackTrader量化软件,以及常用的金融软件,交易数据的预处理主要都是通过Pandas模块库当中的矢量化运算完成的,它可以大幅度提高数据运算速度。
下面通过具体案例来介绍数据预处理。
案例文件名是btr_e002dat.py。本案例在量化版“Hello”案例的基础上增加了一组简单的测试数据和部分简单参数。
案例主要代码如下:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_32_3.jpg?sign=1739341727-cg4nvbfQIGL6IfWfVcrseVC7ZxCo7EQh-0-74b4da9ad65ad80f7e46bd762b53d1cf)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_33_1.jpg?sign=1739341727-vzLeZ5yWyevatJ5MwSBWUbwezJNmc2he-0-0cce85d34f789a7b1da954ff40b7a4bf)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_1.jpg?sign=1739341727-URRtVZyZQ40VArfzdRwAyesimNKdTaaO-0-666490097f0e88c370020d260b922006)
通过以上代码大家可以看到,基本上每一组代码都有中文注解,非常适合初学者学习。
下面运行程序。回测时间从2018年11月1日开始,到2018年12月31日结束,如图2-8所示。
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_2.jpg?sign=1739341727-6spNbpfozS4ZDkN1w2nifD8rVOCPBXZw-0-1742d92bc593aaa819763adb86d26027)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_3.jpg?sign=1739341727-CYsE8dI2zVGtviRwhUZYqc0gtmpkX1rK-0-fb69cfc4d5e2a955a5d923c557417ae9)
图2-8 数据预处理
上面的案例代码共分为四个步骤,其中新增了plot绘图步骤:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_4.jpg?sign=1739341727-8E8scP8UmvrKvGPv88WIa4nRa2cjeY7S-0-dbfa540d7fb168aa949f1a6bc94b73b9)
下面将以上案例代码分组,对主体代码进行讲解。
第一组代码设置量化程序的入口:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_1.jpg?sign=1739341727-f7iskI5zkdMNnElcqaDHKJy3H5PNIs6j-0-a6c8e1c86dfd957ae8044b5d11c0b4d2)
cerebro在西班牙语中是“大脑”的意思,表示量化计算引擎。
第二组代码分为两个小组进行讲解。
第2-1组代码,设置起始资金、Broker代理参数:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_2.jpg?sign=1739341727-3PAGcc5P7FWQfCFNmp5kARtiKowKd8LZ-0-fd368bf710cd47f3d2f9f6bf23b316cd)
第2-2组代码,设置数据参数:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_3.jpg?sign=1739341727-p6RUzGFWt0k6nXZZosax6WIq6amExq1k-0-1fefb2590a7658edcd3084fff2620a34)
调用数据读取函数pools_get4fn,对数据进行预处理。然后调用adddata添加数据函数,为量化引擎cerebro设置数据源data:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_4.jpg?sign=1739341727-ShcgnclCwtxuGT7dzLS6IOXgXSRGiDWy-0-da6946bd8641351fbfbfb6d1f7b56243)
数据源变量data在调用数据读取函数pools_get4fn后,已经转化为BackTrader内部格式。
图2-9所示,是adddata数据添加函数的示意图。
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_1.jpg?sign=1739341727-pXhNx16ZysZ1dCTzveaI7rA1B2LWrsMs-0-f94618e69a6d2dfba58f1bcc792a8c22)
图2-9 adddata数据添加函数示意图
由图2-9可以看出,adddada函数位于cerebro类,其中以下画线“_”开头的函数是类内部函数,可以无须考虑,其他主要关联函数和属性有:feeds、resampledata、replaydata、datasbynam、chaindatae、rolloverdata。
第三组代码运行量化回测:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_2.jpg?sign=1739341727-nzltBtjCSVOaWEecOXHBtz8bWgxfGiD9-0-54d391d4cd746ca9b0dc9c7fcf01e52f)
第四组代码获取量化回测分析结果:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_3.jpg?sign=1739341727-5IpQybcvvcLM7jRpOApv69jY3FAv7Tpe-0-d4581c879a342ac287d6d3aa03e79bd5)
最后,绘制量化分析图表:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_4.jpg?sign=1739341727-A6YKjFD8GYdWKx8NX8T1tx9ukHoT7Uuf-0-9babd1b57a3de3d499b2fe3a86289f5e)
本节案例的重点,其实就是第2-2组代码中的设置数据参数。