def create_from_dict(futuresContract, futures_contract_dict): """ :param futures_contract_dict: The result of running .as_dict on a futuresContract. :return: futuresContract object """ contract_date_dict = futures_contract_dict["contract_date_dict"] instrument_dict = futures_contract_dict["instrument_dict"] contract_params_dict = futures_contract_dict["contract_params"] contract_date_object = contractDate.create_from_dict(contract_date_dict) instrument_object = futuresInstrument.create_from_dict(instrument_dict) parameter_object = parametersForFuturesContract.from_dict(contract_params_dict) return futuresContract( instrument_object, contract_date_object, parameter_object=parameter_object )
def test_contractDate(self): contract_date201801 = contractDate("201801") contract_date20180115 = contractDate("20180115") contract_date20180100 = contractDate("20180100") self.assertEqual(contract_date20180100.date_str, "20180100") # dictionary contract_date_dict_201801 = contract_date201801.as_dict() self.assertEqual( contract_date_dict_201801, dict(expiry_date=(2018, 1, 1), contract_date="201801", approx_expiry_offset=0), ) contract_date_dict_20180115 = contract_date20180115.as_dict() self.assertEqual( contract_date_dict_20180115, dict( expiry_date=(2018, 1, 15), contract_date="20180115", approx_expiry_offset=0, ), ) new_contractdate20801 = contractDate.create_from_dict( contract_date_dict_201801) self.assertEqual(contract_date201801.date_str, new_contractdate20801.date_str) self.assertEqual(contract_date201801.expiry_date.year, new_contractdate20801.expiry_date.year) # basic functionality self.assertEqual(contract_date201801.date_str, "20180100") self.assertEqual(contract_date20180115.date_str, "20180115") self.assertEqual(contract_date201801.year(), 2018) self.assertEqual(contract_date201801.month(), 1) self.assertEqual(contract_date201801.only_has_month, True) self.assertEqual(contract_date20180115.day(), 15) self.assertEqual(contract_date201801.letter_month(), "F") self.assertEqual(contract_date201801._as_date(), datetime.datetime(2018, 1, 1)) self.assertEqual(contract_date20180115._as_date(), datetime.datetime(2018, 1, 15)) # check date comparision self.assertEqual( contract_date201801.check_if_expiry_after_date( datetime.datetime(2018, 2, 1)), False, ) self.assertEqual( contract_date201801.check_if_expiry_after_date( datetime.datetime(2017, 12, 31)), True, ) # alternative method to define contracts contract_date201801b = contractDate.contract_date_from_numbers(2018, 1) contract_date20180115b = contractDate.contract_date_from_numbers( 2018, 1, 15) self.assertEqual(contract_date201801b.date_str, "20180100") self.assertEqual(contract_date20180115b.date_str, "20180115") # check expiry dates contract_date201803_withexpiry = contractDate("201803", expiry_date=(2008, 3, 15)) contract_date201801b_withexpiry = contractDate.contract_date_from_numbers( 2018, 1, expiry_date=(2008, 1, 16)) self.assertEqual(contract_date201803_withexpiry.expiry_date, datetime.datetime(2008, 3, 15)) self.assertEqual(contract_date201801b_withexpiry.expiry_date, datetime.datetime(2008, 1, 16)) # check expiry dates with contract offset contract_date201803_withexpiry_offset = contractDate( "201803", approx_expiry_offset=40) contract_date201801b_withexpiry_offset = ( contractDate.contract_date_from_numbers(2018, 1, approx_expiry_offset=-20)) self.assertEqual( contract_date201803_withexpiry_offset.expiry_date, datetime.datetime(2018, 4, 10), ) self.assertEqual( contract_date201801b_withexpiry_offset.expiry_date, datetime.datetime(2017, 12, 12), )