예제 #1
0
    def parse_order(item):
        contract_fields = {}
        order_fields = {}
        for key, value in item.items():
            if value is None:
                continue
            if isinstance(value, six.string_types):
                value = get_string(value)
            tag = ORDER_FIELD_MAPPINGS[
                key] if key in ORDER_FIELD_MAPPINGS else key
            if tag in CONTRACT_FIELDS:
                contract_fields[tag] = value
            else:
                order_fields[tag] = value

        contract_id = contract_fields.get('contract_id')
        symbol = contract_fields.get('symbol')
        currency = contract_fields.get('currency')
        sec_type = contract_fields.get('sec_type')
        exchange = contract_fields.get('exchange')
        origin_symbol = contract_fields.get('origin_symbol')
        local_symbol = contract_fields.get('local_symbol')
        expiry = contract_fields.get('expiry')
        strike = contract_fields.get('strike')
        put_call = contract_fields.get('right')
        multiplier = contract_fields.get('multiplier')
        contract = Contract(symbol,
                            currency,
                            contract_id=contract_id,
                            sec_type=sec_type,
                            exchange=exchange,
                            origin_symbol=origin_symbol,
                            local_symbol=local_symbol,
                            expiry=expiry,
                            strike=strike,
                            put_call=put_call,
                            multiplier=multiplier)
        account = order_fields.get('account')
        action = order_fields.get('action')
        order_type = order_fields.get('order_type')
        quantity = order_fields.get('quantity')
        limit_price = order_fields.get('limit_price')
        aux_price = order_fields.get('aux_price')
        trail_stop_price = order_fields.get('trail_stop_price')
        trailing_percent = order_fields.get('trailing_percent')
        percent_offset = order_fields.get('percent_offset')
        time_in_force = order_fields.get('time_in_force')
        outside_rth = order_fields.get('outside_rth')
        filled = order_fields.get('filled')
        avg_fill_price = order_fields.get('avg_fill_price')
        commission = order_fields.get('commission')
        realized_pnl = order_fields.get('realized_pnl')
        id = order_fields.get('id')
        order_id = order_fields.get('order_id')
        parent_id = order_fields.get('parent_id')
        status = OrdersResponse.get_status(order_fields.get('status'))

        order = Order(account,
                      contract,
                      action,
                      order_type,
                      quantity,
                      limit_price=limit_price,
                      aux_price=aux_price,
                      trail_stop_price=trail_stop_price,
                      trailing_percent=trailing_percent,
                      percent_offset=percent_offset,
                      time_in_force=time_in_force,
                      outside_rth=outside_rth,
                      filled=filled,
                      avg_fill_price=avg_fill_price,
                      commission=commission,
                      realized_pnl=realized_pnl,
                      id=id,
                      order_id=order_id,
                      parent_id=parent_id)
        if 'order_time' in order_fields:
            order.order_time = order_fields.get('order_time')
        if 'trade_time' in order_fields:
            order.trade_time = order_fields.get('trade_time')
        if 'reason' in order_fields:
            order.reason = order_fields.get('reason')

        order.status = status

        return order
    def parse_order(item, secret_key=None):
        contract_fields = {}
        order_fields = {}
        for key, value in item.items():
            if value is None:
                continue
            tag = ORDER_FIELD_MAPPINGS[
                key] if key in ORDER_FIELD_MAPPINGS else key
            if tag in CONTRACT_FIELDS:
                contract_fields[tag] = value
            else:
                order_fields[tag] = value

        contract_id = contract_fields.get('contract_id')
        symbol = contract_fields.get('symbol')
        currency = contract_fields.get('currency')
        sec_type = contract_fields.get('sec_type')
        exchange = contract_fields.get('exchange')
        origin_symbol = contract_fields.get('origin_symbol')
        local_symbol = contract_fields.get('local_symbol')
        expiry = contract_fields.get('expiry')
        strike = contract_fields.get('strike')
        put_call = contract_fields.get('right')
        multiplier = contract_fields.get('multiplier')
        identifier = contract_fields.get('identifier')
        contract = Contract(symbol,
                            currency,
                            contract_id=contract_id,
                            sec_type=sec_type,
                            exchange=exchange,
                            origin_symbol=origin_symbol,
                            local_symbol=local_symbol,
                            expiry=expiry,
                            strike=strike,
                            put_call=put_call,
                            multiplier=multiplier,
                            identifier=identifier)
        account = order_fields.get('account')
        action = order_fields.get('action')
        order_type = order_fields.get('order_type')
        quantity = order_fields.get('quantity')
        limit_price = order_fields.get('limit_price')
        aux_price = order_fields.get('aux_price')
        trail_stop_price = order_fields.get('trail_stop_price')
        trailing_percent = order_fields.get('trailing_percent')
        percent_offset = order_fields.get('percent_offset')
        time_in_force = order_fields.get('time_in_force')
        outside_rth = order_fields.get('outside_rth')
        filled = order_fields.get('filled')
        avg_fill_price = order_fields.get('avg_fill_price')
        commission = order_fields.get('commission')
        realized_pnl = order_fields.get('realized_pnl')
        id_ = order_fields.get('id')
        order_id = order_fields.get('order_id')
        parent_id = order_fields.get('parent_id')
        status = get_order_status(order_fields.get('status'))
        algo_params = AlgoParams.from_tags(order_fields.get('algo_params'))
        liquidation = order_fields.get('liquidation')
        algo_strategy = order_fields.get('algo_strategy')
        discount = order_fields.get('discount')

        order = Order(account,
                      contract,
                      action,
                      order_type,
                      quantity,
                      limit_price=limit_price,
                      aux_price=aux_price,
                      trail_stop_price=trail_stop_price,
                      trailing_percent=trailing_percent,
                      percent_offset=percent_offset,
                      time_in_force=time_in_force,
                      outside_rth=outside_rth,
                      filled=filled,
                      avg_fill_price=avg_fill_price,
                      commission=commission,
                      realized_pnl=realized_pnl,
                      id=id_,
                      order_id=order_id,
                      parent_id=parent_id,
                      algo_params=algo_params,
                      liquidation=liquidation,
                      algo_strategy=algo_strategy,
                      discount=discount)
        if 'order_time' in order_fields:
            order.order_time = order_fields.get('order_time')
        if 'trade_time' in order_fields:
            order.trade_time = order_fields.get('trade_time')
        if 'reason' in order_fields:
            order.reason = order_fields.get('reason')
        if secret_key is not None:
            order.secret_key = secret_key
        order.status = status

        return order