instrument.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import logging
  2. from ib.ext.Contract import Contract
  3. from misc2.helpers import ContractHelper, dict2str
  4. class Symbol():
  5. key = None
  6. def __init__(self, contract):
  7. self.contract = contract
  8. self.tick_values = {}
  9. self.extra = {}
  10. self.key = ContractHelper.makeRedisKeyEx(contract)
  11. def set_tick_value(self, id, price):
  12. self.tick_values[id] = price
  13. def get_tick_value(self, id):
  14. try:
  15. return self.tick_values[id]
  16. except:
  17. return None
  18. def get_contract(self):
  19. return self.contract
  20. def get_tick_values(self):
  21. return self.tick_values
  22. def set_extra_attributes(self, id, val):
  23. self.extra[id] = val
  24. def get_extra_attributes(self):
  25. return self.extra
  26. def get_key(self):
  27. return self.key
  28. class Option(Symbol):
  29. analytics = None
  30. IMPL_VOL = 'imvol'
  31. DELTA = 'delta'
  32. GAMMA = 'gamma'
  33. THETA = 'theta'
  34. VEGA = 'vega'
  35. PREMIUM = 'npv'
  36. #[0,1,2,3,4,5,6,7,8,9,14,5001,5002,5003,5004,5005,5006]
  37. def __init__(self, contract):
  38. Symbol.__init__(self, contract)
  39. self.set_analytics(-1.0, -1.0, -1.0, -1.0, -1.0, -1.0)
  40. def set_analytics(self, imvol=None, delta=None, gamma=None, theta=None, vega=None, npv=None):
  41. if self.analytics == None:
  42. self.analytics = {}
  43. self.analytics[Option.IMPL_VOL] = imvol
  44. self.analytics[Option.DELTA] = delta
  45. self.analytics[Option.GAMMA] = gamma
  46. self.analytics[Option.THETA] = theta
  47. self.analytics[Option.VEGA] = vega
  48. self.analytics[Option.PREMIUM] = npv
  49. def get_analytics(self):
  50. return self.analytics
  51. def object2kvstring(self):
  52. try:
  53. kv = self.object2kv()
  54. return '{"%s":%s, "%s":%s, "%s":%s, "%s":%s}' % ('analytics', dict2str(kv['analytics']),
  55. 'contract', ContractHelper.contract2kvstring(self.get_contract()),
  56. 'tick_values', dict2str(kv['tick_values']),
  57. 'extra', dict2str(kv['extra']))
  58. except:
  59. logging.error( 'Exception Option.object2kvstring')
  60. return None
  61. def object2kv(self):
  62. try:
  63. analytics = self.get_analytics()
  64. contract = self.get_contract()
  65. tick_values = self.get_tick_values()
  66. extra = self.get_extra_attributes()
  67. return {'analytics': analytics, 'contract': contract, 'tick_values': tick_values, 'extra': extra}
  68. except:
  69. logging.error( 'Exception Option.object2kv')
  70. return None