Python量化交易之单品种多策略多账户组合交易,多线程的应用!

 
前言通常情况下,期货量化交易策略都会以多标的、多策略、多周期进行组合交易 。除股指期货外,很少有单策略、单品种、单周期的情况 。
这是为什么呢?

Python量化交易之单品种多策略多账户组合交易,多线程的应用!

文章插图
采用这样的方法可以平滑资金曲线,减少回撤,因为不同类型策略、品种或周期之间可以做到互补,所谓"东方不亮西方亮" 。
所以,作者将借助天勤量化交易平台的量化开发包 tqsdk进行单品种多策略的开发 。
Python量化交易之单品种多策略多账户组合交易,多线程的应用!

文章插图
首先,得要明白什么是多线程 。
Python 多线程,同时做多件事除了多进程能够实现多任务外,"多线程"同样也能够实现多任务!
首先,多线程你可以看做是工厂车间里的多条生产线,比如手机零部件生产线和组装生产线,两者虽然做不同的事,但最终的目的是为了完成手机的生产 。
而作者使用多线程,则是为了完成单品种多策略多账户的功能,两个账户和两个策略同时操作一个品种
Python量化交易之单品种多策略多账户组合交易,多线程的应用!

文章插图
其次,多线程是共用一个内存空间 。比如车间内的厕所,每个工人都可以方便 。
作者采用线程类的方式,来实现这个功能 。
  • 继承 threading.Thread,在run()方法下编写策略 。
  • 实例化以后调用start()方法启动线程 。
  • 最后用join()方法,让主线程等待所有子线程执行完毕后,才执行 。
如下图所示:
Python量化交易之单品种多策略多账户组合交易,多线程的应用!

文章插图
作者的两个类,可以看做是两个策略,我们在同一个文件中就可以实现多策略同时运行 。
1. 通过dir()方法获取到文件中所有的类名,函数名 。
如下图所示:
Python量化交易之单品种多策略多账户组合交易,多线程的应用!

文章插图
Run:
Python量化交易之单品种多策略多账户组合交易,多线程的应用!

文章插图
2. 当我们通过循环拿到策略名后,需要用eval()方法,将字符串(策略名)以Python的有效表达式来求值,因为我们遍历出的是字符串数据类型 。
如下图所示:
Python量化交易之单品种多策略多账户组合交易,多线程的应用!

文章插图
Run:
Python量化交易之单品种多策略多账户组合交易,多线程的应用!

文章插图
3. 最后,通过start()和join()及两个循环启动线程和主线程等待,完成多任务的执行 。
如下图所示:
Python量化交易之单品种多策略多账户组合交易,多线程的应用!

文章插图
Run:
Python量化交易之单品种多策略多账户组合交易,多线程的应用!

文章插图
接下来,作者将借助天勤量化tqsdk量化开发包,实现这一功能 。
Python单品种多策略多账户组合交易实现作者将以双均线k线突破策略为例,演示如何实现单品种多策略及多账户同时运行 。
1. 准备工作 。
需要准备两个账号,可以是实盘账户、快期模拟账户、仿真账户 。作者将采用快期模拟账户,如需模拟账户请在快期官网进行注册 。
Python量化交易之单品种多策略多账户组合交易,多线程的应用!

文章插图
2. 编写策略 。
作者已经将两个策略写好,传入api及品种代码就可以运行了 。为了识别他们之间相互独立,作者在k线更新时打印了两个策略的持仓情况 。
Python量化交易之单品种多策略多账户组合交易,多线程的应用!

文章插图
Run:
Python量化交易之单品种多策略多账户组合交易,多线程的应用!

文章插图
3. 启动多线程,执行策略 。
准备一个账户列表并将api存入api_list中,交易品种为螺纹钢期货2010合约 。
用eval()函数将获取到的策略名(字符串),转化为Python的有效表达式并传入参数后将其存入列表中 。
Python量化交易之单品种多策略多账户组合交易,多线程的应用!

文章插图
Run:
Python量化交易之单品种多策略多账户组合交易,多线程的应用!

文章插图
小结 。
通过上述3个步骤,完成了多策略多账户功能的实现 。其中作者认为主要的是eval()方法以的使用,如果不采用这个方法,作者就只能通过把策略名每个都写一遍 。
一个策略还好,几十个策略呢?或者说其中某些策略名字更改了,或者新增策略名后,很麻烦 。
最后多策略多周期组合是量化交易中常用的一些操作 。除此之外,使用多线程还可以实现很多其他的功能 。


推荐阅读