通常情况下,期货量化交易策略都会以多标的、多策略、多周期进行组合交易。除股指期货外,很少有单策略、单品种、单周期的情况。
这是为什么呢?
采用这样的方法可以平滑资金曲线,减少回撤,因为不同类型策略、品种或周期之间可以做到互补,所谓"东方不亮西方亮"。
所以,作者将借助天勤量化交易平台的量化开发包 tqsdk进行单品种多策略的开发。
首先,得要明白什么是多线程。
除了多进程能够实现多任务外,"多线程"同样也能够实现多任务!
首先,多线程你可以看做是工厂车间里的多条生产线,比如手机零部件生产线和组装生产线,两者虽然做不同的事,但最终的目的是为了完成手机的生产。
而作者使用多线程,则是为了完成单品种多策略多账户的功能,两个账户和两个策略同时操作一个品种。
其次,多线程是共用一个内存空间。 比如车间内的厕所,每个工人都可以方便。
作者采用线程类的方式,来实现这个功能。
如下图所示:
作者的两个类,可以看做是两个策略,我们在同一个文件中就可以实现多策略同时运行。
1. 通过dir()方法获取到文件中所有的类名,函数名。
如下图所示:
Run:
2. 当我们通过循环拿到策略名后,需要用eval()方法,将字符串(策略名)以Python的有效表达式来求值,因为我们遍历出的是字符串数据类型。
如下图所示:
Run:
3. 最后,通过start()和join()及两个循环启动线程和主线程等待,完成多任务的执行。
如下图所示:
Run:
接下来,作者将借助天勤量化tqsdk量化开发包,实现这一功能。
作者将以双均线及k线突破策略为例,演示如何实现单品种多策略及多账户同时运行。
1. 准备工作。
需要准备两个账号,可以是实盘账户、快期模拟账户、仿真账户。作者将采用快期模拟账户,如需模拟账户请在快期官网进行注册。
2. 编写策略。
作者已经将两个策略写好,传入api及品种代码就可以运行了。为了识别他们之间相互独立,作者在k线更新时打印了两个策略的持仓情况。
Run:
3. 启动多线程,执行策略。
准备一个账户列表并将api存入api_list中,交易品种为螺纹钢期货2010合约。
用eval()函数将获取到的策略名(字符串),转化为Python的有效表达式并传入参数后将其存入列表中。
Run:
小结。
通过上述3个步骤,完成了多策略多账户功能的实现。其中作者认为主要的是eval()方法以的使用,如果不采用这个方法,作者就只能通过把策略名每个都写一遍。
一个策略还好,几十个策略呢?或者说其中某些策略名字更改了,或者新增策略名后,很麻烦。
多策略多周期组合是量化交易中常用的一些操作。除此之外,使用多线程还可以实现很多其他的功能。
文章及策略代码仅供学习交流,切勿直接实盘。