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

ptrade平台数据精度处理指南:避免限价单委托失败

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

问题描述

数据精度问题导致交易决策错误怎么解决?

/

解决方案

在ptrade量化交易平台中,不同交易品种的价格精度(小数点位数)是不同的。如果在下单时(特别是限价单)传入了错误精度的价格,会导致柜台拒单,从而引发委托失败或交易决策错误。

1. ptrade各交易品种的价格精度要求

根据ptrade API文档,不同品种的价格精度规定如下:

  • 股票:小数点后 2 位(如 10.01)
  • 可转债、ETF、LOF、国债:小数点后 3 位(如 100.001)
  • 股指期货:小数点后 1 位(如 3800.2)
  • ETF期权:小数点后 4 位(如 0.0012)

2. 常见引发错误的场景

  • 使用 order() 函数并传入 limit_price(限价单)时。
  • 使用 order_market() 函数并传入 limit_price(市价委托保护限价,如科创板)时。
  • 通过计算得出的价格(如均线价格、滑点计算后的价格)往往包含多位小数,直接下单会报错。

3. 解决方案与代码示例

在将价格传入下单函数前,务必使用 Python 的 round() 函数对价格进行截断处理。

示例:股票限价单精度处理

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)

def handle_data(context, data):
    # 假设通过某种计算得出一个买入价格
    calc_price = data[g.security]['close'] * 0.987654
    
    # 股票价格需要保留2位小数
    limit_price = round(calc_price, 2)
    
    # 正确下单
    order(g.security, 100, limit_price=limit_price)
    log.info("以限价 %s 委托买入 %s" % (limit_price, g.security))

示例:ETF限价单精度处理

def initialize(context):
    g.etf = '510050.SS'
    set_universe(g.etf)

def handle_data(context, data):
    calc_price = data[g.etf]['close'] * 0.99123
    
    # ETF价格需要保留3位小数
    limit_price = round(calc_price, 3)
    
    order(g.etf, 1000, limit_price=limit_price)

4. 总结

在编写ptrade策略时,养成在下单前对价格进行 round(price, n) 处理的习惯,是避免因数据精度导致交易失败的关键。建议在策略初始化时,根据交易标的类型,定义好对应的精度变量,以便在全局统一处理。