如何编写满足某条件把账户中所有品种头寸全部平掉
虽然你的问题只有一句话,但是实际编写的代码可能要几十行甚至几百行....
我这里只能给出一些提示和可能用到的函数
首先,肯定是用if做大框架来判断满足条件,这个是最简单的。
第二步,平仓之前要先查询账户里有哪些品种
第三步,如果在执行全平的时候,有一些委托单挂着没有成交,这里要决定是否取消这些单子。
A_GetUnFillOrderIDs获取未完成的报单数组
根据这里获得的未完成订单的委托编号,逐个进行撤单。如果撤单中还要区分开平或者多空,那么查询一下函数列表,也有判断多空开平的函数。
第四步,未成交单全部撤完,根据第二步查询出来的品种,结合for循环去查询每个品种的多空持仓数量,用a_sendorderex函数做相应平仓处理。注意,这里不要查询多空仓位,应该查询可平仓数量,否则容易陷入重复报单的异常。
第五步,以上业务全部处理后,要考虑是否进行订单管理。可以借用交易助手进行撤单重发,也可以自己写撤单重发代码。这部分代码在系统公式库内有,交易助手。
先用A_GetPositionSymbols查询当前账户里所有品种的symbol
然后再对这个数组里进行for循环,循环里的业务主要为
使用 A_GetPosition,获取指定合约的仓位,根据返回的pos结构体里的多空数量信息,用a_sendorderex函数分别全平。