def create_contract_roll_orders(data: dataBlob, roll_spread_info: rollSpreadInformation, instrument_order: instrumentOrder) -> listOfOrders: diag_positions = diagPositions(data) instrument_code = instrument_order.instrument_code if roll_spread_info.position_in_priced == 0: return missing_order if diag_positions.is_roll_state_force(instrument_code): contract_orders = create_contract_orders_spread(roll_spread_info) elif diag_positions.is_roll_state_force_outright(instrument_code): contract_orders = create_contract_orders_outright(roll_spread_info) else: log = instrument_order.log_with_attributes(data.log) roll_state = diag_positions.get_roll_state(instrument_code) log.warn("Roll state %s is unexpected, might have changed" % str(roll_state)) return missing_order contract_orders = allocate_algo_to_list_of_contract_orders( data, contract_orders, instrument_order ) return contract_orders
def spawn_children_from_instrument_order(data, instrument_order): spawn_function = function_to_process_instrument( instrument_order.instrument_code) list_of_contract_orders = spawn_function(data, instrument_order) list_of_contract_orders = allocate_algo_to_list_of_contract_orders( data, list_of_contract_orders, instrument_order=instrument_order) return list_of_contract_orders
def create_force_roll_orders(data, instrument_code): """ :param data: :param instrument_code: :return: tuple; instrument_order (or missing_order), contract_orders """ diag_positions = diagPositions(data) strategy = ROLL_PSEUDO_STRATEGY trade = 0 instrument_order = instrumentOrder( strategy, instrument_code, trade, roll_order=True, order_type="Zero-roll-order") diag_contracts = diagContracts(data) priced_contract_id = diag_contracts.get_priced_contract_id(instrument_code) forward_contract_id = diag_contracts.get_forward_contract_id( instrument_code) position_in_priced = diag_positions.get_position_for_instrument_and_contract_date( instrument_code, priced_contract_id) if position_in_priced == 0: return missing_order, [] if diag_positions.is_roll_state_force(instrument_code): contract_orders = create_contract_orders_outright( data, instrument_code, priced_contract_id, forward_contract_id, position_in_priced, ) elif diag_positions.is_roll_state_force_outright(instrument_code): contract_orders = create_contract_orders_spread( data, instrument_code, priced_contract_id, forward_contract_id, position_in_priced, ) else: log = instrument_order.log_with_attributes(data.log) log.warn("Roll state %s is unexpected, might have changed" % str(roll_state)) return missing_order, [] contract_orders = allocate_algo_to_list_of_contract_orders( data, contract_orders, instrument_order=instrument_order ) return instrument_order, contract_orders
def create_force_roll_orders(data, instrument_code): """ :param data: :param instrument_code: :return: tuple; instrument_order (or missing_order), contract_orders """ diag_positions = diagPositions(data) roll_state = diag_positions.get_roll_state(instrument_code) strategy = ROLL_PSEUDO_STRATEGY trade = 0 instrument_order = instrumentOrder(strategy, instrument_code, trade, roll_order=True, order_type="Zero-roll-order") diag_contracts = diagContracts(data) priced_contract_id = diag_contracts.get_priced_contract_id(instrument_code) forward_contract_id = diag_contracts.get_forward_contract_id( instrument_code) position_in_priced = diag_positions.get_position_for_instrument_and_contract_date( instrument_code, priced_contract_id) if position_in_priced == 0: return missing_order, [] if roll_state == "Force_Outright": contract_orders = create_contract_orders_outright( data, instrument_code, priced_contract_id, forward_contract_id, position_in_priced, ) elif roll_state == "Force": contract_orders = create_contract_orders_spread( data, instrument_code, priced_contract_id, forward_contract_id, position_in_priced, ) else: raise Exception("Roll state %s not recognised" % roll_state) contract_orders = allocate_algo_to_list_of_contract_orders( data, contract_orders, instrument_order=instrument_order) return instrument_order, contract_orders