![BackTrader量化交易案例图解](https://wfqqreader-1252317822.image.myqcloud.com/cover/581/34667581/b_34667581.jpg)
3.4 策略编程模板
BackTrader策略的编写,对于初学者来说有一定的门槛,所以笔者特意开发了一个策略编程模板,方便大家套用。大家可以通过该模板,编写出风格一致的策略程序。
策略编程模板代码如下:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_42_1.jpg?sign=1738910446-q19bvUuGFNFRwjqu92VWiAPfRf3blVMU-0-58ef8963e7836f4892f77560982dfd08)
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_43_1.jpg?sign=1738910446-gbsDWOnghYpPKnQudDQ5DLmJvMZwBkXn-0-5cd30491e19ce36e99a5b1d9f95bf3b9)
策略编程模板当中的log输出函数主要用于信息输出和编程调试。
在策略代码模板中,最常用的两个核心函数如下。
● init:初始化函数。
● next:节点策略执行函数。
如图3-4所示是BackTrader量化软件中的ma_CrossOver均线交叉策略的模块架构图。
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_43_2.jpg?sign=1738910446-cSLbwN2E9eLc9cSrb4ppgv5WcVwDh16q-0-a795e384865b6312ac5b549aca9c642f)
图3-4 ma_CrossOver均线交叉策略模块架构图
这里强调一下,class属于面向对象类定义函数。初学者在使用Python进行编程时,最好采用面向过程的Basic语言编程模式,因为class函数编程的代码非常烦琐。
大家可以看一看案例中的class面向对象类的策略代码,我们只是想看看每天的收盘价格,结果出现一大堆代码,而真正有用的只有next函数中的一条代码:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_44_1.jpg?sign=1738910446-Be6pQE0AX3sMuLeMsw6r8EWVkq3JgDTK-0-8647b442a4a49fa2ac5331314992cce4)
虽然OOP面向对象开发模式的争议很多,但是,对于BackTrader这种大型软件项目来说,OOP面向对象开发模式还是有一定价值的。例如,方便代码复用、自行扩展,以及在使用时可以采用简单的模板调用方式等。
下面看看案例策略的具体代码。
这里不用过多关注log函数,因为它只是用于输出信息。
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_44_2.jpg?sign=1738910446-YsiR25FN07xniZPtBIerwMhcUIyAIsrm-0-bc21e03244319519352f9cc453ea7976)
init初始化函数:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_44_3.jpg?sign=1738910446-KUugaJfzqKxfZMLGU0T522uWyPhq7AxL-0-6f4eaf88ffdf96a2f1c262234adc64ae)
案例策略中的交易价格数据,采用的是收盘价。程序代码使用dataclose,作为收盘价的别名或者短名称、变量名。
在本案例中只有一只股票,如果有多只股票,则数据代码会有所不同。
本案例中策略编程的重点是next节点策略执行函数,代码如下:
![](https://epubservercos.yuewen.com/80F853/18519309601631906/epubprivate/OEBPS/Images/39705_44_4.jpg?sign=1738910446-EfCuneZbRIuBYopSjzXumCA69yqmfmDg-0-e0adc28fb2d6eb4641caac604684ffb0)
本案例的策略编程使用的是空策略,所以系统只显示每天的交易价格:收盘价数据。输出的收盘价,交易数据是按日期的正序排序的,最新的日期输出在最后面。
next节点策略执行函数,主要负责对买卖点交易时间进行筛选。实际交易时间是第二天或者后续时间,所以用next作为函数名称,表示下一个交易节点需要处理的事情。