3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 A 股市场中,盘后固定价格交易(科创板、创业板及部分符合条件的股票)是量化交易中规避盘中价格剧烈波动、锁定收盘价成交的重要手段。在 ptrade 平台中,我们可以通过专门的盘后交易接口与定时器实现精细化控制。
after_trading_orderafter_trading_order(security, amount, entrust_price)security (str):股票代码(如 '300001.SZ')。amount (int):交易数量。正数表示买入,负数表示卖出。entrust_price (float):买卖限价(通常为当日收盘价)。after_trading_cancel_orderafter_trading_cancel_order(order_param)order_param (str/Order):Order 对象或者 order_id。由于盘后固定价交易的撮合发生在 15:00 ~ 15:30,我们通常需要:
run_daily 定时器在指定时间触发盘后委托函数。after_trading_order 接口进行报单。以下源码展示了如何使用 run_daily 定时器在 15:05 自动获取收盘价,并对目标股票进行盘后固定价买入委托,同时在 15:20 对未成交的委托进行撤单保护。
# -*- coding: utf-8 -*-
import time
def initialize(context):
# 1. 设置目标操作股票(例如创业板股票 300001)
g.security = '300001.SZ'
set_universe(g.security)
# 2. 注册定时任务:15:05 执行盘后固定价下单
run_daily(context, post_market_order_func, time='15:05')
# 3. 注册定时任务:15:20 执行未成交撤单保护
run_daily(context, post_market_cancel_func, time='15:20')
# 存储盘后委托的订单ID
g.post_order_id = None
def post_market_order_func(context):
log.info("触发 15:05 盘后固定价委托流程...")
# 获取最新行情快照以取得收盘价
snapshot = get_snapshot(g.security)
if snapshot and g.security in snapshot:
last_px = snapshot[g.security].get('last_px', 0)
trade_status = snapshot[g.security].get('trade_status', '')
# 确保获取到有效的收盘价格
if last_px > 0:
log.info("股票 %s 今日收盘价为: %s,准备进行盘后固定价买入" % (g.security, last_px))
# 盘后固定价买入 200 股
order_id = after_trading_order(g.security, 200, float(last_px))
if order_id:
g.post_order_id = order_id
log.info("盘后固定价委托成功,订单ID: %s" % order_id)
else:
log.error("盘后固定价委托失败")
else:
log.error("未能获取到有效收盘价")
else:
log.error("获取行情快照失败")
def post_market_cancel_func(context):
log.info("触发 15:20 盘后撤单检查...")
if g.post_order_id:
# 执行盘后固定价撤单
after_trading_cancel_order(g.post_order_id)
log.info("已对盘后订单 %s 发起撤单申请" % g.post_order_id)
g.post_order_id = None
def handle_data(context, data):
# 盘后固定价逻辑由定时器 run_daily 驱动,此处保持 pass
pass
after_trading_order 的价格建议使用 float(round(price, 2)) 进行格式化。after_trading_order)仅在实盘/仿真交易环境且券商柜台支持的情况下有效,回测环境不支持此接口的撮合模拟。