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
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"))
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
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
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()
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()
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"])
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")