问题描述
如题,这个接口中包含一个参数是 strategy_name,另一个是 order_remark,从委托 XtOrder 这个结构里面可以看到对于 order_remark 这个字段是有明确的长度限制的(24),但是 strategy_name 这个没有说明,实测下貌似也有限制,能不能告知一下限制的长度,谢谢。
解决方案
在 QMT 平台(包括内置 Python API 的 passorder 以及独立版 xtquant 的 order_stock 接口)中,底层是通过 C++ 结构体与交易柜台进行交互的,因此对字符串类型的字段有严格的字节长度限制。
关于您提到的两个参数,具体的长度限制如下:
1. order_remark (委托备注 / userOrderId)
正如您在 XtOrder 结构体中所见,委托备注字段通常被限制为 24个字节(部分券商柜台可能放宽至 32 个字节,但为了兼容性,建议以 24 字节为准)。
2. strategy_name (策略名称 / strategyName)
在 QMT 的底层结构中,strategy_name 字段的长度限制通常为 32个字节(即底层 C++ 的 char[32])。如果传入的字符串超过这个长度,底层会自动截断,这可能会导致您在通过 get_trade_detail_data 或 get_last_order_id 根据策略名查询委托和成交时匹配失败。
⚠️ 重要注意事项(编码与字节数)
需要特别注意的是,这里的限制是字节数(Bytes),而不是字符数:
- 英文字母和数字:每个字符占 1 个字节。
- 中文字符:在 GBK 编码下占 2 个字节,在 UTF-8 编码下占 3 个字节(QMT 默认脚本编码通常为 GBK)。
建议:
为了避免因长度超限或编码问题导致的截断和乱码,强烈建议在 strategy_name 和 order_remark 中仅使用简短的英文、数字或下划线组合。
示例:
# 推荐的命名方式(安全长度内)
strategy_name = "MACD_Strategy_01" # 16字节,远小于32字节限制
order_remark = "Order_0001" # 10字节,远小于24字节限制
# 在内置API中使用 passorder
passorder(23, 1101, '您的资金账号', '000001.SZ', 5, -1, 100, strategy_name, 2, order_remark, ContextInfo)
总结来说,为了保证策略的稳定运行,请将 strategy_name 控制在 32字节以内,将 order_remark 控制在 24字节以内。