初次接触量化交易的朋友,在开始编写自己第一个策略的时候通常会感觉无从下手。而使用过其他量化平台的老手,在使用新平台的时候往往能够很快上手。这主要是因为新手对量化交易系统的策略框架没有概念,而很多量化交易系统的策略框架逻辑往往都是大同小异的。

  以下三点可以帮助新手快速掌握编写Ptrade量化交易策略的原则:

一、Ptrade遵循python的语法

  Ptrade的策略是基于python语言的,所以在编写策略时,需要遵循python的语法;遇到报错时,也需要以python的视角去思考分析错误。

  这里假设读者已经掌握了python的基础语法和关于自定义函数的基础知识。

(参考链接:python3的基础语法pyhon3的自定义函数

二、Ptrade有自己的策略框架体系

  Ptrade中有一些保留的自定义函数名称,这些保留自定义函数可以实现不同的触发逻辑。

  在启动策略时,Ptrade会先启动“策略引擎”,然后再由“策略引擎”来调用用户策略文件中的保留自定义函数。“策略引擎”定义了每个保留自定义函数的执行顺序、触发逻辑。通过这些保留自定义函数与其他API函数的巧妙组合,可以实现各种简单或者复杂的量化交易策略。

  如果你是python初学者的话,我建议你先暂停继续学习Ptrade,花一些时间了解一下python跨文件调用函数的实现方法。这会帮助你更好的了解Ptrade、python是怎么工作的,进而有能力驾驭更复杂的量化交易策略。(参考链接:百度-python 跨文件调用函数

  下边的图表展示了Ptrade的所有保留自定义函数以及它们的触发逻辑。(参考链接:API文档-业务流程框架

1、初始化阶段

  初始化阶段对应API中的initialize()函数,会在策略启动后最先运行,并且只运行一次。初始化阶段的一般作用:

  (1)为一些基础性的全局变量进行初始化赋值。

  (2)设置定时任务。(参考链接:API文档-定时周期性函数

  注意:部分API函数不支持在初始化阶段调用。

2、盘前阶段

  盘前阶段是指交易日09:15开盘之前的阶段,一般用来更新一些以日为更新频率的全局变量,便于盘中阶段使用。例如我们可以在每个交易日的盘前阶段更新当日的股票池。

  可以通过before_trading_start()或者run_daily()函数实现在开盘前的固定时间运行。区别对比如下:

before_trading_start() run_daily()
首次启动的时间 initialize()函数运行完毕之后立即运行 同“往后启动的时间”
往后启动的时间 回测模式:08:30
交易模式:09:10(以券商的设定为准)
用户自己设定的时间

  注意:

  (1)避免在盘前阶段运行耗时过长的代码,以免和盘中阶段相冲突。可考虑放到前一日的盘后阶段。

  (2)获取行情时,请注意时间上的逻辑关系。例如盘前阶段无法取到当日的开盘价。

3、盘中阶段

  盘中阶段是指交易日的09:30至15:00,一般用来监控行情报价,并据此产生买卖信号、执行交易。

  可以通过handle_data()、tick_data()、run_interval()函数来实现盘中定时运行。

区别对比如下:

handle_data() tick_data() run_interval()
支持的模式 回测模式、交易模式 交易模式 交易模式
支持的周期 1分钟、1天 3秒 自定义(最少3秒)

  注意:

  (1)避免在盘中阶段运行耗时过长的代码,以免造成I/O阻塞、影响时效性。可考虑放到盘前阶段或者前一日的盘后阶段。

4、盘后阶段

  盘后阶段是指交易日15:00收盘之后的阶段,一般用来执行一些盘后复盘类的任务。

  可以通过after_trading_end()或者run_daily()函数实现在开盘前的固定时间运行。区别对比如下:

after_trading_end() run_daily()
启动的时间 15:30(以券商的设定为准) 用户自己设定的时间

  注意:

  (1)日频数据的落库时间不固定,一般在15:30-16:00之间可以完成,但也不排除偶尔会有延误。请考虑将启动时间适当的延后,并且增加容错逻辑。

三、Ptrade可能存在一些限制和差异

  1、由于Ptrade的策略运行在券商的服务器中,所以出于安全和合规的考虑,券商会限制一些python内置模块和第三方库的使用,并且会限制对外网的访问。视每家券商的配置不同,具体的限制会有差异。

(参考链接:Ptrade支持的第三方库及其版本

  2、Ptrade内置的python和部分第三方库的版本较低,在使用时需要注意一下不同版本之间的语法、支持的函数可能会有一些差异。

  经测试,截至2023年3月,Ptrade内置的python版本是3.5.1,而Python官方的最新版本是3.12.0Alpha6。