Beispiel #1
0
def _apply_float_override(override_as_float: float,
        original_position_no_override: int,
        proposed_trade: Order) -> Order:
    """
    Works if override value is float, or override_close (float value is 0.0) or override_none (float value is 1.0)

    :param original_position_no_override:
    :param proposed_trade:
    :return:
    """

    if override_as_float == 1.0:
        return proposed_trade

    desired_new_position = original_position_no_override + proposed_trade.trade.as_single_trade_qty_or_error()
    override_new_position = int(
        np.floor(
            desired_new_position *
            override_as_float))

    new_trade_value = override_new_position - original_position_no_override

    proposed_trade.replace_required_trade_size_only_use_for_unsubmitted_trades(
        tradeQuantity(new_trade_value))

    return proposed_trade
def what_trade_is_possible(position: int, position_limit: int, order: Order) -> Order:

    ## POSIITON LIMITS CAN ONLY BE APPLIED TO SINGLE LEG TRADES, EG INSTRUMENT ORDERS
    proposed_trade = order.as_single_trade_qty_or_error()
    possible_trade = what_trade_is_possible_single_leg_trade(position=position,
                                                             position_limit=position_limit,
                                                             proposed_trade=proposed_trade)

    possible_trade_as_trade_qty = tradeQuantity(possible_trade)

    order = order.replace_required_trade_size_only_use_for_unsubmitted_trades(possible_trade_as_trade_qty)

    return order
    def add_children_to_stack_and_child_id_to_parent(
        self,
        parent_stack: orderStackData,
        child_stack: orderStackData,
        parent_order: Order,
        list_of_child_orders: listOfOrders,
    ):

        parent_log = parent_order.log_with_attributes(self.log)

        list_of_child_ids = put_children_on_stack(
            child_stack=child_stack,
            list_of_child_orders=list_of_child_orders,
            parent_log=parent_log,
            parent_order=parent_order,
        )
        if len(list_of_child_ids) == 0:
            return None

        success_or_failure = add_children_to_parent_or_rollback_children(
            child_stack=child_stack,
            parent_order=parent_order,
            parent_log=parent_log,
            parent_stack=parent_stack,
            list_of_child_ids=list_of_child_ids,
        )

        if success_or_failure is success:
            log_successful_adding(
                list_of_child_orders=list_of_child_orders,
                list_of_child_ids=list_of_child_ids,
                parent_order=parent_order,
                parent_log=parent_log,
            )
Beispiel #4
0
    def _add_order_to_data_no_checking(self, order: Order):
        # Duplicates will be overriden, so be careful
        mongo_record = order.as_dict()

        self.mongo_data.add_data(order.order_id,
                                 mongo_record,
                                 allow_overwrite=True)
Beispiel #5
0
def _apply_reduce_only(original_position_no_override: int,
                       proposed_trade: Order) -> Order:

    proposed_trade_value = proposed_trade.trade.as_single_trade_qty_or_error()
    desired_new_position = original_position_no_override + proposed_trade_value
    if sign(desired_new_position) != sign(original_position_no_override):
        # Wants sign to change, we convert into a pure closing trade
        new_trade_value = -original_position_no_override

    elif abs(desired_new_position) > abs(original_position_no_override):
        # Increasing trade not allowed, zero trade
        new_trade_value = 0
    else:
        # Reducing trade and sign not changing, we'll allow
        new_trade_value = proposed_trade_value

    proposed_trade.replace_required_trade_size_only_use_for_unsubmitted_trades(
        tradeQuantity(new_trade_value))

    return proposed_trade
    def _put_order_on_stack_and_get_order_id(self, order: Order) -> int:
        order_has_existing_id = not order.order_id is no_order_id
        if order_has_existing_id:
            log = order.log_with_attributes(self.log)
            log.warn(
                "Order %s already has order ID will be ignored and allocated a new ID!"
                % str(order))

        order_to_add = copy(order)
        order_id = self._get_next_order_id()
        order_to_add.order_id = order_id

        self._put_order_on_stack_no_checking(order_to_add)

        return order_id
Beispiel #7
0
def fill_from_order(order: Order) -> Fill:
    try:
        assert len(order.trade) == 1
    except:
        raise Exception("Can't get fills from multi-leg orders")

    if order.fill_equals_zero():
        return missing_order

    fill_price = order.filled_price
    fill_datetime = order.fill_datetime
    fill_qty = order.fill[0]

    if fill_price is None:
        return missing_order

    if fill_datetime is None:
        return missing_order

    return Fill(fill_datetime, fill_qty, fill_price)
Beispiel #8
0
def _apply_no_trading(proposed_trade: Order):
    new_trade = proposed_trade.replace_required_trade_size_only_use_for_unsubmitted_trades(
        tradeQuantity(0))

    return new_trade
    def _put_order_on_stack_no_checking(self, order: Order):
        order_as_dict = order.as_dict()

        self.mongo_data.add_data(int(order.order_id), order_as_dict, allow_overwrite=False)