CTP期货程序化交易开发讲解C++版 2025
之 流控、报单、撤单、源码解析(一)
1、交易查询流控:
我们在调试程序的过程中有时会发现明明提交了相关的查询,但是没有得到想要的回报数据,检查返回的错误信息发现:“CTP:查询未就绪,请稍后重试” 等相关信息,这时候就要考虑查询次数过于频繁了,查询请求被流控了。
2、报单撤单流控:
每秒内允许的最大报单撤单笔数,如果触发此流控,系统也会返回错误信息,如:“CTP:下单频率限制”,并且该流控是投资者InvestorID(账户)级别的,多开session也没用,如果实在需要,就得用多账户进行处理了。
3、连接数流控:
这是指在CTP程序中每秒允许的最大API连接请求数,超过指定的数量会被强制断开。如果发现程序一连接就又断开了,有可能是这个原因。
4、关于报单、撤单中的一些字段:
BrokerID //经纪公司代码 必填
InvestorID //投资者代码 必填
UserID //用户代码 非必填
这个UserID是操作员账号,不填写会收不到OnErrRtnOrderAction回报,一般情况下和InvestorID填写一样就可以。这个字段是容易被开发人员忽略掉的,这里需要说明一下。
5、处理方法解析:
在处理流控管理时,我们的程序代码在提交查询或报单时,要注意提交间隔,不要一个个紧挨着提交,最好是之间有一个间隔时间。
即在一个spi回调函数里面只放一个查询,嵌套运行。当然这是个最简单的方法,也可以运用事件队列或者自己另开线程去顺序查询等方案。我们在代码中进行了两种方式进行处理,即嵌套运行 + 间隔运行。具体的处理方法在下一章节中用源码进行解析。
程序运行效果如图,经过适当处理后几乎没有被流控的错误信息。

需要查看原文件源代码的读者,欢迎前往 :https://ipacel.cc/ctp