Beispiel #1
0
def create_balance_trade(data):
    data_broker = dataBroker(data)
    default_account = data_broker.get_broker_account()

    print("Most likely use case here is that IB has closed one of your positions as close to the expiry")
    print("Or an edge case in which an order was submitted and then filled whilst you were not monitoring fills")
    print("Trades have to be attributed to a strategy (even roll trades)")
    strategy_name = get_valid_strategy_name_from_user()
    instrument_code, contract_date = get_valid_instrument_code_and_contractid_from_user(data)
    fill_qty = get_and_convert("Quantity ", type_expected=int, allow_default=False)
    filled_price = get_and_convert("Filled price", type_expected=float, allow_default=False)
    fill_datetime  =get_datetime_input("Fill datetime", allow_default=True)
    commission = get_and_convert("Commission", type_expected=float, allow_default=True, default_value=0.0)
    broker_account = get_and_convert("Account ID", type_expected=str, allow_default=True, default_value=default_account)

    broker_order = brokerOrder(strategy_name, instrument_code, contract_date, [fill_qty],
                               fill = [fill_qty],
                               algo_used="balance_trade",
                               order_type="balance_trade",
                               filled_price = filled_price,
                               fill_datetime = fill_datetime,
                               broker_account = broker_account,
                               commission = commission, manual_fill=True,
                               active = False)

    print(broker_order)
    ans = input("Are you sure? (Y/other)")
    if ans !="Y":
        return None

    stack_handler = stackHandlerCreateBalanceTrades(data)

    stack_handler.create_balance_trade(broker_order)
Beispiel #2
0
    def create_broker_order_object(self, raw_order):
        """
        Map from the data IB gives us to my broker order object

        :param raw_order: named tuple with fields defined in ibClient
        :return: brokerOrder
        """

        sec_type = raw_order.contract.ib_sectype
        if sec_type != "FUT":
            ## Doesn't handle non futures trades, just ignores them
            return missing_order

        strategy_name = "NOT_MATCHED"

        instrument_code = self.futures_contract_data.get_instrument_code_from_broker_code(
            raw_order.contract.ib_instrument_code)
        contract_id = raw_order.contract.ib_contract_id

        # NOT A SPREAD ORDER

        order_sign = raw_order.order.order_sign
        remain_qty = raw_order.order.remain_qty * order_sign
        fill = raw_order.total_filled * order_sign
        trade_size = fill + remain_qty

        algo_comment = raw_order.algo_msg
        order_type = raw_order.order.type
        limit_price = raw_order.order.limit_price
        broker_account = raw_order.order.account
        broker_permid = raw_order.order.perm_id

        broker_clientid, broker_tempid, filled_price, fill_datetime, commission = self.extract_totals_from_fill_data(
            raw_order.fills)

        broker_order = brokerOrder(strategy_name,
                                   instrument_code, [contract_id],
                                   [trade_size],
                                   fill=[fill],
                                   order_type=order_type,
                                   limit_price=limit_price,
                                   filled_price=filled_price,
                                   algo_comment=algo_comment,
                                   fill_datetime=fill_datetime,
                                   broker_account=broker_account,
                                   commission=commission,
                                   broker_permid=broker_permid,
                                   broker_tempid=broker_tempid,
                                   broker_clientid=broker_clientid)

        return broker_order