3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化交易平台中,进行 tick 级别交易时,准确判断标的的当前交易状态(如是否停牌、是否处于连续竞价阶段)对于避免废单和控制交易逻辑至关重要。
可以通过以下两种主要方式在 tick_data 或 handle_data 中获取交易状态:
tick_data 中直接从 data 参数获取在 tick_data(context, data) 函数中,data 参数是一个字典,其结构中包含了当前 tick 的详细数据。你可以直接通过 data[security]['tick']['trade_status'] 获取交易状态。
def initialize(context):
g.security = '600570.SS' # 恒生电子
set_universe(g.security)
def tick_data(context, data):
security = g.security
if security in data:
# 获取当前 tick 的交易状态
trade_status = data[security]['tick']['trade_status'].values[0]
log.info(f"{security} 当前交易状态为: {trade_status}")
# 判断是否处于连续交易状态
if trade_status == 'TRADE':
log.info("市场处于连续撮合交易状态,可以执行下单逻辑")
elif trade_status == 'SUSP':
log.info("该股票当前停盘")
elif trade_status == 'HALT':
log.info("该股票暂停交易")
get_snapshot 获取实时行情快照如果你在 handle_data 或定时任务中,也可以通过调用 get_snapshot(security) 接口获取包含 trade_status 的行情快照。
def handle_data(context, data):
security = '600570.SS'
snapshot = get_snapshot(security)
if snapshot and security in snapshot:
status = snapshot[security].get('trade_status')
log.info(f"通过快照获取的 {security} 状态为: {status}")
trade_status 常见状态值说明| 状态值 | 中文含义 | 说明 |
|---|---|---|
| START | 市场启动 | 初始化之后,集合竞价前 |
| PRETR | 盘前 | 交易准备阶段 |
| OCALL | 开始集合竞价 | 集合竞价阶段 |
| TRADE | 交易 | 连续撮合交易阶段(正常可交易) |
| HALT | 暂停交易 | 临时停牌或暂停 |
| SUSP | 停盘 | 股票停牌状态 |
| BREAK | 休市 | 中午休市阶段 |
| POSTR | 盘后 | 盘后处理阶段 |
| ENDTR | 交易结束 | 当日交易正式结束 |
| STOPT | 长期停盘 | 停盘天数 >= 1 天 |