楼主: wyiii-
18 0

[有问有答] 【PTrade】PTrade 集合竞价策略开发教程 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2018-11-24
最后登录
2018-11-24

楼主
wyiii- 发表于 昨天 19:16 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

如何在 PTrade 中实现开盘集合竞价追涨停策略?

本文将详细介绍如何借助 PTrade 平台的 API 功能,在 A 股市场集合竞价阶段(如 09:23 至 09:25)捕捉潜在涨停股票,并通过量化方式自动执行买入操作。该策略适用于希望在开盘前完成布局、抢占先机的投资者。

run_daily

策略核心逻辑概述

本策略聚焦于交易日早盘集合竞价末期,利用高精度行情数据判断个股是否已触及涨停价,并在价格确认后立即挂单参与成交。其主要运行机制如下:

  • 运行时间设定:策略通过定时任务函数在每个交易日的 09:24 触发执行。此时处于集合竞价不可撤单阶段(09:20–09:25),系统撮合价格稳定,接近最终开盘价,具备较高参考价值。
  • 行情数据获取:使用实时快照接口获取目标股票的关键行情字段,包括最新虚拟成交价与当日涨停价。
  • 触发条件判断:若当前撮合价等于或非常接近涨停价,则视为满足买入条件。
  • 交易执行方式:以涨停价进行限价委托下单,确保进入买一队列,提升成交概率。
  • 资金分配方案:示例中采用均等资金分配法,即将账户可用现金平均分配至各候选股票;实际应用中可根据风险偏好或策略模型优化仓位配置。
get_snapshot

PTrade 策略代码实现

def initialize(context):
    """
    初始化函数:设置股票池并注册每日定时任务
    """
    # 定义监控和交易的股票列表(示例选用恒生电子和平安银行)
    g.security_list = ['600570.SS', '000001.SZ']
    set_universe(g.security_list)

    # 注册每日运行函数,指定时间为 09:24
    run_daily(context, aggregate_auction_trade, time='09:24')


def aggregate_auction_trade(context):
    """
    集合竞价阶段的交易处理逻辑
    """
    # 获取当前可用资金
    cash = context.portfolio.cash

    # 若无有效股票池或资金不足,则终止执行
    if not g.security_list or cash <= 0:
        return

    # 计算每只股票可投入金额(简单均分)
    cash_per_stock = cash / len(g.security_list)

    # 批量拉取行情快照,提高效率
    snapshots = get_snapshot(g.security_list)

    for stock in g.security_list:
        stock_data = snapshots.get(stock)
        if not stock_data:
            continue

        # 提取关键字段
        current_price   = stock_data.get('last_px')     # 最新撮合价
        limit_up_price  = stock_data.get('up_px')       # 涨停价
        status          = stock_data.get('trade_status') # 交易状态

        # 数据完整性校验
        if current_price is None or limit_up_price is None:
            continue

        # 排除停牌或非正常交易状态的股票
        if status in ['HALT', 'SUSP', 'STOPT']:
            log.info("股票 %s 当前不可交易,已跳过" % stock)
            continue

        # —— 核心策略判断 ——
        # 判断当前价格是否达到或超过涨停价(考虑浮点误差)
        if float(current_price) >= float(limit_up_price):
            log.info("股票 %s 在集合竞价中触及涨停,准备买入。当前价: %s, 涨停价: %s" % (stock, current_price, limit_up_price))

            # 发起买入指令,按金额下单,指定限价为涨停价
            order_id = order_value(stock, cash_per_stock, limit_price=limit_up_price)

            if order_id:
                log.info("股票 %s 下单成功,订单ID: %s" % (stock, order_id))
            else:
                log.error("股票 %s 下单失败" % stock)


def handle_data(context, data):
    """
    盘中持续运行函数(本策略主要依赖集合竞价时点,此函数可留空)
    可用于后续扩展止盈止损或其他日内逻辑
    """
    pass

注意事项与回测说明

在实盘部署或历史回测过程中需注意以下几点:

  • 集合竞价期间的行情快照频率和数据准确性可能受平台限制,真实撮合结果以交易所公布为准
  • 回测环境通常无法完全还原集合竞价的真实撮合机制,因此回测表现可能存在偏差,建议结合模拟盘验证。
  • 由于涨停板上委托量巨大,即使按时下单也未必能保证成交,尤其对于大资金账户应谨慎评估冲击成本。
  • 代码中使用的 get_snapshot 接口需确保在目标时间段内支持调用,且返回字段包含 last_pxup_px
last_px

策略在满足条件时会输出日志信息,便于跟踪执行过程。例如当某只股票价格触及涨停,系统将记录相关信息并尝试下单。

up_px

该策略主要适用于实盘或仿真交易环境,因为在普通的回测模式下,函数可能无法获取到精确的集合竞价tick数据,具体取决于所使用回测数据的精度。

风险提示:追涨停是一种高风险操作方式。在集合竞价阶段以涨停价挂单买入,若开盘后出现炸板(即涨停被打开),可能导致当日出现较大亏损,请谨慎使用。

API调用说明:代码中采用了

get_snapshot
的方式获取盘口实时信息,包括涨跌停价格和当前交易状态等,这是目前获取此类数据最为高效的方法之一。

Python版本兼容性:本代码已适配 Python 3.5 的语法标准,未使用如 f-string 等高版本特性,确保在较早版本环境中也可正常运行。

get_snapshot
在回测中的准确性如何?
在 PTrade 的回测环境下,对
get_snapshot
的支持较为有限,通常只能获取当日的开盘价、收盘价等静态字段,无法还原真实的逐笔竞价过程。因此,此策略的设计初衷是面向实盘场景。

为何选择在 09:24 执行而非 09:15 或 09:30?
09:15 至 09:20 为可撤单时段,市场中存在较多虚假申报行为,价格波动剧烈;而 09:20 至 09:25 为不可撤单阶段,此时的撮合结果更接近真实开盘价。选择在 09:24 下单,可以在最终撮合前完成委托,从而尽早进入排队序列,提升成交优先级。

如何防止买入处于停牌状态的股票?
代码中已加入

trade_status
的状态判断逻辑。当股票处于
HALT
(暂停交易)或
SUSP
(停盘)状态时,系统将自动跳过该标的,避免产生无效订单或引发异常。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Trade Aggregate Portfolio Snapshot security

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-5 20:38