def mark_contracts_as_stopped_sampling(instrument_code, contracts_not_sampling, data, log=logtoscreen("")): """ :param instrument_code: str :param contracts_not_sampling: list of contractDate objects :param data: dataBlobg :return: None """ diag_contracts = diagContracts(data) update_contracts = updateContracts(data) for contract_date_object in contracts_not_sampling: contract_date = contract_date_object.date # Mark it as stop sampling in the database contract = diag_contracts.get_contract_data(instrument_code, contract_date) if contract.currently_sampling: contract.sampling_off() update_contracts.add_contract_data(contract, ignore_duplication=True) log.msg( "Contract %s has now stopped sampling" % str(contract), contract_date=contract.date, ) else: # nothing to do pass return None
def add_missing_contracts_to_database(instrument_code, missing_from_db, data, log=logtoscreen("")): """ :param instrument_code: str :param missing_from_db: list of contract_date objects :param data: dataBlob :return: None """ diag_contracts = diagContracts(data) update_contracts = updateContracts(data) for contract_to_add in missing_from_db: contract_date = contract_to_add.date if diag_contracts.is_contract_in_data(instrument_code, contract_date): contract_to_add = diag_contracts.get_contract_data( instrument_code, contract_date) # Mark it as sampling contract_to_add.sampling_on() # Add it to the database # We are happy to overwrite update_contracts.add_contract_data(contract_to_add, ignore_duplication=True) log.msg("Contract %s now added to database and sampling" % str(contract_to_add)) return None
def add_missing_contract_to_database(data: dataBlob, contract_to_add: futuresContract): diag_contracts = diagContracts(data) update_contracts = updateContracts(data) instrument_code = contract_to_add.instrument_code contract_date_str = contract_to_add.date_str if diag_contracts.is_contract_in_data(instrument_code, contract_date_str): contract_to_add = diag_contracts.get_contract_object( instrument_code, contract_date_str ) # Mark it as sampling contract_to_add.sampling_on() # Add it to the database # We are happy to overwrite update_contracts.add_contract_data( contract_to_add, ignore_duplication=True) log = data.log.setup(instrument_code=instrument_code) log.msg( "Contract %s now added to database and sampling" % str(contract_to_add))
def update_expiry_for_contract(contract_object, data): """ Get an expiry from IB, check if same as database, otherwise update the database :param contract_object: contract object :param data: dataBlob :param log: log :return: None """ log = data.log diag_contracts = diagContracts(data) data_broker = dataBroker(data) update_contracts = updateContracts(data) contract_date = contract_object.date instrument_code = contract_object.instrument_code log = log.setup( instrument_code=instrument_code, contract_date=contract_date) db_contract = diag_contracts.get_contract_data( instrument_code, contract_date) # Both should be in format expiryDate(yyyy,mm,dd) db_expiry_date = db_contract.date.expiry_date try: ib_expiry_date = ( data_broker.get_actual_expiry_date_for_instrument_code_and_contract_date( instrument_code, contract_date)) if ib_expiry_date is missing_contract: raise Exception() except Exception as e: # We can do nothing with that... log.warn( "%s so couldn't get expiry date for %s" % (e, str(contract_object))) return None # Will they be same format? if ib_expiry_date == db_expiry_date: log.msg( "No change to contract expiry %s to %s" % (str(contract_object), str(ib_expiry_date)) ) return None # Different! contract_object.date.update_expiry_date(ib_expiry_date) update_contracts.add_contract_data( contract_object, ignore_duplication=True) log.msg( "Updated expiry of contract %s to %s" % (str(contract_object), str(ib_expiry_date)) ) return None
def update_contract_object_with_new_expiry_date( data: dataBlob, broker_expiry_date: expiryDate, contract_object: futuresContract): update_contracts = updateContracts(data) contract_object.update_expiry_date(broker_expiry_date) update_contracts.add_contract_data(contract_object, ignore_duplication=True) data.log.msg("Updated expiry of contract %s to %s" % (str(contract_object), str(broker_expiry_date)))
def stop_expired_contracts_sampling(instrument_code: str, data: dataBlob): ## expiry dates will have been updated and are correct current_contract_chain_in_db = get_current_contract_chain_in_db(data, instrument_code) diag_contracts = diagContracts(data) update_contracts = updateContracts(data) log = data.log.setup(instrument_code=instrument_code) for contract_date_object in current_contract_chain_in_db: contract_date = contract_date_object.date_str # Mark it as stop sampling in the database contract = diag_contracts.get_contract_object( instrument_code, contract_date) if contract.expired() and contract.currently_sampling: contract.sampling_off() update_contracts.add_contract_data( contract, ignore_duplication=True) log.msg( "Contract %s has now stopped sampling" % str(contract), contract_date=contract.date_str, )