Bläddra i källkod

daily changes - have bugs

bobhk 9 år sedan
förälder
incheckning
af3af1e3cf

+ 10 - 6
src/comms/ibc/base_client_messaging.py

@@ -120,19 +120,19 @@ class AbstractGatewayListener(BaseMessageListener):
         """ generated source for method openOrderEnd """
         raise NotImplementedException
    
-    def updateAccountValue(self, event, message_value):  # key, value, currency, accountName):
+    def updateAccountValue(self, event, key, value, currency, account):  # key, value, currency, accountName):
         """ generated source for method updateAccountValue """
         raise NotImplementedException
-   
-    def updatePortfolio(self, event, message_value):  # contract, position, marketPrice, marketValue, averageCost, unrealizedPNL, realizedPNL, accountName):
+
+    def updatePortfolio(self, event, contract_key, position, market_price, market_value, average_cost, unrealized_PNL, realized_PNL, account):
         """ generated source for method updatePortfolio """
         raise NotImplementedException
    
-    def updateAccountTime(self, event, message_value):  # timeStamp):
+    def updateAccountTime(self, event, timestamp):
         """ generated source for method updateAccountTime """
         raise NotImplementedException
    
-    def accountDownloadEnd(self, event, message_value):  # accountName):
+    def accountDownloadEnd(self, event, account):  # accountName):
         """ generated source for method accountDownloadEnd """
         raise NotImplementedException
    
@@ -224,13 +224,17 @@ class AbstractGatewayListener(BaseMessageListener):
         """ generated source for method commissionReport """
         raise NotImplementedException
    
-    def position(self, event, account, contract, pos, avgCost):
+    def position(self, event, account, contract_key, pos, avg_cost):
         """ generated source for method position """
         raise NotImplementedException
    
     def positionEnd(self, event): #, message_value):
         """ generated source for method positionEnd """
         raise NotImplementedException
+
+
+        
+
    
     def accountSummary(self, event, message_value):  # reqId, account, tag, value, currency):
         """ generated source for method accountSummary """

+ 56 - 8
src/comms/ibc/gw_ex_request_exit.py

@@ -21,18 +21,36 @@ class MessageListener(AbstractGatewayListener):
         AbstractGatewayListener.__init__(self, name)
         self.tick_ds = tick_ds
 
-    def position(self, event, account, contract, pos, avgCost):
-        #logging.info('MessageListener:%s. val->[%s]' % (event, vars()))
-        logging.info('MessageListener: %s %s %d %8.2f' % (account, ContractHelper.kv2contract(contract).m_symbol, pos, avgCost))
    
-    def positionEnd(self, event):
-        logging.info('MessageListener:%s. val->[%s]' % (event, vars()))
-        #self.parent.stop_manager()
-        
+   
+    def position(self, event, account, contract_key, pos, avg_cost):
+        """ generated source for method position """
+        logging.info('%s [[ %s ]]' % (event, vars()))
+   
+    def positionEnd(self, event): #, message_value):
+        """ generated source for method positionEnd """
+        logging.info('%s [[ %s ]]' % (event, vars()))
+    
+            
     def error(self, event, id, errorCode, errorMsg):
         logging.info('MessageListener:%s. val->[%s]' % (event, vars()))  
 
 
+    def updateAccountValue(self, event, key, value, currency, account):  # key, value, currency, accountName):
+        """ generated source for method updateAccountValue """
+        logging.info('%s [[ %s ]]' % (event, vars()))
+
+    def updatePortfolio(self, event, contract_key, position, market_price, market_value, average_cost, unrealized_PNL, realized_PNL, account):
+        """ generated source for method updatePortfolio """
+        logging.info('%s [[ %s ]]' % (event, vars()))
+   
+    def updateAccountTime(self, event, timestamp):
+        """ generated source for method updateAccountTime """
+        logging.info('%s [[ %s ]]' % (event, vars()))
+   
+    def accountDownloadEnd(self, event, account):  # accountName):
+        """ generated source for method accountDownloadEnd """
+        logging.info('%s [[ %s ]]' % (event, vars()))
       
 
     def tickPrice(self, event, contract_key, field, price, canAutoExecute):
@@ -82,7 +100,37 @@ def test_client(kwargs):
         logging.info('TWS_client_manager: Service shut down complete...')
            
     print 'end of test_client function'
-      
+
+
+def test_client2(kwargs):
+
+    ts = TickDataStore(kwargs['name'])
+    cm = TWS_client_manager(kwargs)
+    cl = MessageListener('gw_client_message_listener', ts)
+    
+    cm.add_listener_topics(cl, kwargs['topics'])
+    cm.start_manager()
+                          
+                              
+    cm.reqPositions()
+    cm.reqAccountUpdates()
+    
+    try:
+        logging.info('TWS_gateway:main_loop ***** accepting console input...')
+        while not cm.is_stopped(): 
+        
+            sleep(.45)
+            read_ch = raw_input("Enter command:")
+            
+        
+    except (KeyboardInterrupt, SystemExit):
+        logging.error('TWS_client_manager: caught user interrupt. Shutting down...')
+        cm.gw_message_handler.set_stop()
+        
+        logging.info('TWS_client_manager: Service shut down complete...')
+           
+    print 'end of test_client function'
+   
 if __name__ == '__main__':
     
 

