时间
大约两个月前,看见私募的小伙伴在高频交易上赚取了很多的利润,于是心痒痒准备自己尝试一下。但公司里面没有任何解决方案,没办法,只有自己接CTP然后做策略。于是我就成了苦逼的量化开发工程师与策略分析师于一体的角色。
坑多的要命
不开发不知道,一开发,CTP这坑多得简直...令人发指。简单叙述我现在还记忆犹新的坑。
千万不要在CTP的任何Rsp回调函数中直接发新的Req请求,这会直接引起CTP阻塞,结果就是,你啥事都做不了。常见场景:查询当前所有可交易合约后,试图在Rsp中遍历查询所有合约的交易参数。这个坑我调试了一周。
OnRtnOrder这个函数会被调起多次。包括在提交成功、交易所接收成功、报单有交易、撤单成功的时候都会调用。问题是你很难通过Order结构体的字段准确判断当前回调是处于什么阶段的回调。于是你在计报单数和总报单的参数的时候会非常麻烦。这个坑我愣是弄了大半个月。
在平仓单的时候,比如你现在持有两手多头,然后挂了两手平仓单,没有平掉,这时候如果想用新价格平仓,就得撤调之前挂的两手平仓单,然后重新下单;CTP并不会很智能地自动更新价格。如何撤单?请保证你在OnRtnOrder里面已经准确记录所有挂单信息。
如果在交易时间内,你的交易程序不小心崩了,需要重启。那么CTP会自动给你重播一遍你的已挂单和已成交的交易。具体而言,他会自动调用OnRtnOrder和OnRtnTrade。如果是完整重播也就算了,我今天才发现,他会漏播。(手动微笑)而且如果你的信号很频繁,你甚至不知道它会啥时候播完。这个坑,我刚踩进去,还不知道怎么处理。
未完待续...