def test_putcallpair_addoption_expiration_error_on_different_expiration( self): pair = PutCallPair() self.assertEqual(None, pair._expiration) self.assertEqual(None, pair.expiration) pair.addoption(self.option_contract_put) opt_contract_dict_call = { '_id': '577a573e4b01f47f84d0cbd5', 'callorput': 'c', 'cqgsymbol': 'P.US.EPH1427750', 'expirationdate': datetime(2014, 3, 22, 0, 0), 'idcontract': 4736, 'idinstrument': 11, 'idoption': 11558454, 'optionmonth': 'H', 'optionmonthint': 3, 'optionname': 'P.US.EPH1427750', 'optionyear': 2014, 'strikeprice': 2775.0 } self.assertEqual(pair.expiration, datetime(2014, 3, 21, 0, 0)) option_contract_call = OptionContract(opt_contract_dict_call, self.fut_contract) self.assertRaises(ValueError, pair.addoption, option_contract_call)
def test_putcallpair_has_p(self): pair = PutCallPair() self.assertEqual(None, pair.P) self.assertEqual(None, pair.p) pair.addoption(self.option_contract_put) self.assertEqual(self.option_contract_put, pair.P) self.assertEqual(self.option_contract_put, pair.p) self.assertEqual(self.option_contract_put, pair.put)
def test_putcallpair_has_underlying(self): pair = PutCallPair() self.assertEqual(None, pair.underlying) pair.addoption(self.option_contract_put) self.assertEqual(self.fut_contract, pair.underlying) opt_contract_dict_call = { '_id': '577a573e4b01f47f84d0cbd5', 'callorput': 'c', 'cqgsymbol': 'P.US.EPH1427750', 'expirationdate': datetime(2014, 3, 21, 0, 0), 'idcontract': 4736, 'idinstrument': 11, 'idoption': 11558454, 'optionmonth': 'H', 'optionmonthint': 3, 'optionname': 'P.US.EPH1427750', 'optionyear': 2014, 'strikeprice': 2775.0 } option_contract_call = OptionContract(opt_contract_dict_call, self.fut_contract) pair = PutCallPair() pair.addoption(option_contract_call) self.assertEqual(self.fut_contract, pair.underlying)
def __init__(self, option_chain_dic, futures_contract, options_limit=0): self._data = option_chain_dic self._fut = futures_contract self._options = OrderedDict() self._atm_index = -1 self._options_limit = options_limit self._expiration = self._data['_id']['date'] if options_limit > 0: all_strikes = np.array( sorted( list(set([x['strikeprice'] for x in self._data['chain']])))) atm_index = np.argmin(np.abs(all_strikes - self.underlying.price)) all_strikes = all_strikes[max(0, atm_index - options_limit):min( len(self._data['chain']), atm_index + options_limit + 1)] for opt_dic in self._data['chain']: if options_limit > 0: if opt_dic['strikeprice'] not in all_strikes: continue option = OptionContract(opt_dic, self._fut) pc_pair = self._options.setdefault(option.strike, PutCallPair()) pc_pair.addoption(option) self._strike_array = np.array(list(self._options.keys()))
def test_putcallpair_has_repr(self): pair = PutCallPair() pair.addoption(self.option_contract_put) opt_contract_dict_call = { '_id': '577a573e4b01f47f84d0cbd5', 'callorput': 'c', 'cqgsymbol': 'P.US.EPH1427750', 'expirationdate': datetime(2014, 3, 21, 0, 0), 'idcontract': 4736, 'idinstrument': 11, 'idoption': 11558454, 'optionmonth': 'H', 'optionmonthint': 3, 'optionname': 'P.US.EPH1427750', 'optionyear': 2014, 'strikeprice': 2775.0 } option_contract_call = OptionContract(opt_contract_dict_call, self.fut_contract) pair.addoption(option_contract_call) self.assertEqual( pair.__repr__(), "{0} {1} / {2}".format(pair.strike, pair.call.name, pair.put.name))
def test_putcallpair_addoption_error_on_duclicate(self): pair = PutCallPair() pair.addoption(self.option_contract_put) self.assertRaises(ValueError, pair.addoption, self.option_contract_put)
def test_putcallpair_addoption(self): pair = PutCallPair() pair.addoption(self.option_contract_put) self.assertEqual(pair._put, self.option_contract_put) self.assertEqual(pair._call, None)
def test_constructor(self): pair = PutCallPair() self.assertEqual(pair._put, None) self.assertEqual(pair._call, None) self.assertTrue(np.isnan(pair._strike))
def test_putcallpair_addoption_expiration_set(self): pair = PutCallPair() self.assertEqual(None, pair._expiration) self.assertEqual(None, pair.expiration) pair.addoption(self.option_contract_put) self.assertEqual(pair.expiration, datetime(2014, 3, 21, 0, 0))
def test_putcallpair_has_expiration(self): pair = PutCallPair() self.assertEqual(None, pair._expiration) self.assertEqual(None, pair.expiration) pair.addoption(self.option_contract_put)
def test_putcallpair_has_strike(self): pair = PutCallPair() pair.addoption(self.option_contract_put) self.assertEqual(pair._put, self.option_contract_put) self.assertEqual(pair._call, None) self.assertEqual(pair.strike, 2775.0)