请教一下各位老师,事件驱动能不能通过跟踪单一品种当日亏损额(固定金额)来进行止损和撤单操作?
如:当螺纹钢2305当日亏损超过2000元,则撤销所有报单并立即将螺纹钢2305头寸全部平仓。
以上要如何实现?具体用什么函数?麻烦各位老师帮忙解答,非常感谢!
pos.shortCloseTotalAmount-pos.shortOpenTotalAmount
针对查到的持仓
应该是用查账户持仓
只能说说设计思路,这个不是简单的一两行代码能处理好的,也不是一两个函数能解决的
首先,没有直接的函数能返回单一品种当日亏损额,只能通过a_getposition函数查询账户内所有多空持仓、相应持仓价格及盈亏等数据。
注意,这里查询的是账户所有的,并不是指定策略的持仓。实际上持仓很难做出策略区分。
然后根据实时价格close和上面获取到的持仓信息,计算该品种当日亏损额,
然后满足条件时先查询所有未成交单,A_GetUnFillOrderIDs获取所有指定合约的未成交单,全部撤单,然后再对持仓报平仓单。
如果如果贪图简单,可以在onbar域里直接把撤单逻辑和平仓逻辑按顺序编写。但是实际上这是有风险的,因为一旦撤单失败,会导致后面的部分无法处理,而且由于在onbar里,如果一次循环完 ,报出去的平仓单还没成交,下一次的onbar又驱动,导致平仓单又被撤,重新发,很有可能触发撤单限制等柜台风控。
正确的结构应该是由onbar发出第一笔撤单,然后后续的撤单及平仓操作都在onorder域里按顺序处理,上一个订单撤单成功再进行下一个订单的处理。如果所有订单都撤单完成,onorder了再逐个对持仓进行平当处理,而且多空要按顺序,一边成功再平另一边。
总之,订单管理是一项非常复杂而且困难的领域,建议多写多练多熟悉相关案例。