ticker_handling.txt 1.8 KB

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