esurfer 9 gadi atpakaļ
vecāks
revīzija
bee01c7469

+ 94 - 0
src/comms/ibgw/order_manager.py

@@ -0,0 +1,94 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+import logging
+from time import strftime
+import json
+from misc2.helpers import ContractHelper
+from ib.ext.Contract import Contract
+from comms.ibgw.base_messaging import BaseMessageListener
+from comms.ibgw.tws_event_handler import TWS_event_handler
+from __main__ import name
+from _ast import Name
+
+
+
+class OrderBook():
+    
+    def __init__(self, name):
+        '''
+            orderbook:
+                contains orders which is a dict that maps tws orderId 
+                each order has an order_status map
+                each order has an order_status_hist which is a list to previous order_status
+                each order has an exec_status_hist which is a list of executions
+            
+                
+        '''
+        self.name = name 
+        self.orders = {}
+        
+    def update_order_status(self, orderId, status, filled, remaining, avgFillPrice, permId, parentId, lastFillPrice, clientId, whyHeld):
+        if orderId in self.orders:
+            self.orders[orderId]['order_status']['status'] = status
+            self.orders[orderId]['order_status']['filled'] = filled
+            self.orders[orderId]['order_status']['remaining'] = remaining
+            self.orders[orderId]['order_status']['avgFillPrice'] = avgFillPrice
+            self.orders[orderId]['order_status']['permId'] = permId
+            self.orders[orderId]['order_status']['parentId'] = parentId
+            self.orders[orderId]['order_status']['lastFillPrice'] = lastFillPrice
+            self.orders[orderId]['order_status']['clientId'] = clientId
+            self.orders[orderId]['order_status']['whyHeld'] = whyHeld
+        else:
+            logging.warn('OrderBook:update_order_status. orderId %d key not found in the dict.' % orderId)
+        
+
+class OrderManager(BaseMessageListener):
+    
+    def __init__(self, name, tws_connection, producer, rs_conn, kwargs):
+        self.name = name
+        self.tws_connect = tws_connection
+        self.order_book = OrderBook(self.name)
+        self.order_id = self.load_order_id()
+        
+        
+    def load_order_id(self):
+        return -1
+    
+    def get_next_order_id(self):
+        self.order_id = self.order_id + 1
+        return self.order_id
+    
+    
+    def place_order(self, event, client_order_id, contract_key, side, quantity, price):
+        logging.info('OrderManager:place_order. client_order_id %d, contract %s, side %s, qty %d, price %8.2f' %
+                            (client_order_id, contract_key, side, quantity, price))
+
+        '''
+            insert a new entry into the orderbook
+            get the next order id
+            submit order request to tws
+        '''
+
+                            
+        try:
+            vals = json.loads(value)
+        except ValueError:
+            logging.error('TWS_gateway - placeOrder Exception %s' % traceback.format_exc())
+            return
+        
+    #        c = ContractHelper.kvstring2contract(vals[1])
+        o = OrderHelper.kvstring2object(vals[2], Order)
+        o.__dict__['transmit'] = self.ib_order_transmit
+    #         print c.__dict__
+    #         print o.__dict__
+    #         print '---------------------'
+    
+           
+        #self.connection.placeOrder(vals[0], ContractHelper.kvstring2contract(vals[1]), OrderHelper.kvstring2object(vals[2], Order))
+        self.tws_connect.placeOrder(vals[0], ContractHelper.kvstring2object(vals[1], Contract), OrderHelper.kvstring2object(vals[2], Order))
+    #        self.connection.placeOrder(orderId, contract, newOptOrder)
+        
+
+    
+        
+        

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

@@ -166,6 +166,7 @@ class TWS_event_handler(EWrapper):
         self.broadcast_event('execDetails', {'req_id': reqId, 'contract': None, 'execution': None, 'end_batch': True})
 
     def connectionClosed(self):
+        logging.warn('TWS_event_handler: connectionClosed ******')
         self.broadcast_event('connectionClosed', {})
 
     def error(self, id=None, errorCode=None, errorMsg=None):

+ 2 - 0
src/rethink/portfolio_monitor.py

@@ -38,6 +38,8 @@ class PortfolioMonitor(AbstractGatewayListener):
             'underlying': 
         '''
         pass
+    
+    
     def update_option_chain(self, chain_id):
         pass