Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
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