9.3 股票量化策略的定时函数
在股票量化策略的初始化函数中, 进行一些初始化设置后,最后运行了三个定时函数。下面就来具体讲解一下定时函数。
9.3.1 定时函数的定义及分类
定时函数是指,在回测和模拟交易中指定每月、每周或者每天要运行的函数。定时函数可以在具体每月或每周的第几个交易日(或者倒数第几天)的某一分钟执行。
定肘函数可以分三种,分别是每日定时函数( run_daily )、每周定时函数( run_ weekly )、每月定时函数( run_ffionthly )。
定时函数的语法格式如下:

需要注意的是, 定时函数在曰级模拟中使用肘,如果设置time= "open"或time= "9:30" ,那么股票量化策略的实际运行时间是9:27-9:30 之间。股票量化策略类获取到的逻辑时间(context.current_dt) 仍然是9:30 。
9.3.2 定时函数各项参数的意义
参数func: 是一个函数,并且该函数必须接受context 参数。
参数monthday : 用来指定每月的第几个交易曰,可以是负数,表示倒数第几个交易日。如果超出每月总交易曰个数, 则取临近的交易日执行。
参数weekday : 用来指定每周的第几个交易曰,可以是负数,表示倒数第几个交易曰。如果超出每周总交易曰个数,则取临近的交易曰执行。
参数tirne : 一个字符串,可以是具体执行时间,支持time 表达式。比如"10: 00" , "01: 00" 或者"every_bar" ,飞pen" , "before_open" , "after_close" , "close" , "moπung" 和"night" 。
( 1 ) every bar :只能在run_daily 中调用;按天会在每天的开盘时调用一次,按分钟会在每天的每分钟运行。
( 2 ) open : 开盘时运行(等同于"9:30" ) 。
( 3 ) before_open : 阜上9:00 运行。
( 4 ) after_close :下午15:30 运行。
( 5 ) close :下午15:00 运行。
( 6 ) morning :旱上8 :00 运行。
( 7 ) night :晚上20:00 运行。
参数referenæ_security : 表示时间的参照标的。如果参照"000001,,XSHG" ,交易时间为9:30-15:00; 如果参照"IF1812.CCFX" , 2016-01- 01之后的交易时间为9:30-15:00 ,在此之前为9:15-15:15; 如果参照"A9999.XDCE" ,因为有夜盘,因此开始时间为21:00 ,结束时间为15:00 。

9.3.3 定时函数的注意事项
定时函数的注意事项有5 项,具体如下:
第一,参数func 必须是一个全局的函数,不能是类的成员函数,实例代码如下:

第二,定时函数通过history 或attribute_history 获得每天数据肘,是不包括当天数据的。要获得当天数据,只能按分钟来获取。
第三,定时函数可以重复调用,即初始化函数中可以两个或多个同名定时函数,实例代码如下:

第四,每次调用这些定时函数都会产生一个新的定时任务。如果想修改或者删除旧的定时任务,就要调用unschedule_all (取消所有定时运行)来删除所有定时任务,然后再添加新的。

第五,如果定时函数在一月或一周交易曰数不够,这样monthday 或weekday 就无法满足。这时可以找这周内最近的一个日期来执行。
9.3.4 定时函数的实例
首先定义三个全局函数,分别是weekly( )、monthly( ) 、daily( ) ,接着定义初始化函数,实现一次调用monthly( ) ,两次调用weekly( ),四次调用daily( ),具体代码如下:
