今天学了一下连接行情,再次吐槽那个文档,写的什么玩意?是作者故意为之?
然后拿example中的no_ui 里面的run.py学习了一下,感觉作者写代码的习惯和思维非常奇怪
比如在这句中:
main_engine.add_gateway(CtpGateway)
为什么是在这个方法里只传一个类,而不是一个实例好之后的类呢?
def add_gateway(self, gateway_class: Type[BaseGateway], gateway_name: str = "") -> BaseGateway: """ Add gateway. """ # Use default name if gateway_name not passed if not gateway_name: gateway_name: str = gateway_class.default_name gateway: BaseGateway = gateway_class(self.event_engine, gateway_name) self.gateways[gateway_name] = gateway
而它是在这个方法里去实例化的,真的奇葩
而且在实例中把event_engine做为参数传进去了,这样就必须是在add_gateway之前需要把event_engine加到main_engine中,
这样的思维,不知道是怎么产生的
这样面临的问题是在add_gateway之前,不能对CtpGateway做任何参数的改动。
比如设置ctp_setting(即ctp行情,交易的信息),这个需要在本文件中另行设置,奇葩吧
正常的逻辑,把CtpGateway初始化,设置各种参数,然后扔给main_engine,这个不是常规操作么?
以致后面还要写 main_engine.connect(ctp_setting, "CTP") 这样的代码,人才!
还有好几处下面这样的代码。
sleep(60) # Leave enough time to complete strategy initialization
类中没有一个状态管理的吗?60秒是多了还是少了?
后面要写的策略,更奇葩,实在是理解不了,唉
那个no_ui下面的run.py把ctp_setting改一下直接可以跑了,没有太多问题,还有那个check_trading_period直接返回True,要不在非交易时间没法弄
标签:engine,ctp,进阶,学习,VeighNa,add,main,gateway,name From: https://www.cnblogs.com/szyicol/p/16720827.html