esurfer 9 роки тому
батько
коміт
fd10008007
1 змінених файлів з 50 додано та 0 видалено
  1. 50 0
      src/docs/ticker_handling.txt

+ 50 - 0
src/docs/ticker_handling.txt

@@ -0,0 +1,50 @@
+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 -> enrich message value in message['value'] key
+- 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
+
+5. tws <-> 6. server messaging <-> 7. client messaging <-> 8. client
+
+5. Receive tickPrice
+- TWS_event_handler(EWrapper) -> tickPrice -> remap id:contract-key
+- update vars() by replacing tickId with contract-key 
+6
+- self.broadcast_event('tickPrice', vars())
+- self.producer.send_message(message, self.producer.message_dumps(dict))
+
+
+7 
+- baseconsumer (**json.loads(text_message))
+- Inherit AbstractGatewayListener(BaseMessageListener) / tickPrice(tickerId, field, price, canAutoExecute):
+
+
+     
+
+
+
+