diff --git a/UML/dataRecord.puml b/UML/dataRecord.puml index feb44325..b9b911ff 100644 --- a/UML/dataRecord.puml +++ b/UML/dataRecord.puml @@ -27,8 +27,8 @@ participant "IB Gateway/IB TWS" as ib activate rundr loop rundr->rundr: 检查是否处于交易时间段\n非交易时间段不起动子进程 - rundr->rundr: 若处于非交易时间段 && 有子进程存在,\n就终止子进程运行 - rundr->run ** : 若处于交易时间段 && 不存在子进程\ncreate process + rundr->rundr: 若处于非交易时间段\n并且有子进程存在,\n就终止子进程运行 + rundr->run ** : 若处于交易时间段\n并且不存在子进程,\ncreate process activate run rundr->rundr: sleep(5) end loop @@ -96,7 +96,12 @@ run->me ++ : addGateway(ibGateway) ** 获取连接IB G/W的信息 end note gw->wrap ** : Create IbWrapper(self) - note right: IbApi是基于Boost.python的封装。\n用C++实现,但是可以提供给Python程序使用。 + note right + IbApi是基于Boost.python的封装, + 用C++实现,但是可以提供给Python程序使用。 + IbApid的功能上面,主要提供了主动函数 + 和回调函数。 + end note activate wrap wrap->wrap ++ : 构造函数() return object @@ -112,11 +117,20 @@ run->me ++ : addApp() dr->drq **:Create Queue dr->drt **:Create Thread activate drt #blue - dr->dr:loadSetting() + dr->dr ++ : loadSetting() note right 从配置文件中加载 订阅设置到字典对象 end note + dr->me ++ : me.subscribe(req, gateway) + note left + 根据配置文件,订阅TICK数据和BAR数据。 + end note + me->gw ++ : 订阅市场行情\ngw.subscribe(req) + gw->gw : 如果网关没有连接,就先缓存req; + return + return + return dr->ee++:register(TICK, handler) note right: 登记EVENT_TICK事件 return @@ -139,30 +153,27 @@ run->ee: ee.regiser() 注册日志处理事件 run->me++: me.Connect(IB) note right: 连接IB网关 me->gw ++ : gw.connect() - gw-> wrap ++ : ibwrapper.eConnect(host, port, clientId, false) - wrap-\ib ++ : 调用IB的C++代码,发送连接请求数据包到IB网关 + gw-> wrap ++ : ibwrapper.eConnect(host, port, \nclientId, false) + wrap-\ib ++ : 调用IB的C++代码,\n发送连接请求数据包到IB网关 return return gw->wrap ++ : ibwrapper.reqCurrentTime() - wrap->ib ++: 调用IB的C++代码,发送服务器时间查询数据包到IB网关 + wrap->ib ++: 调用IB的C++代码,\n发送服务器时间查询数据包到IB网关 return return return - ib-/ wrap ++ : connectAck()\nIB网关发回响应数据包到IB的C++代码,该代码回调函数 + ib-/ wrap ++ : connectAck()\nIB网关发回响应数据包到IB的C++代码,\n该代码回调函数 return - ib->wrap ++ : currentTime()\nIB网关发回响应数据包到IB的C++代码,该代码回调函数 - wrap->gw ++ : 修改连接状态\ngateway.conntected=true - return - - wrap->gw ++ : 订阅市场行情\nsubscribe(subscribeReq) - gw->wrap ++ : 请求合约详细\nreqContractDetails(self.tickerId, contract) + ib->wrap ++ : currentTime()\nIB网关发回响应数据包到IB的C++代码,\n该代码回调函数 + wrap->gw ++ : 将缓存的req取出,进行实际订阅\nsubscribe(subscribeReq) + gw->wrap ++ : 请求合约详细\nreqContractDetails(tickerId, contract) return - gw->wrap ++ : 请求市场数据\nreqMktData(self.tickerId, contract, '', False, TagValueList()) + gw->wrap ++ : 请求市场数据\nreqMktData(tickerId, contract, '',\nFalse, TagValueList()) return ||| return @@ -219,14 +230,14 @@ eet->ee--: ee.run() loop ee->eeq ++ :queue.get() return event - ee->ee ++ : __process(event) + ee->ee ++ #red : __process(event) ee->dr ++ #red :call procecssTickEvent() - dr->dr ++ :OnTick() + dr->dr ++ #red :OnTick() dr->drq ++: queue.put(tick) return return - dr->dr ++ :OnBar() + dr->dr ++ #red :OnBar() dr->drq ++: queue.put(bar) return return