def __create_display_check( order: Order, checking_response: Order.CheckingResponse, ): checking_response_dict = pb_handler.message_to_dict( message=checking_response, ) order_dict = pb_handler.message_to_dict(message=order) order_df = pd.DataFrame([order_dict]) fields = [ "action", "order_type", "price", "product_id", "size", "time_type", ] fees = pd.DataFrame(checking_response_dict["transaction_fees"]) console.print( "The following `Order` will be created :\n\n", order_df[fields], "\n\nFree new space :", checking_response_dict["free_space_new"], "\n\nFees :\n\n", fees, )
def __lastnews_display(latest_news: LatestNews): news_dict = pb_handler.message_to_dict(message=latest_news, ) for article in news_dict["items"]: console.print("date", article["date"]) console.print("title", article["title"]) console.print("content", article["content"]) console.print("---")
def create_calculate_product_id( self, product: int, symbol: str, ) -> Union[int, None]: trading_api = self.__trading_api if product is None: request_lookup = ProductSearch.RequestLookup( search_text=symbol, limit=1, offset=0, product_type_id=1, ) products_lookup = trading_api.product_search( request=request_lookup, raw=False, ) products_lookup_dict = pb_handler.message_to_dict( message=products_lookup, ) product = products_lookup_dict["products"][0] if len(products_lookup.products ) <= 0 or product["symbol"] != symbol: return None else: return int(product["id"]) else: return product
def __hold_filter_current_positions( portfolio: Update.Portfolio, ) -> pd.DataFrame: """Filter the positions in order to keep only held ones. Parameters ---------- portfolio : Update.Portfolio Portfolio returned from the API. Returns ------- pd.DataFrame Filtered portfolio. """ # CONVERT TO DATAFRAME portfolio_dict = pb_handler.message_to_dict(message=portfolio) positions = pd.DataFrame(portfolio_dict["values"]) # SETUP MASK mask_product = positions["positionType"] == "PRODUCT" mask_not_empty = positions["size"] > 0 mask_current_position = mask_product & mask_not_empty # FILTER positions = positions[mask_current_position] return positions
def __companynews_display(news_by_company: NewsByCompany): news_dict = pb_handler.message_to_dict(message=news_by_company, ) for article in news_dict["items"]: console.print("date", article["date"]) console.print("title", article["title"]) console.print("content", article["content"]) console.print("isins", article["isins"]) console.print("---")
def __topnews_display(top_news: TopNewsPreview): news_dict = pb_handler.message_to_dict(message=top_news, ) for article in news_dict["items"]: console.print("date", article["date"]) console.print("lastUpdated", article["lastUpdated"]) console.print("category", article["category"]) console.print("title", article["title"]) console.print("brief", article["brief"]) console.print("---")
def __lookup_display(product_search: ProductSearch): products_dict = pb_handler.message_to_dict(message=product_search, ) products_df = pd.DataFrame(products_dict["products"]) products_selected = products_df[[ "id", "name", "isin", "symbol", "productType", "currency", "closePrice", "closePriceDate", ]] console.print(products_selected)
def __pending_display(orders: Update.Orders): orders_dict = pb_handler.message_to_dict(message=orders) orders_df = pd.DataFrame(orders_dict["values"]) fields = [ "action", "currency", "id", "quantity", "order_type", "price", "product", "product_id", "stop_price", "total_order_value", ] console.print(orders_df[orders_df.columns.intersection(fields)])
def __hold_fetch_additional_information( self, positions: pd.DataFrame, ) -> pd.DataFrame: """Fetch extra information about the positions like : - name - isin - symbol - ... Parameters ---------- positions : pd.DataFrame Positions from which we want extra fields. Returns ------- pd.DataFrame Positions with additional data. """ # GET ATTRIBUTES trading_api = self.__trading_api # EXTRACT POSITIONS IDS positions_ids = positions["id"].astype("int32").tolist() # FETCH EXTRA DATA request = ProductsInfo.Request() request.products.extend(positions_ids) products_info_pb = trading_api.get_products_info( request=request, raw=False, ) # CONVERT TO DICT products_info_dict = pb_handler.message_to_dict( message=products_info_pb, ) # CONVERT TO DATAFRAME products_info = pd.DataFrame(products_info_dict["values"].values()) # MERGE DATA WITH POSITIONS positions_full = pd.merge(positions, products_info, on="id") return positions_full
def __create_display_created_order(order: Order): order_dict = pb_handler.message_to_dict(message=order) order_df = pd.DataFrame([order_dict]) fields = [ "id", "action", "order_type", "price", "product_id", "size", "time_type", ] console.print( "The following `Order` was created :\n", order_df[order_df.columns.intersection(fields)], )