Jikipedia
Jikipedia量化聚宽新手入门教程(JoinQuant 平台实操)聚宽策略框架(initialize / handle_data / before_trading_start)
概念笔记

聚宽策略框架(initialize / handle_data / before_trading_start)

聚宽策略由几个「平台在特定时机自动调用」的入口函数组成:initialize 只跑一次,beforetradingstart 每个交易日开盘前跑一次,handledata 每个周期跑;自定义函数靠 rundaily 挂进循环。

量化聚宽initializehandle_databefore_trading_start策略框架

一句话

写聚宽策略 = 填入口函数:initialize(context) 开头做一次(设股票、参数、基准、注册定时任务);before_trading_start(context) 每个交易日开盘前做一次(放每天只取一次的数据);handle_data(context, data) 每个周期做(按天回测时在 9:30 执行);需要更多节奏时用 run_daily 注册自定义函数。

当前理解

为什么是这套入口

  • 任何策略都能拆成「开头一次」+「每天循环」两段(《十行代码》):人操作也是先定股票、再每天看价做买卖。initialize 与 handle_data 正是这两段的代码化。handle_data 按天回测时操作在 9:30 执行。
  • g 是全局变量容器,initialize 里设的值在其它函数里都能读(如 g.securityg.stocksnum)。

三个入口的时机与分工(第 3 篇追涨示例最清楚)

  • initialize:整个回测/模拟盘开始时执行一次。负责:设 g 变量、set_benchmark(基准)、set_commission(手续费)、set_slippage(滑点)、set_option('use_real_price', True)(动态复权)、set_universe(股票池)、run_daily(注册定时函数)。
  • before_trading_start:每个交易日开盘前被调用一次;开盘之后当天不再调用,直到次日。适合放「每天取一次」的活(示例里用它取全部候选股的昨日收盘价 history(1,'ld','close',stocks)、清空当日已买集合)。
  • handle_data:每个周期被调用;盘中决策都写这里(示例里限制「下午 13:00 后」才干活)。
  • 自编函数不会自动进循环,必须在 initialize 里 run_daily(func, time) 注册(见 jq-run-daily)。

代码组织的演进

  • 小策略两段就够(第 1 章)。变复杂后(轮动 1.0 → 3.0)按功能抽自定义函数:选股 pick(context)、交易 trade(...)、止损 stop(context)(第 6 篇);把「每天都跑」与「每 N 天跑」拆开。

来源

常见混淆

  • before_trading_start vs handle_data:前者一天一次、开盘前;后者每周期、含盘中。前者放「准备数据」,后者放「按数据决策」。
  • initialize 里取数:教程只把 initialize 当「设置+注册」,行情类实时判断放 handle_data/周期函数;initialize 里写死的东西不随交易日刷新。
  • handle_data 被弃用:第 5 篇说平台推荐 run_daily,handle_data 将被弃用——老教程两套都写,新代码优先 run_daily 模式。

开放问题

  • [需要验证] handle_data 的弃用状态与现行推荐入口(教程为 2015–2017 语境,平台 API 已演进)。
  • [需要验证] 除 initialize/before_trading_start/handle_data/run_daily 外,官方是否还有 after_trading_end 等新入口(raw 未提)。

更新 2026-09-06

检索知识库

按标题、类型或正文检索