![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=1738872030-FDPEXN7kiu7j3ad6Fo3qPjh6hZEwsdVT-0-6d1a51967c16ca5bf34f035faeb7ad63)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_33_1.jpg?sign=1738872030-9oH9B9NJSazjxVZSC2xxs64sPRqxw0f2-0-87b3c119a8d9df6e5319d642460c9a43)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_1.jpg?sign=1738872030-S4iY80TDdBiTi1s6DKn4HPGdzIGIvXF7-0-eaaaba228d4fee2986ea50863aff0d16)
通过以上代码大家可以看到,基本上每一组代码都有中文注解,非常适合初学者学习。
下面运行程序。回测时间从2018年11月1日开始,到2018年12月31日结束,如图2-8所示。
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_2.jpg?sign=1738872030-MXovdrvcNfYf4z1AyaljE8lpGWGMFOK6-0-0d9e7b6c37767cb9fb72fb4aba55433e)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_3.jpg?sign=1738872030-de5jBibMZ841xHj9ch7Ft0doamamXEKa-0-50e5c69c3378c179931d15fb897525d2)
图2-8 数据预处理
上面的案例代码共分为四个步骤,其中新增了plot绘图步骤:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_34_4.jpg?sign=1738872030-ZE2gMBVI1Hkve4s0rKollNbySqBcvQ2t-0-cf3d4c6601985c587f5fef65c8c58074)
下面将以上案例代码分组,对主体代码进行讲解。
第一组代码设置量化程序的入口:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_1.jpg?sign=1738872030-Qi8stwLJrNFHAH9LwYx3qYt9vmT9JsgR-0-07ae130ca19e5a19ed51364d6e50350a)
cerebro在西班牙语中是“大脑”的意思,表示量化计算引擎。
第二组代码分为两个小组进行讲解。
第2-1组代码,设置起始资金、Broker代理参数:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_2.jpg?sign=1738872030-TH9qDCH7COxfUgp1GpfXYi3vLOlpyV40-0-8f5b5539012bcb304af73bac330dbd22)
第2-2组代码,设置数据参数:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_3.jpg?sign=1738872030-skjDMkdGEiYBOMK0J0xQC47zQ2qgdGdA-0-81ca5166e624fdce5dd1c463f2b296cb)
调用数据读取函数pools_get4fn,对数据进行预处理。然后调用adddata添加数据函数,为量化引擎cerebro设置数据源data:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_35_4.jpg?sign=1738872030-HlBGIefLm1PRGoCMTeXkOuTefV3eoWVH-0-ba409e2a1929d02530aa97e2756c5259)
数据源变量data在调用数据读取函数pools_get4fn后,已经转化为BackTrader内部格式。
图2-9所示,是adddata数据添加函数的示意图。
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_1.jpg?sign=1738872030-a6VpkNYiQdDTBJbzVUNZUwtA2UQO4GZZ-0-a0e142645b4e6b13d800a653a4d5f7ac)
图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=1738872030-uwwDHbwHLhicKIjSbCRUJtxUsQs7sTFi-0-facd15450c6f2f2463d8aeaaf8b84570)
第四组代码获取量化回测分析结果:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_3.jpg?sign=1738872030-DwyrR8zHjHJ38uHsfeQAwTvYNNbV9Nqq-0-1a7911ab63180338bf2806d6a8083106)
最后,绘制量化分析图表:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_36_4.jpg?sign=1738872030-gFZJWeuPn0LSWROP8Ac6MJ93UjTLHITu-0-404b01acbedf4b132c51f481491b3f2b)
本节案例的重点,其实就是第2-2组代码中的设置数据参数。