问题描述
/
解决方案
在 ptrade 量化交易平台中,run_daily 是一个非常重要的定时周期性函数,用于以日为单位周期性地运行指定的自定义函数。以下是关于 run_daily 的详细用法和运行时间说明:
1. 函数原型
run_daily(context, func, time='9:31')
2. 参数说明
- context:
Context对象,存放有当前的账户及持仓信息,必传参数。 - func: 自定义函数名称。此函数必须以
context作为参数(即def func(context):),必传参数。 - time: 指定周期运行的具体触发时间点。必传字段。
3. 运行时间详解
run_daily 的运行时间在回测环境和实盘交易环境下有所不同:
回测环境
- 分钟级别回测:
time的取值必须指定在交易时间内,即09:31~11:30与13:00~15:00之间。 - 日线级别回测:无论
time设定值是多少,指定的函数都只会在每天的 15:00 执行。
交易环境(实盘/模拟盘)
- 不受回测环境的时间限制,
time可设置的范围为全天:00:00~23:59。
4. 注意事项
- 调用位置:该函数只能在初始化阶段的
initialize函数中调用。 - 多任务支持:该函数可以多次设定,以实现多个不同的定时任务。
- 使用场景:仅在回测、交易模块可用,研究模块不可用。
5. 代码示例
以下是一个使用 run_daily 每天定时获取财务数据的策略示例:
# 定义一个财务数据获取函数,每天 9:31 执行一次
def initialize(context):
# 设定每天 9:31 运行 get_finance 函数
run_daily(context, get_finance, time='9:31')
g.security = '600570.SS'
set_universe(g.security)
# 自定义定时运行的函数,必须包含 context 参数
def get_finance(context):
# 获取恒生电子的资产总计数据
re = get_fundamentals(g.security, 'balance_statement', 'total_assets')
log.info(re)
def handle_data(context, data):
pass
通过合理使用 run_daily,您可以将一些不需要每分钟或每个 tick 都执行的逻辑(如盘前数据准备、盘后数据统计、定时调仓等)分离出来,从而提高策略的运行效率。