Ejemplo n.º 1
0
    def get_all_managed_accounts() -> List[str]:
        ibkr_api: IBKR_API = IBKR_Helper.get_IBKR_connection()
        ibkr_api.reqManagedAccts()

        data_list: List[Any] = IBKR_Helper.get_data_from_ibkr(ibkr_api, "managed_accounts")
        return_data: List[str] = []
        for data in data_list:
            return_data.append(data.get("accountsList"))
        return return_data
Ejemplo n.º 2
0
    def request_account_summary(currency: global_common.Currency = None) -> "Account":
        ibkr_api: IBKR_API = IBKR_Helper.get_IBKR_connection()

        if currency is None:
            ibkr_api.reqAccountSummary(2, "All", "$LEDGER")
        else:
            ibkr_api.reqAccountSummary(2, "All", f"$LEDGER:{currency.value}")

        return Account(IBKR_Helper.get_data_from_ibkr(ibkr_api, "account_summary_end", "account_summary"))
Ejemplo n.º 3
0
    def get_historical_data(symbol: str, bar_size: HistoricalDataBarSize = HistoricalDataBarSize.DAY_1, historical_data_type: HistoricalDataType = HistoricalDataType.TRADES) -> List["HistoricalData"]:
        ibkr_api: IBKR_API = IBKR_Helper.get_IBKR_connection()
        ibkr_api.reqHistoricalData(ibkr_api.next_order_id, IBKR_Helper.get_contract_object(symbol, SecurityType.STOCK), (datetime.datetime.today()).strftime("%Y%m%d %H:%M:%S"), "30 Y", bar_size.value, historical_data_type.value, 1, 1, False, [])
        raw_historical_data_list: List[Dict[str, Any]] = IBKR_Helper.get_data_from_ibkr(ibkr_api, "historical_data_end", "historical_data")

        historical_data: List[HistoricalData] = []
        for raw_historical_data in raw_historical_data_list:
            historical_data.append(HistoricalData(raw_historical_data.get("bar")))
        return historical_data
Ejemplo n.º 4
0
    def get_positions() -> List["Position"]:
        ibkr_api: IBKR_API = IBKR_Helper.get_IBKR_connection()
        ibkr_api.reqPositions()

        data_list: List[Dict[str, Any]] = IBKR_Helper.get_data_from_ibkr(ibkr_api, "positions_end", "positions")
        position_list: List["Position"] = []

        if data_list is not None:
            for data in data_list:
                position_list.append(Position(data.get("account"), data.get("contract"), data.get("position"), data.get("avgCost")))

        return position_list
Ejemplo n.º 5
0
    def get_current_ask_price(symbol: str, number_of_tries: int = 0) -> Union[Decimal, None]:
        contract = IBKR_Helper.get_contract_object(symbol, SecurityType.STOCK)

        ibkr_api: IBKR_API = IBKR_Helper.get_IBKR_connection()
        ibkr_api.reqMktData(ibkr_api.next_order_id, contract, '', False, False, [])
        data_list: List[Dict[str, Any]] = IBKR_Helper.get_data_from_ibkr(ibkr_api, "ask_price")
        for data in data_list:
            if data.get("price") != -1:
                return Decimal(str(data.get("price")))

        if number_of_tries < 3:
            return IBKR.get_current_ask_price(symbol, number_of_tries + 1)
        else:
            raise MarketDataNotAvailableException()
Ejemplo n.º 6
0
    def cancel_all_orders() -> None:
        communication.telegram.send_message(communication.telegram.constants.telegram_channel_username, "<u><b>Cancelling all orders</b></u>", True)

        ibkr_api: IBKR_API = IBKR_Helper.get_IBKR_connection()
        ibkr_api.reqGlobalCancel()
        time.sleep(constants.WAIT_TIME_IN_SECONDS)
        ibkr_api.disconnect()
Ejemplo n.º 7
0
    def place_order(symbol: str, quantity: Decimal, limit_price: Decimal, order_action: OrderAction, order_type: OrderType, security_type: SecurityType) -> "Order":
        communication.telegram.send_message(communication.telegram.constants.telegram_channel_username,
                                            f"<u><b>Placing a new order</b></u>\n\nSymbol: <i>{symbol}</i>"
                                            f"\nOrder Type: <i>{order_type.value}</i>"
                                            f"\nOrder Action: <i>{order_action.value}</i>"
                                            f"\nQuantity: <i>{str(quantity)}</i>"
                                            f"\nPrice: <i>{str(limit_price)}</i>", True)

        order: ibapi.order.Order = IBKR_Helper.get_order_object(quantity, limit_price, order_action, order_type)
        contract: ibapi.contract.Contract = IBKR_Helper.get_contract_object(symbol, security_type)

        ibkr_api: IBKR_API = IBKR_Helper.get_IBKR_connection()
        ibkr_api.placeOrder(ibkr_api.next_order_id, contract, order)

        data_list: List[Dict[str, Any]] = IBKR_Helper.get_data_from_ibkr(ibkr_api, "order_status")

        return Order(data_list[0]["orderId"], data_list[1]["status"], data_list[1]["filled"], data_list[1]["remaining"], data_list[1]["avgFillPrice"], data_list[0]["contract"], data_list[0]["order"], data_list[0]["orderState"])
Ejemplo n.º 8
0
    def get_all_order_status() -> List[Any]:
        ibkr_api: IBKR_API = IBKR_Helper.get_IBKR_connection()
        ibkr_api.reqAllOpenOrders()

        return IBKR_Helper.get_data_from_ibkr(ibkr_api, "order_status_end", "order_status")