本系列文章将笔者平时在使用ptrade进行策略开发中使用到的与日期相关的函数进行记录,以便大家参考并一同改进优化。
如果读者还有其他日期相关的函数实现需求,也可以留言,大家一起讨论补充。
首先看一下ptrade提供的get_trading_day函数的用法,后面的函数大多要用到它。
结合ptrade官方文档对get_trading_day的介绍如下:
get_trading_day(day)
使用场景
该函数在研究、回测、交易模块可用
接口说明
该函数用于获取当前时间数天前或数天后的交易日期。
注意事项:
1、默认情况下,回测中当前时间为策略中调用该接口的回测日日期(context.blotter.current_dt)。
2、默认情况下,研究中当前时间为调用当天日期。
3、默认情况下,交易中当前时间为调用当天日期。
参数
day:表示天数,正的为数天后,负的为数天前,day取0表示获取当前交易日,如果当前日期为非交易日则返回下一交易日的日期。day默认取值为0,不建议获取交易所还未公布的交易日期(int);
返回
date:datetime.date日期对象
示例
所有的示例均在回测模式下运行,实盘模式使用时可参考回测模式下的结果。
示例1
def initialize(context):
log.info(get_trading_day())
def handle_data(context, data):
pass
将回测时间设置为2023-01-01至2023-01-03,输出结果如下:
2023-01-03 00:00:00 - INFO - 2023-01-03
2023-01-01和2023-01-02为非交易日,initialize函数不会被调用(该函数只会在回测和交易启动的时候运行一次)。
2023-01-03为交易日,initialize函数被调用,打印get_trading_day函数的返回结果为2023-01-03。
示例2
def initialize(context):
log.info(get_trading_day(-1))
def handle_data(context, data):
pass
同样将回测时间设置为2023-01-01至2023-01-03,输出结果如下:
2023-01-03 00:00:00 - INFO - 2022-12-30
当get_trading_day的参数为负数时,表示要获取当前交易日的数天前的交易日期。
如示例2中所示,参数为-1,当在2023-01-03调用get_trading_day时,会返回2023-01-03前的第1个交易日期是多少。2023-01-02(周一、假期)、2023-01-01(周日)、2022-12-31(周六)均为非交易日,2022-12-30为交易日,因此get_trading_day(-1)的返回结果为2022-12-30。
示例3
def initialize(context):
log.info(get_trading_day(4))
def handle_data(context, data):
pass
同样将回测时间设置为2023-01-01至2023-01-03,输出结果如下:
2023-01-03 00:00:00 - INFO - 2023-01-09
当get_trading_day的参数为正数时,表示要获取当前交易日的数天后的交易日期。
如示例3中所示,参数为4,当在2023-01-03调用get_trading_day时,会返回2023-01-03后的第4个交易日期是多少。2023-01-04(第1个交易日),2023-01-05(第2个交易日),2023-01-06(第3个交易日),2023-01-07(周六),2023-01-08(周日),2023-01-09(第4个交易日),因此get_trading_day(4)返回结果2023-01-09。
博客内容只用于交流学习,不构成投资建议,盈亏自负!
个人博客:http://coderx.com.cn/(优先更新)
项目最新代码:https://gitee.com/sl/quant_from_scratch
欢迎大家转发、留言。有微信群用于学习交流,感兴趣的读者请扫码加微信!
如果认为博客对您有帮助,可以扫码进行捐赠,感谢!
微信二维码 | 微信捐赠二维码 |
---|---|