3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在PTrade中,如果您希望在收盘后以收盘价买入股票(通常指科创板和创业板的盘后固定价格交易),可以使用 after_trading_order 函数。
run_daily 将交易函数安排在 15:00 之后执行(例如 15:15)。get_snapshot 获取当天的最新价(即收盘价)。after_trading_order(security, amount, entrust_price) 进行委托。注意,价格必须严格等于收盘价,否则委托无效。以下是一个完整的策略示例,展示了如何在盘后阶段以收盘价买入指定股票。
def initialize(context):
"""
初始化函数
"""
# 设置要操作的股票,这里以一只科创板股票为例
# 注意:盘后固定价格交易主要适用于科创板(688)和创业板(300)
g.security = '688001.SS'
set_universe(g.security)
# 设置定时任务,在交易日的 15:15 执行盘后交易逻辑
# 盘后固定价格交易时段一般为 15:05-15:30
run_daily(context, after_hours_trade, time='15:15')
def after_hours_trade(context):
"""
盘后交易执行函数
"""
stock = g.security
# 获取实时行情快照
# 注意:get_snapshot 仅在交易模块可用,回测模式下可能不支持或行为不同
snapshot = get_snapshot(stock)
if snapshot and stock in snapshot:
# 获取最新价,在15:00之后,last_px 即为当日收盘价
close_price = snapshot[stock].get('last_px')
# 确保价格有效
if close_price and close_price > 0:
# 打印日志
log.info("当前股票 %s 收盘价为: %s,准备进行盘后固定价申报" % (stock, close_price))
# 下单买入 200 股
# 参数说明:股票代码,数量(正数买入),委托价格(必须是收盘价)
order_id = after_trading_order(stock, 200, float(close_price))
if order_id:
log.info("盘后委托成功,订单ID: %s" % order_id)
else:
log.info("盘后委托失败")
else:
log.info("获取收盘价失败或价格无效")
else:
log.info("获取行情快照失败")
def handle_data(context, data):
"""
盘中运行函数,此处留空,因为我们只在盘后操作
"""
pass
after_trading_order 主要用于科创板和创业板的盘后固定价格交易。entrust_price 必须是浮点数(float),且必须等于当天的收盘价。get_snapshot 可能无法获取数据(回测通常使用 data[security]['close']),且盘后撮合逻辑取决于回测引擎的配置。after_trading_cancel_order 函数。Q: 为什么我在回测中调用 get_snapshot 报错或返回空?
A: get_snapshot 是获取实时L1/L2行情的接口,通常仅在**交易(实盘/仿真)**模块可用。在回测中,您应该使用 data[security]['close'] 或 get_history 来获取价格数据。
Q: 主板股票(600xxx, 000xxx)可以使用这个策略吗?
A: 通常不可以。沪深主板目前没有像科创板/创业板那样的“盘后固定价格交易”时段(15:05-15:30)。主板在15:00收盘后即停止竞价交易。如果您需要在收盘时成交,建议在 14:57 左右使用 order_target 或 order 配合市价单或限价单参与尾盘集合竞价。
Q: after_trading_order 的成交原则是什么?
A: 盘后固定价格交易遵循“时间优先”的原则。即按照申报时间先后顺序进行撮合,成交价格固定为当日收盘价。如果当日该股票没有成交(如全天停牌)或收盘价无法确定,则无法进行盘后固定价格交易。