3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在ptrade量化交易平台中,不同交易品种的价格精度(小数点位数)是不同的。如果在下单时(特别是限价单)传入了错误精度的价格,会导致柜台拒单,从而引发委托失败或交易决策错误。
根据ptrade API文档,不同品种的价格精度规定如下:
order() 函数并传入 limit_price(限价单)时。order_market() 函数并传入 limit_price(市价委托保护限价,如科创板)时。在将价格传入下单函数前,务必使用 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))
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)
在编写ptrade策略时,养成在下单前对价格进行 round(price, n) 处理的习惯,是避免因数据精度导致交易失败的关键。建议在策略初始化时,根据交易标的类型,定义好对应的精度变量,以便在全局统一处理。