client_request_handler.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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
  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, value=None):
  19. logging.info('ClientRequestHandler - reqAccountUpdates value=%s' % value)
  20. self.tws_connect.reqAccountUpdates(1, '')
  21. def reqAccountSummary(self, value):
  22. logging.info('ClientRequestHandler - reqAccountSummary value=%s' % value)
  23. vals = map(lambda x: x.encode('ascii') if isinstance(x, unicode) else x, json.loads(value))
  24. self.tws_connect.reqAccountSummary(vals[0], vals[1], vals[2])
  25. def reqOpenOrders(self, value=None):
  26. self.tws_connect.reqOpenOrders()
  27. def reqPositions(self, value=None):
  28. self.tws_connect.reqPositions()
  29. def reqExecutions(self, value):
  30. try:
  31. filt = ExecutionFilter() if value == '' else ExecutionFilterHelper.kvstring2object(value, ExecutionFilter)
  32. self.tws_connect.reqExecutions(0, filt)
  33. except:
  34. logging.error(traceback.format_exc())
  35. def reqIds(self, value=None):
  36. self.tws_connect.reqIds(1)
  37. def reqNewsBulletins(self):
  38. self.tws_connect.reqNewsBulletins(1)
  39. def cancelNewsBulletins(self):
  40. self.tws_connect.cancelNewsBulletins()
  41. def setServerLogLevel(self):
  42. self.tws_connect.setServerLogLevel(3)
  43. def reqAutoOpenOrders(self):
  44. self.tws_connect.reqAutoOpenOrders(1)
  45. def reqAllOpenOrders(self):
  46. self.tws_connect.reqAllOpenOrders()
  47. def reqManagedAccts(self):
  48. self.tws_connect.reqManagedAccts()
  49. def requestFA(self):
  50. self.tws_connect.requestFA(1)
  51. def reqMktData(self, sm_contract):
  52. logging.info('ClientRequestHandler received reqMktData request: %s' % sm_contract)
  53. try:
  54. #self.contract_subscription_mgr.reqMktData(ContractHelper.kvstring2contract(sm_contract))
  55. self.contract_subscription_mgr.reqMktData(ContractHelper.kvstring2object(sm_contract, Contract))
  56. except:
  57. pass
  58. def reqHistoricalData(self):
  59. contract = Contract()
  60. contract.m_symbol = 'QQQQ'
  61. contract.m_secType = 'STK'
  62. contract.m_exchange = 'SMART'
  63. endtime = strftime('%Y%m%d %H:%M:%S')
  64. self.tws_connect.reqHistoricalData(
  65. tickerId=1,
  66. contract=contract,
  67. endDateTime=endtime,
  68. durationStr='1 D',
  69. barSizeSetting='1 min',
  70. whatToShow='TRADES',
  71. useRTH=0,
  72. formatDate=1)
  73. def placeOrder(self, value=None):
  74. logging.info('TWS_gateway - placeOrder value=%s' % value)
  75. try:
  76. vals = json.loads(value)
  77. except ValueError:
  78. logging.error('TWS_gateway - placeOrder Exception %s' % traceback.format_exc())
  79. return
  80. # c = ContractHelper.kvstring2contract(vals[1])
  81. o = OrderHelper.kvstring2object(vals[2], Order)
  82. o.__dict__['transmit'] = self.ib_order_transmit
  83. # print c.__dict__
  84. # print o.__dict__
  85. # print '---------------------'
  86. #self.connection.placeOrder(vals[0], ContractHelper.kvstring2contract(vals[1]), OrderHelper.kvstring2object(vals[2], Order))
  87. self.tws_connect.placeOrder(vals[0], ContractHelper.kvstring2object(vals[1], Contract), OrderHelper.kvstring2object(vals[2], Order))
  88. # self.connection.placeOrder(orderId, contract, newOptOrder)
  89. """
  90. Client requests to TWS_gateway
  91. """
  92. def gw_req_subscriptions(self, value=None):
  93. #subm = map(lambda i: ContractHelper.contract2kvstring(self.contract_subscription_mgr.handle[i]), range(len(self.contract_subscription_mgr.handle)))
  94. #subm = map(lambda i: ContractHelper.object2kvstring(self.contract_subscription_mgr.handle[i]), range(len(self.contract_subscription_mgr.handle)))
  95. subm = map(lambda i: (i, ContractHelper.object2kvstring(self.contract_subscription_mgr.handle[i])), range(len(self.contract_subscription_mgr.handle)))
  96. print subm
  97. if subm:
  98. self.producer.send_message('gw_subscriptions', self.produce.message_dumps({'subscriptions': subm}))