Appearance
策略运行时对象
全局对象
g-全局对象
g 是策略运行时的全局对象。
举例
python
g.security = 'sz000001'上下文对象
context-上下文对象
context 是策略运行时的上下文对象,用于在回测、仿真、实盘过程中,向策略函数提供当前时间、上一交易日、账号信息、运行参数、股票池等核心状态信息。
属性
| 字段名 | 字段类型 | 说明 | 适用范围 |
|---|---|---|---|
| portfolio | Portfolio | 总账号(Portfolio 对象)。包含资金、持仓、收益等信息。 | 回测、仿真、实盘 |
| run_params | Run_params | 运行参数对象(Run_params)。包含回测起止日期、运行频率、回测类型等信息。 | 回测、仿真、实盘 |
| universe | tuple[str] | 股票池,由 set_universe 设置。类型为 tuple(如:('sz000001','sh600000'))。 | 回测、仿真、实盘、扩展指标、因子均可使用。 |
| previous_date | datetime.date | 上一个交易日(datetime.date 对象)。用于避免未来数据,适合读取上一交易日行情。 | 回测、仿真、实盘、扩展指标、因子均可使用。 |
| current_dt | datetime.datetime | 策略运行时的当前时间(datetime.datetime 对象)。日频回测中,handle_data 阶段通常为当日 09:30。 | 回测、仿真、实盘、扩展指标、因子均可使用。 |
举例
python
log.info('上个交易日为', context.previous_date)
# 输出: 上个交易日为2025-06-01
log.info('当前时间为', context.current_dt)
# 输出:当前时间为2025-06-02 09:30:00
log.info('股票池为', context.universe)
# 输出:股票池为('sz000001','sh600000')账号对象
Portfolio -账号对象(总账号)
Portfolio 是策略运行时的账号对象,向策略函数提供可用资金、持仓明细、资产总值及累计收益等核心财务状态信息。可在回测、仿真、实盘中通过 context.portfolio 获取。
属性
| 字段名 | 字段类型 | 说明 |
|---|---|---|
| inout_cash | float | 出入金(累计资金注入/抽取)。 |
| available_cash | float | 可用资金。 |
| locked_cash | float | 冻结资金。 调试示例:0.0 |
| margin | float | 保证金(若启用融资融券/期货等可能使用)。 |
| positions | dict[str, Position] | 持仓字典:{security: Position对象}。 |
| long_positions | dict[str, Position] | 持多仓字典:{security: Position对象}。 |
| short_positions | dict[str, Position] | 持空仓字典:{security: Position对象}。 |
| total_value | float | 总资产(资金余额 + 当前持仓市值)。 |
| positions_value | float | 持仓市值(所有持仓 value 之和)。 |
| returns | float | 总权益的累计收益,(当前总资产 + 今日出入金 - 昨日总资产) / 昨日总资产。 |
| starting_cash | float | 初始资金。 |
举例
python
def handle_data(context, data):
stock = 'sz000001'
amount = 100
# 买入:正数
order(stock, amount)
# 卖出:负数(示例:卖出 100 股)
# order(stock, -amount)
log.info('最新可用资金为', context.portfolio.available_cash)
# 输出: 最新可用资金为 998957.0
log.info('当前总资产为', context.portfolio.total_value)
# 输出: 当前总资产为 999995.0
log.info('当前持仓市值为', context.portfolio.positions_value)
# 输出: 当前持仓市值为 1038.0运行参数对象
Run_params -运行参数对象
可在回测、仿真、实盘中通过 context.run_params 获取。
属性
| 字段名 | 字段类型 | 说明 |
|---|---|---|
| type | str | 运行类型。 |
| frequency | str | 运行频率。 |
| start_date | datetime.date | 开始日期。 |
| end_date | datetime.date | 结束日期。 |
举例
python
def initialize(context):
rp = context.run_params
log.info('回测类型:', rp.type)
# 输出: 回测类型: backtest
log.info('运行频率:', rp.frequency)
# 输出: 运行频率: minute
log.info('开始日期:', rp.start_date)
# 输出: 开始日期: 2025-01-02
log.info('结束日期:', rp.end_date)
# 输出: 结束日期: 2025-01-03持仓对象
Position -持仓对象
Position用于在交易过程中向策略函数提供特定证券的成本价格、持仓规模、可平仓份额及头寸方向等底层明细信息,通过 context.portfolio.positions[security]、context.portfolio.long_positions[security] 或 context.portfolio.short_positions[security] 获取。
⚠️ 必须使用文档指定的方式访问 Position
- 获取方式:必须通过
context.portfolio.positions[security]、context.portfolio.long_positions[security]或context.portfolio.short_positions[security]获取 - 属性访问:只能使用文档列出的属性字段(如
security,price,avg_cost,total_amount,closeable_amount等),不要访问未定义的字段 - 判空处理:建议先用
.get(security)判断是否存在,避免 KeyError
属性
| 字段名 | 字段类型 | 说明 |
|---|---|---|
| security | str | 标的代码,如:sz000001 |
| price | float | 最新行情价格(用于计算持仓市值、浮动盈亏等)。 |
| acc_avg_cost | float | 累计持仓成本(清仓/减仓时也会更新)。 该持仓累积收益都会用于计算成本(初始 acc_avg_cost=0 且 amount=0)。 加仓更新: new_acc_avg_cost = (acc_avg_cost * amount + trade_value + commission) / (amount + trade_amount) 减仓更新: new_acc_avg_cost = (acc_avg_cost * amount - trade_value + commission) / (amount - trade_amount) 说明:commission 为本次买入/卖出的手续费;trade_value = trade_price * trade_amount。 |
| avg_cost | float | 当前持仓成本(仅开仓/加仓时更新;卖出时 avg_cost 不变)。 该值通常用于计算浮动盈亏。 开仓/加仓更新: new_avg_cost = (position_value + trade_value + commission) / (position_amount + trade_amount) |
| hold_cost | float | 当日持仓成本(用于日内成本口径)。 当日无收益: 清算后 hold_cost = 前收价 加仓: hold_cost = (hold_cost * amount + trade_value) / (amount + trade_amount) 减仓: hold_cost = (hold_cost * amount - trade_value) / (amount - trade_amount) 其中 trade_value = trade_price * trade_amount。 |
| locked_amount | float / int | 挂单冻结仓位(下单未成交冻结的数量)。 |
| total_amount | float / int | 总仓位(不包含挂单冻结仓位)。 如需获取"当前占用仓位",通常应:total_amount + locked_amount。 |
| closeable_amount | float / int | 可卖出的仓位(可用数量)。 |
| today_amount | float / int | 今天开的仓位数量。 |
| value | float | 标的价值(持仓市值)。 计算方法:value = price * total_amount * multiplier 其中:股票/基金 multiplier=1;期货 multiplier=合约乘数。 |
| side | str | 多/空方向:'long' 或 'short'。 |
举例
python
pos = context.portfolio.positions.get('sz000001')
if pos:
log.info('标的:', pos.security)
# 输出: 标的: sz000001
log.info('最新价:', pos.price)
# 输出: 最新价: 10.38
log.info('当前成本:', pos.avg_cost)
# 输出: 当前成本: 10.38
log.info('总仓位:', pos.total_amount)
# 输出: 总仓位: 100
log.info('可卖数量:', pos.closeable_amount)
# 输出: 可卖数量: 0
log.info('持仓市值:', pos.value)
# 输出: 持仓市值: 1038.0
log.info('方向:', pos.side)
# 输出: 方向: long订单对象
Order - 订单对象
Order 表示一次下单请求及其状态信息。包含订单ID、下单标的、数量、状态、成交情况、交易费用等信息。通常由下单函数(order/order_target等)返回,或通过 get_orders() 查询获取。
属性
| 字段名 | 字段类型 | 说明 |
|---|---|---|
| order_id | str | 订单ID,唯一标识符 |
| status | int | 订单状态,一个 OrderStatus 值(见 OrderStatus 枚举) |
| add_time | datetime.datetime | 订单添加时间 |
| security | str | 标的代码 |
| amount | int | 下单数量,不管是买还是卖,都是正数 |
| filled | int | 已经成交的股票数量,正数 |
| side | str | 多/空方向,'long' / 'short' |
| action | str | 开/平,'open' / 'close' |
| price | float | 平均成交价格,已经成交的股票的平均成交价格(一个订单可能分多次成交) |
| commission | float | 交易费用(佣金、税费等) |
| style | OrderStyle | 订单类型对象(LimitOrderStyle 或 MarketOrderStyle) |
| profit | float | 平仓盈亏 |
举例
python
oid = order('sz000001', 87500)
log.info(get_orders(oid))
# 输出:
# UserOrder({'order_id':'ZLT-0000000--sz000001','status':9,'add_time':'2024-09-25 09:30:00',
# 'security':'sz000001','amount':87500,'filled':87500,'side':'long','action':'open',
# 'price':10.63,'commission':279.04,'style':MarketOrderStyle:_limit_price=0.0,'profit':0.0})成交记录对象
Trade-成交记录对象
Trade 表示订单的一次成交记录;一个订单可能会发生多次成交(部分成交/分笔成交),因此一个 order 可能对应多个 Trade。
属性
| 字段名 | 字段类型 | 说明 |
|---|---|---|
| time | datetime.datetime | 交易时间(datetime.datetime 对象) |
| security | str | 标的代码 |
| amount | int | float | 交易数量 |
| price | float | 交易价格 |
| trade_id | str | 交易记录 id |
| order_id | str | 对应的 order_id |
返回值
| 返回值类型 | 说明 |
|---|---|
| Trade | 成交记录对象(Trade)。通常由订单成交回报、查询接口等返回。 |
| dict[str, Trade] | 多笔成交记录时,可能以字典形式返回:key 为标识(如交易/订单键),value 为 Trade 对象。 |
举例
python
oid = order('sz000001', 87500)
log.info(get_trades())
# 输出:
# Trade({'trade_id': 'ZLT-0000000--sz000001-1', 'order_id': 'ZLT-0000000--sz000001',
# 'time': '2024-09-25 09:30:00', 'amount': 87500, 'price': 10.63})订单状态
OrderStatus-订单状态枚举
OrderStatus 用于表示订单当前所处的状态(如:待申报、已申报、撤单、成交等)。通常在订单对象(Order)或订单查询接口的返回结果中出现,用于判断订单生命周期阶段并做相应处理。
取值
python
class OrderStatus():
# 待申报
prepare = 1
# 已申报
already = 2
# 废单
cancel = 3
# 送转股
share = 4
# 未成交
unfilled = 5
# 部分成交
partially_filled = 6
# 部成部撤
partially_cancelled = 7
# 全部撤单
cancelled = 8
# 全部成交
filled = 9返回值
| 返回值类型 | 说明 |
|---|---|
| int | 订单状态码,对应 OrderStatus 中的取值(1~9)。 |
状态码
| 状态码 | 状态字段 | 中文含义 |
|---|---|---|
| 1 | prepare | 待申报 |
| 2 | already | 已申报 |
| 3 | cancel | 废单 |
| 4 | share | 送转股 |
| 5 | unfilled | 未成交 |
| 6 | partially_filled | 部分成交 |
| 7 | partially_cancelled | 部成部撤 |
| 8 | cancelled | 全部撤单 |
| 9 | filled | 全部成交 |
举例
python
status = order.status
log.info(status)
# 输出:6
# (示例:当订单状态为“部分成交”时)订单类型
OrderStyle-订单类型对象
OrderStyle 用于描述下单方式(如:限价单、市价单)。通常作为下单函数(如 order / order_target 等)的参数传入,用于控制成交价格的约束方式。
类型
python
# 限价单
class LimitOrderStyle(OrderStyle):
def __init__(self, limit_price):
self.limit_price = limit_price
# 市价单:交易科创板时,limit_price 为保护限价
class MarketOrderStyle(OrderStyle):
def __init__(self, limit_price):
self.limit_price = limit_price参数
| 类型 | 构造参数 | 参数类型 | 说明 |
|---|---|---|---|
| LimitOrderStyle | limit_price | float | 限价单价格(以该价格或更优价格成交) |
| MarketOrderStyle | limit_price | float | 市价单保护限价(普通标的可理解为保护价;交易科创板时该值为保护限价) |
返回值
| 返回值类型 | 说明 |
|---|---|
| OrderStyle | 下单方式对象(通常传入下单接口,不单独作为结果返回) |
行情切片对象
Bar-行情切片对象
Bar 表示当前单位时间(如:当日/当前分钟)的行情信息,用于读取最新价、涨跌停价、是否停牌、昨收、今开等。
属性
| 字段名 | 字段类型 | 说明 |
|---|---|---|
| last_price | float | 最新价 |
| high_limit | float | 涨停价 |
| low_limit | float | 跌停价 |
| paused | bool | 是否停牌或暂停交易;当停牌、未上市或退市后返回 True |
| is_st | bool | 是否 ST(包含 st、*st);是返回 True,否则 False |
| pre_close | float | 昨收 |
| day_open | float | 当天开盘价 |
| name | str | 股票当前名称;可用于判断当天是否 ST/*ST,是否快要退市等 |
| iopv | float | 基金份额参考净值(仅适用于基金) |
返回值
| 返回值类型 | 说明 |
|---|---|
| Bar | 行情切片对象(通常由行情接口返回,如 get_current_data 等) |
| dict[str, Bar] | 多标的返回字典:key 为证券代码(str),value 为 Bar 对象 |
举例
python
bar = get_current_data()['sz000001']
log.info(bar.last_price, bar.high_limit, bar.low_limit, bar.paused)
# 输出示例:
# 10.63 11.69 9.57 False逐笔快照
Tick-逐笔快照对象
Tick 表示 tick 事件发生时盘面的一个快照(一条 tick 所包含的信息)。 注:tick对象在回测的时候没有数据,返回类型是bar,只有仿真才有推送。
属性
| 字段名 | 字段类型 | 说明 |
|---|---|---|
| security | str | 标的代码 |
| datetime | datetime.datetime | tick 发生的时间 |
| current | float | 最新价 |
| open | float | 当日开盘价 |
| high | float | 截至当前时刻的最高价 |
| low | float | 截至当前时刻的最低价 |
| volume | float | 截至当前时刻的成交量 |
| money | float | 截至当前时刻的成交额 |
| a1_v ~ a5_v | float | 卖一量 ~ 卖五量(期货一般仅有卖一量) |
| a1_p ~ a5_p | float | 卖一价 ~ 卖五价(期货一般仅有卖一价) |
| b1_v ~ b5_v | float | 买一量 ~ 买五量(期货一般仅有买一量) |
| b1_p ~ b5_p | float | 买一价 ~ 买五价(期货一般仅有买一价) |
返回值
| 返回值类型 | 说明 |
|---|---|
| Tick | 逐笔快照对象(Tick) |
| dict[str, Tick] | 多标的返回字典:key 为证券代码(str),value 为 Tick 对象 |