# context回测对象
# 上下文对象
策略函数中的 context 表示当前回测上下文。
常用字段:
| 字段 | 类型 | 说明 |
|---|---|---|
context.current_dt | datetime | 当前回测时间 |
context.previous_dt | datetime | 上一个 bar 时间 |
context.frequency | str | 当前回测频率 |
context.run_info | RunInfo | 本次回测任务信息 |
context.portfolio | Portfolio | 当前账户和持仓视图 |
context.universe | list[str] | 当前股票池 |
context.stock | str | 单股策略当前工作标的;run_backtest 未传 symbols 时,可在 init(context) 中写入作为股票池来源 |
用户可以在 context 上保存自定义变量:
def init(context):
context.max_hold_count = 5
1
2
2
# 账户对象
context.portfolio 表示当前组合账户。
常用字段:
| 字段 | 说明 |
|---|---|
available_cash | 可用现金 |
frozen_cash | 冻结资金 |
market_value | 持仓市值 |
total_value | 账户总资产 |
portfolio_value | total_value 的兼容别名 |
returns | 当前收益率 |
pnl | 累计盈亏 |
positions | 当前持仓字典 |
示例:
def handle_bar(context, bar_dict):
cash = context.portfolio.available_cash
total_value = context.portfolio.total_value
log.info("cash=%s total=%s", cash, total_value)
1
2
3
4
2
3
4
账户查询函数:
portfolio = get_portfolio()
cash = get_cash()
positions = get_positions()
position = get_position("000001.SZ")
1
2
3
4
2
3
4
说明:
get_portfolio(refresh=True)返回当前Portfolio快照;默认会先刷新资金和持仓。get_cash(refresh=True)返回当前可用资金,等同于get_portfolio().available_cash。get_positions(symbols=None, order_book_id=None, refresh=True)返回dict[str, Position];不传过滤条件时返回全部持仓。get_position(symbol=None, order_book_id=None, refresh=True)返回单只证券Position;无持仓返回None;未传代码会报错。- 这些函数只读取当前 Python 运行期账户视图,不直接调用行情主站 RPC;回测阶段来自模拟账户,执行阶段来自
account_snapshot。
# 持仓对象
context.portfolio.positions 是持仓字典。
示例:
pos = context.portfolio.positions.get("000001.SZ")
if pos and pos.amount > 0:
log.info("持仓数量: %s", pos.amount)
1
2
3
2
3
Position 常用字段:
| 字段 | 说明 |
|---|---|
symbol | 证券代码 |
amount | 持仓总数量 |
available_amount | 可卖数量,股票回测中会扣除当前交易日买入数量 |
closeable_amount | available_amount 的兼容别名 |
cost_basis | 持仓成本 |
avg_cost | cost_basis 的兼容别名 |
last_price | 最新价 |
market_value | 持仓市值 |
pnl | 持仓盈亏 |
# Order对象
Order 常用字段:
| 字段 | 说明 |
|---|---|
order_id | 订单编号 |
symbol | 证券代码 |
amount | 委托数量,买入为正,卖出为负 |
price | 委托价格 |
filled | 已成交数量 |
status | 订单状态,例如 filled、rejected、cancelled |
side | buy 或 sell |
datetime | 下单时间 |
filled_dt | 成交时间 |
avg_price | 平均成交价 |
message | 失败或状态说明 |
cancelable | 是否可撤 |
# Trade对象
Trade 常用字段:
| 字段 | 说明 |
|---|---|
trade_id | 成交编号 |
order_id | 对应订单编号 |
symbol | 证券代码 |
amount | 成交数量 |
price | 成交价格 |
side | buy 或 sell |
datetime | 成交时间 |
cost | 交易成本 |
# Bar对象
bar_dict 保存当前时间点行情。
示例:
def handle_bar(context, bar_dict):
bar = bar_dict["000001.SZ"]
log.info("open=%s close=%s volume=%s", bar.open, bar.close, bar.volume)
1
2
3
2
3
Bar 常用字段:
| 字段 | 说明 |
|---|---|
symbol | 证券代码 |
datetime | bar 时间 |
open | 开盘价 |
high | 最高价 |
low | 最低价 |
close | 收盘价 |
volume | 成交量 |
turnover | 成交额 |
money | turnover 的兼容别名 |
high_limit | 涨停价,字段存在且大于 0 时会参与买入拒单判断 |
low_limit | 跌停价,字段存在且大于 0 时会参与卖出拒单判断 |
prev_close | 前收盘价 |
avg_price | 均价 |
paused | 是否停牌 |
is_paused | paused 的兼容别名 |
is_st | 是否 ST |