Эх сурвалжийг харах

unknown stinky bug at port mon

laxaurus 9 жил өмнө
parent
commit
5dab0cb13d

+ 9 - 1
src/rethink/option_chain.py

@@ -79,6 +79,12 @@ class OptionsChain(Publisher):
         #self.underlying = contract
         self.underlying = Symbol(contract)
         self.underlying.set_extra_attributes(OptionsChain.CHAIN_IDENTIFIER, self.name)
+        
+        
+        self.dispatch(OptionsChain.EVENT_UNDERLYING_ADDED, {'update_mode': 'A', 
+                                                            'name': self.name,
+                                                            'instrument' : self.get_underlying()}
+                      )
 
         
         
@@ -221,13 +227,15 @@ class OptionsChain(Publisher):
         if uspot_last is None:
             return OptionsChain.EMPTY_GREEKS
         o = option.get_contract()
-        logging.info('OptionChain:cal_option_greeks. %8.4f' % uspot_last)
+        
 
             
             
         try:
+            logging.info('OptionChain:cal_option_greeks. ulspot->%8.4f, premium last->%8.4f ' % (uspot_last, option.get_tick_value(4)))
             iv = cal_implvol(uspot_last, o.m_strike, o.m_right, valuation_date, 
                                   o.m_expiry, self.rate, self.div, self.trade_vol, option.get_tick_value(4))
+            logging.info('OptionChain:cal_option_greeks. cal results:iv=> %8.4f' % iv)
         except RuntimeError:
             logging.warn('OptionChain:cal_option_greeks. Quantlib threw an error while calculating implied vol: use intrinsic: last->%8.2f strike->%8.2f right->%s sym->%s' % 
                          (uspot_last, o.m_strike, o.m_right, o.m_symbol))

+ 5 - 4
src/rethink/portfolio_monitor.py

@@ -243,6 +243,7 @@ class PortfolioMonitor(AbstractGatewayListener):
         oc = self.is_oc_in_portfolio(account, oc_id)
         if oc == None:
             oc = OptionsChain(oc_id)
+            oc.register_listener(self)
             oc.set_option_structure(underlying.get_contract(),
                                     PortfolioRules.rule_map['option_structure'][underlying_id]['spd_size'],
                                     PortfolioRules.rule_map['option_structure'][underlying_id]['multiplier'],
@@ -286,7 +287,7 @@ class PortfolioMonitor(AbstractGatewayListener):
                 underlying = self.deduce_option_underlying(instrument)
                 if underlying:
                     oc = self.get_portfolio_option_chain(account, underlying)
-                    oc.register_listener(self)
+                    
                     instrument.set_extra_attributes(OptionsChain.CHAIN_IDENTIFIER, oc.get_name())
                     oc.add_option(instrument)
                     
@@ -353,7 +354,7 @@ class PortfolioMonitor(AbstractGatewayListener):
                 for acct in self.portfolios:
                     
                     if chain_id  in self.portfolios[acct]['opt_chains'].keys():
-                        logging.info('PortfolioMonitor:tds_event_tick_updated --> portfolio opt_chains: [%s] ' % 
+                        logging.info('PortfolioMonitor:tds_event_tick_updated --> portfolio opt_chains: [  %s  ] ' % 
                                      str(self.portfolios[acct]['opt_chains'].keys()))
                         if 'FUT' in contract_key or 'STK' in contract_key:
                             results = self.portfolios[acct]['opt_chains'][chain_id].cal_greeks_in_chain(self.kwargs['evaluation_date'])
@@ -367,7 +368,7 @@ class PortfolioMonitor(AbstractGatewayListener):
                         self.tds.set_symbol_analytics(key_greeks[0], Option.IMPL_VOL, key_greeks[1][Option.IMPL_VOL])
                         self.tds.set_symbol_analytics(key_greeks[0], Option.DELTA, key_greeks[1][Option.DELTA])
                         self.tds.set_symbol_analytics(key_greeks[0], Option.GAMMA, key_greeks[1][Option.GAMMA])
-                        self.tds.set_symbol_analytics(key_greeks[0], Option.THETA, key_greeks[1][Option.THETA])
+                        self.tds.set_2symbol_analytics(key_greeks[0], Option.THETA, key_greeks[1][Option.THETA])
                         self.tds.set_symbol_analytics(key_greeks[0], Option.VEGA, key_greeks[1][Option.VEGA])
                         
                     map(update_tds_analytics, list(results.iteritems()))                
@@ -387,7 +388,7 @@ class PortfolioMonitor(AbstractGatewayListener):
     #
 
     def tickPrice(self, event, contract_key, field, price, canAutoExecute):
-        logging.debug('MessageListener:%s. %s %d %8.2f' % (event, contract_key, field, price))
+        logging.info('MessageListener:%s. %s %d %8.2f' % (event, contract_key, field, price))
         self.tds.set_symbol_tick_price(contract_key, field, price, canAutoExecute)
 
 

+ 6 - 1
src/rethink/tick_datastore.py

@@ -155,10 +155,15 @@ class TickDataStore(Publisher):
         try:
             self.lock.acquire()
             if contract_key in self.symbols:
+                logging.info('set_symbol_tick_price: ***** sym key= : %s' % contract_key)
+                logging.info('set_symbol_tick_price: ***** sym= : %s' % str(self.symbols[contract_key]['syms']))
+                
                 map(lambda e: e.set_tick_value(field, price), self.symbols[contract_key]['syms'])
+                logging.info('set_symbol_tick_price: <<<<<<<<<')
                 self.dispatch(TickDataStore.EVENT_TICK_UPDATED, {'contract_key': contract_key, 'field': field, 
                                                              'price': price, 'syms': self.symbols[contract_key]['syms']})                
-            
+                
+                
         except:
             # contract not set up in the datastore, ignore message
             logging.error('set_symbol_tick_price: exception occured to: %s' % contract_key)

+ 2 - 2
src/sh/start_twsgw.sh

@@ -13,7 +13,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 
 
 
 #
@@ -25,4 +25,4 @@ export PYTHONPATH=$FINOPT_HOME:$PYTHONPATH
 #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 
+#python $FINOPT_HOME/comms/ibgw/tws_gateway.py   -f $FINOPT_HOME/config/tws_gateway.cfg