+ 3 - 3
src/comms/ibgw/client_request_handler.py

@@ -23,9 +23,9 @@ class ClientRequestHandler(BaseMessageListener):
 
     
     
-    def reqAccountUpdates(self, event, value=None):
-        logging.info('ClientRequestHandler - reqAccountUpdates value=%s' % value)
-        self.tws_connect.reqAccountUpdates(1, '')
+    def reqAccountUpdates(self, event, subscribe, acct_code):
+        logging.info('ClientRequestHandler - reqAccountUpdates value=%s' % vars())
+        self.tws_connect.reqAccountUpdates(subscribe, acct_code)
     
     def reqAccountSummary(self, event, value):
         logging.info('ClientRequestHandler - reqAccountSummary value=%s' % value)

+ 1 - 3
src/comms/ibgw/tws_event_handler.py

@@ -24,8 +24,6 @@ class TWS_event_handler(EWrapper):
 
         try:
             dict = self.tick_process_message(message, mapping)     
-            if message == 'gw_subscriptions' or message == 'gw_subscription_changed':   
-                logging.info('TWS_event_handler: broadcast event: %s [%s]' % (dict['typeName'], dict))
             logging.info('broadcast_event %s' % dict)
             self.producer.send_message(message, self.producer.message_dumps(dict))    
         except:
@@ -37,7 +35,7 @@ class TWS_event_handler(EWrapper):
 
     
     def tick_process_message(self, message_name, items):
-        
+        return items
 
         t = items.copy()
         # if the tickerId is in the snapshot range

+ 2 - 17
src/comms/ibgw/tws_gateway.py

@@ -88,27 +88,12 @@ class TWS_gateway():
          
         
         self.tws_connection = EClientSocket(self.tws_event_handler)
-#         class th(threading.Thread):
-#             def __init__(self, evet ):
-#                 threading.Thread.__init__(self)
-#                 
-#                 self.tc = EClientSocket(evet)
-#                 
-#             def get_conn(self):
-#                 return self.tc
-#             def run(self):
-#                 while 1:
-#                     sleep(0.05)
-#                     
-#         
-#         ti = th(self.tws_event_handler)
-#         self.tws_connection = ti.get_conn()
-#         ti.start()
+
         
         
         
         logging.info('establishing TWS gateway connectivity...')
-        if not self.connect_tws():
+        if self.connect_tws() == False:
             logging.error('TWS_gateway: unable to establish connection to IB %s:%d' % 
                           (self.kwargs['tws_host'], self.kwargs['tws_api_port']))
             self.disconnect_tws()

+ 1 - 1
src/finopt/optcal.py

@@ -59,7 +59,7 @@ def cal_option(spot, strike, callput, evaldate, exdate, rate, div, vol):
     results[instrument.Option.VEGA] = option.vega() 
 #    results['rho'] = option.rho() 
 
-    results['strikeSensitivity'] = option.strikeSensitivity()
+   #results['strikeSensitivity'] = option.strikeSensitivity()
    # results['thetaPerDay'] = option.thetaPerDay()
    # results['itmCashProbability'] = option.itmCashProbability()
  

+ 39 - 23
src/rethink/analytics_engine.py

@@ -59,23 +59,23 @@ class AnalyticsEngine(AbstractGatewayListener):
         
     
     def test_oc3(self, oc3):
-#         expiry = '20170330'
-#         contractTuple = ('HHI.HK', 'FUT', 'HKFE', 'HKD', expiry, 0, '')
+        expiry = '20170427'
+        contractTuple = ('HSI', 'FUT', 'HKFE', 'HKD', expiry, 0, '')
+        contract = ContractHelper.makeContract(contractTuple)  
+         
+        oc3.set_option_structure(contract, 200, 50, 0.0012, 0.0328, expiry)        
+         
+        oc3.build_chain(24380, 0.03, 0.22)
+
+#         expiry = '20170331'
+#         contractTuple = ('QQQ', 'STK', 'SMART', 'USD', '', 0, '')
+# 
+# 
 #         contract = ContractHelper.makeContract(contractTuple)  
 #         
-#         oc3.set_option_structure(contract, 200, 50, 0.0012, 0.0328, expiry)        
+#         oc3.set_option_structure(contract, 0.5, 100, 0.0012, 0.0328, expiry)        
 #         
-#         oc3.build_chain(10445, 0.03, 0.22)
-
-        expiry = '20170331'
-        contractTuple = ('QQQ', 'STK', 'SMART', 'USD', '', 0, '')
-
-
-        contract = ContractHelper.makeContract(contractTuple)  
-        
-        oc3.set_option_structure(contract, 0.5, 100, 0.0012, 0.0328, expiry)        
-        
-        oc3.build_chain(130, 0.03, 0.22)
+#         oc3.build_chain(130, 0.03, 0.22)
         
 #         expiry='20170324'
 #         contractTuple = ('QQQ', 'STK', 'SMART', 'USD', '', 0, '')
