量化交易入门笔记-策略定时函数

在股票量化策略的初始化函数中,进行一些初始化设置后,最后运行了三个定时函数

定时函数的定义及分类

在回测和模拟交易中,定时函数可按照每月、每周、每天进行工作

定时函数可分为三种:

  • 每日定时函数run_daily
  • 每周定时函数run_weekly
  • 每月定时函数run_monthly

语法如下:

# run_daily
run_daily(func, time='open', reference_security)
# run_weekly
run_weekly(func, weekday, time='open', reference_security)
# run_monthly
run_monthly(func, monthday, time='open', reference_security)

需要注意的是,定时函数在日级模拟中使用时,如果设置time='open'time='9:30',那股票量化策略的实际运行时间是9:27~9:30之间;而股票量化策略类获取到的逻辑时间(context.current_dt)仍然是9:30

定时函数各项参数的意义

  • 参数func,是一个函数,并且该函数必须接受context参数
  • 参数weekday,用来指定每周的第几个交易日,可以是负数,表示倒数第几个交易日;如果超出每周总交易个数,则取临近的交易日执行
  • 参数monthday,用来指定每月的第几个交易日,可以是负数,表示倒数第几个交易日;如果超出每月总交易日个数,则取临近的交易日执行
  • 参数time,一个字符串,可以是具体执行时间,支持 time 表达式;比如 "10:00", "01:00" 或者 "every_bar", "open", "before_open", "after_close", "close", "morning" 和 "night"
    • every_bar: 只能在 run_daily 中调用;按天会在每天的开盘时调用一次,按分钟会在每天的每分钟运行
    • open: 开盘时运行(等同于 "9:30" )
    • before_open: 早上 9:00 运行
    • after_close: 下午 15:30 运行
    • close: 下午 15:00 运行
    • morning: 早上 8:00 运行
    • night: 晚上 20:00 运行
  • 参数 reference_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

定时函数的注意事项

  1. 参数 func 必须是一个全局的函数,不能是类的成员函数,实例代码如下:

    # 定义一个全局函数
    def on_week_start(context):
        pass
    
    # 定义一个类,被调用的函数是类中成员
    class MyObject(object):
        def on_week_start1(self, context):
            pass
     
    # 初始化函数
    def initialize(context):
        # 调用全局函数,正确
        run_weekly(on_week_start, 1)
        # 使用类中成员函数,将编译错误
        run_weekly(MyObject().on_week_start1, 1)
    
  2. 定时函数通过 history 或 attribute_history 获得每天数据时,是不包括当天数据的。要获利当天数据,只能按分钟来获取

  3. 定时函数可以重复调用,即初始化函数中可以两个或多个同名定时函数,实例代码如下:

    def on_week_start(context):
        pass
    def on_week_end(context):
        pass
    def initialize(context):
        # 在每周的第一个交易日和最后一个交易日分别调用以上两个函数
        run_weekly(on_week_start, 1)
        run_weekly(on_week_end, -1)
    
  4. 每次调用这些定时函数都会产生一个新的定时任务。如果想修改或者删除旧的定时任务,就要调用 unschedule_all()(取消所有定时运行)来删除所有定时任务,然后再添加新的

  5. 如果定时函数在一月或一周交易日数不够,这样 monthday 或 weekday 就无法满足。这时可以找这周内最近的一个日期来执行

定时函数的实例

def weekly(context):
    print 'weekly %s %s' % (context.current_dt, context.current_dt.isoweekday())
    
def monthly(context):
    print 'monthly %s %s' % (context.current_dt, context.current_dt.month)
    
def daily(context):
    print 'daily %s' % context.current_dt
    
def initialize(context):
    # 指定每个月第一个交易日,在开盘后十分钟运行,即 9:40
    run_monthly(monthly, 1, 'open+10m')
    # 指定每周倒数第一个交易日,在开盘前运行,即 9:00
    run_weekly(weekly, -1, 'before_open')
    # 指定每天收盘前10分钟运行,即 14:50
    run_daily(daily, 'close-10m')
    # 指定每天收盘后运行,即 15:30
    run_daily(daily, 'after_close')
    # 指定在每天的 10:00 运行
    run_daily(daily, '10:00')
    # 指定在每天的 01:00 运行
    run_daily(daily, '01:00')
    # 参照股指期货的时间每分钟运行一次,必须选择分钟回测,否则每天执行
    run_daily(daily, 'every_bar', reference_security='IF1512.CCFX')

注:本文章为个人学习笔记,参考了一些书籍与官方教程,不作任何商业用途!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容