3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 PTrade 量化交易平台中,策略的运行是基于事件驱动的框架。整个策略的生命周期主要由 initialize、before_trading_start、handle_data 和 after_trading_end 这四个核心函数构成。
以下是这四个函数的详细解释、运行时间及推荐用途:
这是策略的起点,用于定义全局变量和设置策略的基础环境。
set_universe 设定需要关注的标的。g 中的变量(如 g.security,g.count 等),这些变量可以在其他函数中被调用和修改。set_benchmark)、佣金 (set_commission)、滑点 (set_slippage) 等(仅回测有效)。run_daily 或 run_interval 注册非默认频率的定时任务。get_price),因为此时策略尚未开始推进时间。get_index_stocks(建议在 before_trading_start 中调用)。用于在每日开盘前进行数据准备和信号过滤。
set_universe。get_fundamentals)、历史行情 (get_history) 等。filter_stock_by_status)。这是策略的“大脑”,用于执行具体的交易逻辑。
data 对象或 get_snapshot 获取当前价格、成交量等。get_MACD、get_RSI 或自行计算均线等指标。order、order_target、order_value 等接口进行买卖操作。tick_data 函数,而不是 handle_data。用于每日收盘后的总结、数据整理或清理工作。
get_trades_file)。为了方便理解,可以将一天的运行流程总结如下:
initialize (只运行一次)before_trading_start (准备数据)handle_data (循环运行:看行情、算指标、下单)after_trading_end (收盘总结)Q: 我可以在 initialize 里下单买股票吗?
A: 不可以。initialize 运行时市场尚未开启,且该函数主要用于环境初始化。下单操作必须在 handle_data(盘中)或 after_trading_order(盘后固定价交易)中进行。
Q: 为什么建议在 before_trading_start 中获取财务数据而不是 handle_data?
A: 财务数据(如市盈率、净利润)通常按季度更新,且在盘中不会变化。在 before_trading_start 中获取可以减少盘中 handle_data 的计算压力,提高策略运行效率,特别是在分钟级策略中。
Q: handle_data 中的 data 参数有什么用?
A: data 参数包含了当前周期(分钟或日)的行情数据。例如,使用 data['600570.SS']['close'] 可以快速获取恒生电子的当前收盘价(或最新价),比调用 get_price 更高效。
Q: 如果我想在每天 10:00 固定交易,应该写在哪里?
A: 你可以在 initialize 中使用 run_daily(context, my_trade_func, time='10:00') 来注册一个定时任务。这样系统会在每天 10:00 自动调用你自定义的 my_trade_func 函数,而不需要在 handle_data 里写复杂的判断逻辑。