🚀 AI 一键生成 ptrade 策略代码
立即体验

ptrade 平台 order_market 函数 market_type 必传字段详解与报错解决

ptrade | 发布时间: 2026/5/29
以下内容由 EasyQuant 生成。

问题描述

为什么order_market中market_type是必传字段,不传入会报错?

/

解决方案

为什么 market_type 是必传字段?

在 ptrade 量化交易平台中,order_market 函数用于按市价进行委托下单。其函数签名如下:

order_market(security, amount, market_type, limit_price=None)

从 API 设计上可以看出,market_type 没有默认值,因此在 Python 语法层面它是一个位置参数(必传参数)。如果不传入该参数,Python 解释器会直接抛出 TypeError 报错。

业务逻辑层面来看,market_type 必须指定的原因在于:中国 A 股市场的不同交易所(上交所、深交所)以及不同板块(主板、科创板、创业板)对市价委托的支持类型是完全不同的。交易引擎无法为你默认选择一个“通用”的市价单类型,必须由策略开发者明确指定具体的市价撮合方式。


market_type 支持的参数枚举

根据 ptrade API 文档,market_type 接受整型(int)参数,具体代表的市价委托类型如下:

  • 0:对手方最优价格
  • 1:最优五档即时成交剩余转限价
  • 2:本方最优价格
  • 3:即时成交剩余撤销
  • 4:最优五档即时成交剩余撤销
  • 5:全额成交或撤单

各市场支持的 market_type 规则

在传入 market_type 时,必须严格遵守标的股票所属市场的规则,否则即使传入了参数,也会因为交易所不支持该市价类型而导致委托失败(废单):

  1. 上证非科创板股票(沪市主板):仅支持参数 14
  2. 上证科创板股票:支持参数 0124。(注:科创板市价单通常还需要配合 limit_price 保护限价使用)。
  3. 深证股票(深市主板、创业板):支持参数 02345

正确的代码示例

为了避免报错,调用 order_market 时请务必传入第三个参数。以下是一个正确的调用示例:

def initialize(context):
    # 设置操作的股票池:恒生电子(沪市主板)
    g.security = '600570.SS'
    set_universe(g.security)

def handle_data(context, data):
    security = g.security
    
    # 错误写法:未传入 market_type,会导致 TypeError 报错
    # order_market(security, 100)
    
    # 正确写法:买入 100 股,使用 market_type=1(最优五档即时成交剩余转限价)
    # 因为 600570.SS 是沪市主板股票,支持 1 和 4
    order_market(security, 100, 1)
    log.info(f"已使用市价单委托买入 {security}")

总结:在编写 ptrade 策略时,务必根据交易标的所属的市场,显式地为 order_market 传入合法的 market_type 参数,这样才能确保市价单被柜台正确接收和执行。