在事件驱动下如何通过亏损金额止损

请教一下各位老师,事件驱动能不能通过跟踪单一品种当日亏损额(固定金额)来进行止损和撤单操作?

如:当螺纹钢2305当日亏损超过2000元,则撤销所有报单并立即将螺纹钢2305头寸全部平仓。

以上要如何实现?具体用什么函数?麻烦各位老师帮忙解答,非常感谢!

如何计算亏损金额?
成交事件域驱动
新量化时代的必备交易利器——“事件驱动”
OnOrder事件驱动问题
事件驱动的次序
巧妙利用TBQuant事件驱动针对盘中行情突发跳空
请教一下TB是每一个事件驱动都得启加截一次吗?
如何通过代码添加自定义合约
在onbar以外的事件域中如何获取bar数据?
事件驱动框架建议

pos.shortCloseTotalAmount-pos.shortOpenTotalAmount

针对查到的持仓

 

应该是用查账户持仓

只能说说设计思路,这个不是简单的一两行代码能处理好的,也不是一两个函数能解决的

首先,没有直接的函数能返回单一品种当日亏损额,只能通过a_getposition函数查询账户内所有多空持仓、相应持仓价格及盈亏等数据。

注意,这里查询的是账户所有的,并不是指定策略的持仓。实际上持仓很难做出策略区分。

然后根据实时价格close和上面获取到的持仓信息,计算该品种当日亏损额,

然后满足条件时先查询所有未成交单,A_GetUnFillOrderIDs获取所有指定合约的未成交单,全部撤单,然后再对持仓报平仓单。

如果如果贪图简单,可以在onbar域里直接把撤单逻辑和平仓逻辑按顺序编写。但是实际上这是有风险的,因为一旦撤单失败,会导致后面的部分无法处理,而且由于在onbar里,如果一次循环完 ,报出去的平仓单还没成交,下一次的onbar又驱动,导致平仓单又被撤,重新发,很有可能触发撤单限制等柜台风控。

正确的结构应该是由onbar发出第一笔撤单,然后后续的撤单及平仓操作都在onorder域里按顺序处理,上一个订单撤单成功再进行下一个订单的处理。如果所有订单都撤单完成,onorder了再逐个对持仓进行平当处理,而且多空要按顺序,一边成功再平另一边。

总之,订单管理是一项非常复杂而且困难的领域,建议多写多练多熟悉相关案例。