介绍CTP网关之前先看看网关类的抽象类:BaseGateway
BaseGateway用于创建与不同交易系统的网关连接的抽象网关类。该类必须是线程安全的(所有方法必须线程安全,对象之间没有可变的共享属性);所有方法都需要是非阻塞的;每个方法和回调方法都需满足在docstring中描述的需求;如果连接断开会自动重新连接。
所有的方法必须要实现所有的@abstractmethod
回调函数必须手动响应
on_tick
on_trade
on_order
on_position
on_account
on_contract
所有传给回调函数的XxxData类必须是常量,也就是说传给on_xxx函数的对象就不该被修改了。如果使用缓存来保存数据的引用,在传递数据到on_xx方法前使用copy.copy来创建一个新对象。
default_setting和exchanges属性保存连接网关的信息和网关支持的交易所
__init__()
中初始化事件引擎和网关名
self.event_engine = event_engine
self.gateway_name = gateway_name
vnpy覆盖了国内外所有交易品种的交易接口(vnpy.gateway目录下)。这里暂时只介绍CTP和RPC两种网关
CTP网关
CtpGateway vnpy/gateway/ctp/ctp_gateway.py
1. 实例化CTP网关
main_engine.add_gateway(CtpGateway) # 将ctp添加到主引擎中
def add_gateway(self, gateway_class: BaseGateway):
gateway = gateway_class(self.event_engine) # 实例化
self.gateways[gateway.gateway_name] = gateway 添加进网关字典
#将网关支持的交易所添加到引擎
for exchange in gateway.exc