client_request_handler.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import logging
  4. import json
  5. import traceback
  6. from time import strftime
  7. from misc2.helpers import ContractHelper, OrderHelper, ExecutionFilterHelper, HelperFunctions
  8. from comms.ibgw.base_messaging import BaseMessageListener
  9. from ib.ext.Contract import Contract
  10. from ib.ext.ExecutionFilter import ExecutionFilter
  11. from ib.ext.Execution import Execution
  12. from ib.ext.OrderState import OrderState
  13. from ib.ext.Order import Order
  14. class ClientRequestHandler(BaseMessageListener):
  15. def __init__(self, name, tws_gateway):
  16. BaseMessageListener.__init__(self, name)
  17. self.tws_connect = tws_gateway.tws_connection
  18. def reqAccountUpdates(self, event, subscribe, acct_code):
  19. logging.info('ClientRequestHandler - reqAccountUpdates value=%s' % vars())
  20. self.tws_connect.reqAccountUpdates(subscribe, HelperFunctions.utf2asc(acct_code))
  21. def reqAccountSummary(self, event, value):
  22. logging.info('ClientRequestHandler - reqAccountSummary value=%s' % value)
  23. #old stuff
  24. # vals = map(lambda x: x.encode('ascii') if isinstance(x, unicode) else x, json.loads(value))
  25. # self.tws_connect.reqAccountSummary(vals[0], vals[1], vals[2])
  26. def reqOpenOrders(self, event, value=None):
  27. self.tws_connect.reqOpenOrders()
  28. def reqPositions(self, event, value=None):
  29. self.tws_connect.reqPositions()
  30. def reqExecutions(self, event, exec_filter=None):
  31. logging.info('ClientRequestHandler - reqExecutions exec_filter string=%s' % exec_filter)
  32. if exec_filter == 'null':
  33. ef = ExecutionFilter()
  34. else:
  35. ef = ExecutionFilterHelper.kvstring2object(exec_filter, ExecutionFilter)
  36. self.tws_connect.reqExecutions(0, ef)
  37. def reqContractDetails(self, event, contract_key):
  38. pass
  39. def reqIds(self, event, value=None):
  40. self.tws_connect.reqIds(1)
  41. def reqNewsBulletins(self, event):
  42. self.tws_connect.reqNewsBulletins(1)
  43. def cancelNewsBulletins(self, event ):
  44. self.tws_connect.cancelNewsBulletins()
  45. def setServerLogLevel(self, event):
  46. self.tws_connect.setServerLogLevel(3)
  47. def reqAutoOpenOrders(self, event):
  48. self.tws_connect.reqAutoOpenOrders(1)
  49. def reqAllOpenOrders(self, event):
  50. self.tws_connect.reqAllOpenOrders()
  51. def reqManagedAccts(self, event):
  52. self.tws_connect.reqManagedAccts()
  53. def requestFA(self, event):
  54. self.tws_connect.requestFA(1)
  55. def reqMktData(self, event, contract, snapshot):
  56. logging.info('ClientRequestHandler received reqMktData request: %s' % contract)
  57. # try:
  58. # #self.contract_subscription_mgr.reqMktData(ContractHelper.kvstring2contract(sm_contract))
  59. # self.contract_subscription_mgr.reqMktData(ContractHelper.kvstring2object(contract, Contract))
  60. # except:
  61. # pass
  62. def reqHistoricalData(self, event):
  63. contract = Contract()
  64. contract.m_symbol = 'QQQQ'
  65. contract.m_secType = 'STK'
  66. contract.m_exchange = 'SMART'
  67. endtime = strftime('%Y%m%d %H:%M:%S')
  68. self.tws_connect.reqHistoricalData(
  69. tickerId=1,
  70. contract=contract,
  71. endDateTime=endtime,
  72. durationStr='1 D',
  73. barSizeSetting='1 min',
  74. whatToShow='TRADES',
  75. useRTH=0,
  76. formatDate=1)
  77. def placeOrder(self, event, value=None):
  78. logging.info('TWS_gateway - placeOrder value=%s' % value)
  79. try:
  80. vals = json.loads(value)
  81. except ValueError:
  82. logging.error('TWS_gateway - placeOrder Exception %s' % traceback.format_exc())
  83. return
  84. # c = ContractHelper.kvstring2contract(vals[1])
  85. o = OrderHelper.kvstring2object(vals[2], Order)
  86. o.__dict__['transmit'] = self.ib_order_transmit
  87. # print c.__dict__
  88. # print o.__dict__
  89. # print '---------------------'
  90. #self.connection.placeOrder(vals[0], ContractHelper.kvstring2contract(vals[1]), OrderHelper.kvstring2object(vals[2], Order))
  91. self.tws_connect.placeOrder(vals[0], ContractHelper.kvstring2object(vals[1], Contract), OrderHelper.kvstring2object(vals[2], Order))
  92. # self.connection.placeOrder(orderId, contract, newOptOrder)
  93. def gw_req_subscriptions(self, event, value=None):
  94. logging.info('TWS_gateway - gw_req_subscriptions')