| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- ticker handling
- ===============
- Case 1: Request market data snapshot
- ------------------------------------
- 1. (client) Symbol <-> 2. (client messaging) Contract-key <-> 3. (server messaging) Contract-key <-> 4. (tws) ticker_id
- 1. Create symbol
- - contract = ContractTuple(....)
- - symbol = Symbol(contract)
- 2. Request market data
- - object:contract-key
- - reqMktData(ContractHelper(symbol.getContract(), snapshot=True)
- - encode message object for kafka transport {'contract':contract, 'snapshot':snapshot}
- - TWS_client_manager(GatewayCommandWrapper) -> reqMktData(encoded message object)
- - GatewayCommandWrapper -> producer.send_message('reqMktData', json_message_str)
- 3. Process request
- - prosumer/ BaseConsumer baseconsumer: self.dispatch(message.topic, **self.extract_message_content(message))
- - ClientRequestHandler(BaseMessageListener) -> reqMktData -> subscription_mgr.reqMktData(contract_object, snapshot)
- 4. map id:key
- - tws_connection -> reqMktData(id + 1000|id, contract, True|False)
- Case 2: Receive market data from TWS
- 5. tws <-> 6. server messaging <-> 7. client messaging <-> 8. client
- 5. Receive tickPrice
- - comms.ibgw.tws_event_handler TWS_event_handler(EWrapper) -> tickPrice -> remap id:contract-key
- - update vars() by replacing tickId with contract-key subscrition_manager.get_contract_by_id
- 6
- - tws_event_handler->self.broadcast_event('tickPrice', {self.subscription_manger.get_contract_by_id(tickerId),
- field, price, canAutoExecute})
- - self.producer.send_message(message, self.producer.message_dumps(dict))
- 7
- -
- - baseconsumer: self.dispatch(message.topic, **self.extract_message_content(message))
- - Inherit AbstractGatewayListener(BaseMessageListener) / tickPrice(tickerId, field, price, canAutoExecute):
-
|