为了避免对策略运行的干扰,veighna刻意将策略的逻辑持仓与真实持仓相隔离,cta_template里也没有提供查询真实持仓的方法。而实际上人工干预经常发生,策略运行有必要知道实际持仓,为此提出真实仓位的查询问题。社区里的建议是在cta_template里增加一个get_position的方法,在查询原代码之后,发现主引擎的OMS类就可以完全持仓查询功能。特把代码列出,在策略中增加一个manage_position函数即可达到目的:

def manage_position(self):         
        self.positions = {"long":0, "short":0 }
	om_engine = self.cta_engine.main_engine.get_engine('oms')
        if om_engine.get_position(f"CTP.{self.vt_symbol}.多"):
            self.positions["long"] = om_engine.get_position(f"CTP.{self.vt_symbol}.多").volume        
        if om_engine.get_position(f"CTP.{self.vt_symbol}.空"):
            self.positions["short"] = om_engine.get_position(f"CTP.{self.vt_symbol}.空").volume
        #om_engine.get_all_positions()
	#get_all_positions()可以查询所有持仓,二种查询方式俱可,前者返回的是单个PositionData对象,后者返回一个PositionData列表。

0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注


欢迎光临黏豆包的博客。
取消