🚀 AI 一键生成 ptrade 策略代码

PTrade 平台股票、可转债、ETF、期货的交易单位和价格精度是多少?

ptrade | 发布时间: 2025/12/3
以下内容由 EasyQuant 生成。

问题描述

请告诉我股票、可转债和ETF的下单价格小数点后应该保留几位?它们的最小交易数量是多少?

解决方案

根据PTrade API文档及A股市场规则,关于股票、可转债和ETF的下单价格精度(小数点位数)及最小交易数量的规定如下:

1. 下单价格精度(小数点保留位数)

在PTrade中,使用限价单委托(如 order 函数的 limit_price 参数)时,必须严格遵守以下价格精度,否则会导致委托失败:

交易品种 价格保留位数 最小价差 示例价格
股票 (Stocks) 2位 0.01 15.88
可转债 (Convertible Bonds) 3位 0.001 118.555
ETF基金 3位 0.001 2.456
LOF基金 3位 0.001 1.002

特别注意:
用户在使用 order()order_market()(保护限价)时,务必对传入的价格参数进行四舍五入处理(例如使用 Python 的 round(price, 2)round(price, 3)),以符合上述精度要求。

2. 最小交易数量(单位)

在回测和实盘交易中,最小下单单位(通常称为“一手”)如下:

交易品种 最小买入单位 说明
股票 (Stocks) 100 股 买入必须是100的整数倍。卖出时,若余额不足100股(零股),需一次性卖出。
ETF基金 100 股 买入必须是100的整数倍。
可转债 (Convertible Bonds) 10 张 1手 = 10张。买入必须是10的整数倍。

PTrade回测环境的特殊校验:

  • 回测模式: 系统会对 amount 进行严格校验。股票/ETF/LOF 最小下单数量为 100,可转债为 10。如果下单数量低于此数值,回测引擎可能会拒绝该订单或报错。
  • 交易模式: 接口本身不做强制校验,直接报送至柜台,但如果不符合交易所规则(如买入非100的倍数),柜台会拒单。

代码处理示例

在策略代码中,建议使用 round 函数处理价格,使用整除逻辑处理数量:

def handle_data(context, data):
    # 示例:股票下单
    stock_code = '600570.SS'
    price = data[stock_code]['close']
    # 股票价格保留2位小数
    limit_p = round(price * 1.01, 2) 
    # 股票数量取整100的倍数
    amount = int(10000 / limit_p / 100) * 100 
    order(stock_code, amount, limit_price=limit_p)

    # 示例:ETF/可转债下单
    etf_code = '510300.SS'
    etf_price = data[etf_code]['close']
    # ETF/可转债价格保留3位小数
    etf_limit_p = round(etf_price * 1.01, 3)
    order(etf_code, 100, limit_price=etf_limit_p)

Q&A

Q1: 如果我在PTrade中对股票下单时,价格传入了3位小数(如10.555)会发生什么?
A1: 委托会失败。PTrade文档明确指出,务必对入参价格的小数点位数进行处理,否则会导致委托失败。股票必须保留2位小数。

Q2: 卖出股票时,如果持仓只剩50股,我可以使用 order 函数卖出吗?
A2: 可以。虽然买入必须是100股的整数倍,但卖出时允许卖出零股(不足100股的部分)。在回测中,如果持仓不足100股,通常建议使用 order_target(security, 0) 来清仓。

Q3: 可转债的最小价差是0.001吗?
A3: 是的。根据PTrade文档,可转债、ETF、LOF的最小价差均为0.001元,因此价格需要保留3位小数。