@@ -106,19 +106,35 @@ class AnalyticsEngine(AbstractGatewayListener):
         
         try:
             logging.info('AnalyticsEngine:main_loop ***** accepting console input...')
+            menu = {}
+            menu['1']="Display option chain <id>" 
+            menu['2']="Display tick data store "
+            menu['3']="No opt"
+            menu['4']="Exit"
             while True: 
-            
+                choices=menu.keys()
+                choices.sort()
+                for entry in choices: 
+                    print entry, menu[entry]            
 
-                read_ch = raw_input("Enter command:")
-                oc2.pretty_print()
-                oc3.pretty_print()
-                self.tds.dump()
+                selection = raw_input("Enter command:")
+                if selection =='1':
+                    oc2.pretty_print()
+                elif selection == '2': 
+                    self.tds.dump()
+                elif selection == '3':
+                    oc3.pretty_print()
+                elif selection == '4': 
+                    self.twsc.gw_message_handler.set_stop()
+                    break
+                else: 
+                    print "Unknown Option Selected!"                 
+                
                 sleep(0.45)
             
         except (KeyboardInterrupt, SystemExit):
             logging.error('AnalyticsEngine: caught user interrupt. Shutting down...')
-            self.twsc.gw_message_handler.set_stop()
-            
+            self.twsc.gw_message_handler.set_stop() 
             logging.info('AnalyticsEngine: Service shut down complete...')               
     
     
@@ -150,11 +166,11 @@ class AnalyticsEngine(AbstractGatewayListener):
         
     
     def tds_event_tick_updated(self, event, contract_key, field, price, syms):
-        results = {}
+        
         for s in syms:
             
             if OptionsChain.CHAIN_IDENTIFIER in s.get_extra_attributes():
-                
+                results = {}
                 chain_id = s.get_extra_attributes()[OptionsChain.CHAIN_IDENTIFIER]
                 logging.info('AnalyticsEngine:tds_event_tick_updated chain_id %s' % chain_id)
                 if chain_id  in self.option_chains.keys():

+ 6 - 2
src/rethink/option_chain.py

@@ -189,9 +189,13 @@ class OptionsChain(Publisher):
 
         
     def add_option(self, option):
-        #events = ('on_option_added', 'on_option_deleted', 'on_option_updated')
+        
         #
-        # 
+        # after an option is appended to the option_chain, an event 
+        # is fired to notify the observers. 
+        # the option is tagged with the chain id
+        # this is useful in resolving which chain the option belongs to
+        # see AnalyticsEngine:tds_event_tick_updated
         option.set_extra_attributes(OptionsChain.CHAIN_IDENTIFIER, self.name)
         self.options.append(option)
         self.dispatch(OptionsChain.EVENT_OPTION_UPDATED, {'update_mode': 'A', 

BIN
src/rethink/option_chain.pyc


+ 12 - 0
src/sh/ae.sh

@@ -0,0 +1,12 @@
+#!/bin/bash
+
+
+HOST=$(hostname)
+echo $HOST
+if [ $HOST == 'hkc-larryc-vm1' ]; then
+	FINOPT_HOME=~/ironfly-workspace/finopt/src
+else
+	FINOPT_HOME=~/l1304/workspace/finopt-ironfly/finopt/src
+fi
+export PYTHONPATH=$FINOPT_HOME:$PYTHONPATH
+python $FINOPT_HOME/rethink/analytics_engine.py  -c -g AE1  

+ 2 - 2
src/sh/start_twsgw.sh

@@ -11,7 +11,7 @@ fi
 export PYTHONPATH=$FINOPT_HOME:$PYTHONPATH
 #  
 # clear all topic offsets and erased saved subscriptions
-python $FINOPT_HOME/comms/ibgw/tws_gateway.py -r -c -f $FINOPT_HOME/config/tws_gateway.cfg 
+#python $FINOPT_HOME/comms/ibgw/tws_gateway.py -r -c -f $FINOPT_HOME/config/tws_gateway.cfg 
 
 
 #
@@ -20,7 +20,7 @@ python $FINOPT_HOME/comms/ibgw/tws_gateway.py -r -c -f $FINOPT_HOME/config/tws_g
 
 
 # restart gateway keep the redis offsets but erase the subscription entries
-#python $FINOPT_HOME/comms/ibgw/tws_gateway.py  -r -f $FINOPT_HOME/config/tws_gateway.cfg 
+python $FINOPT_HOME/comms/ibgw/tws_gateway.py  -r -f $FINOPT_HOME/config/tws_gateway.cfg 
 
 # normal restart - keep the offsets and reload from saved subscription entries
 #python $FINOPT_HOME/comms/ibgw/tws_gateway.py   -f $FINOPT_HOME/config/tws_gateway.cfg