def display_holdings_overview(coin: str, show_bar: bool, export: str, top: int) -> None: """Shows overview of public companies that holds ethereum or bitcoin. [Source: CoinGecko] Parameters ---------- coin: str Cryptocurrency: ethereum or bitcoin export: str Export dataframe data to csv,json,xlsx """ res = gecko.get_holdings_overview(coin) stats_string = res[0] df = res[1] df = df.head(top) if df.empty: console.print("\nZero companies holding this crypto\n") else: if show_bar: fig, ax = plt.subplots(figsize=plot_autoscale(), dpi=PLOT_DPI) for _, row in df.iterrows(): ax.bar(x=row["Symbol"], height=row["Total Holdings"]) ax.set_ylabel("BTC Number") ax.get_yaxis().set_major_formatter( ticker.FuncFormatter(lambda x, _: long_number_format_with_type_check(x)) ) ax.set_xlabel("Company Symbol") fig.tight_layout(pad=8) ax.set_title("Total BTC Holdings per company") ax.tick_params(axis="x", labelrotation=90) console.print(f"\n{stats_string}\n") df = df.applymap(lambda x: long_number_format_with_type_check(x)) print_rich_table( df, headers=list(df.columns), show_index=False, title="Public Companies Holding BTC or ETH", ) console.print("") export_data( export, os.path.dirname(os.path.abspath(__file__)), "cghold", df, )
def display_price_supply(coin_id: str, currency: str, export: str) -> None: """Get ticker information for single coin [Source: CoinPaprika] Parameters ---------- coin_id: str Identifier of coin for CoinPaprika API currency: str Quoted currency export: str Export dataframe data to csv,json,xlsx """ df = coinpaprika_model.get_tickers_info_for_coin(coin_id, currency) if df.empty: console.print("No data found", "\n") return df = df.applymap(lambda x: long_number_format_with_type_check(x)) print_rich_table(df, headers=list(df.columns), show_index=False, title="Coin Information") console.print("") export_data( export, os.path.dirname(os.path.abspath(__file__)), "ps", df, )
def display_global_market(export: str) -> None: """Return data frame with most important global crypto statistics like: market_cap_usd, volume_24h_usd, bitcoin_dominance_percentage, cryptocurrencies_number, market_cap_ath_value, market_cap_ath_date, volume_24h_ath_value, volume_24h_ath_date, market_cap_change_24h, volume_24h_change_24h, last_updated [Source: CoinPaprika] Parameters ---------- export : str Export dataframe data to csv,json,xlsx file """ df = paprika.get_global_market() df_data = df.copy() df["Value"] = df["Value"].apply( lambda x: long_number_format_with_type_check(x)) print_rich_table(df, headers=list(df.columns), show_index=False, title="Global Crypto Statistics") console.print("") export_data( export, os.path.dirname(os.path.abspath(__file__)), "global", df_data, )
def display_categories(sortby: str, top: int, export: str, pie: bool) -> None: """Shows top cryptocurrency categories by market capitalization The cryptocurrency category ranking is based on market capitalization. [Source: CoinGecko] Parameters ---------- top: int Number of records to display sortby: str Key by which to sort data export : str Export dataframe data to csv,json,xlsx file """ df = gecko.get_top_crypto_categories(sortby) df_data = df if not df.empty: if pie: df_data[f"% relative to top {top}"] = ( df_data["Market Cap"] / df_data["Market Cap"].sum() ) * 100 stables_to_display = df_data[df_data[f"% relative to top {top}"] >= 1] other_stables = df_data[df_data[f"% relative to top {top}"] < 1] values_list = list(stables_to_display[f"% relative to top {top}"].values) values_list.append(other_stables[f"% relative to top {top}"].sum()) labels_list = list(stables_to_display["Name"].values) labels_list.append("Others") _, ax = plt.subplots(figsize=plot_autoscale(), dpi=PLOT_DPI) ax.pie( values_list, labels=labels_list, wedgeprops={"linewidth": 0.5, "edgecolor": "white"}, autopct="%1.0f%%", startangle=90, ) ax.set_title(f"Market Cap distribution of top {top} crypto categories") if gtff.USE_ION: plt.ion() plt.show() df = df.applymap(lambda x: long_number_format_with_type_check(x)) print_rich_table( df.head(top), headers=list(df.columns), floatfmt=".2f", show_index=False, ) console.print("") export_data( export, os.path.dirname(os.path.abspath(__file__)), "cgcategories", df_data, ) else: console.print("\nUnable to retrieve data from CoinGecko.\n")
def display_all_exchanges(currency: str, sortby: str, descend: bool, top: int, export: str) -> None: """List exchanges from CoinPaprika API. [Source: CoinPaprika] Parameters ---------- currency: str Quoted currency top: int Number of records to display sortby: str Key by which to sort data descend: bool Flag to sort data descending links: bool Flag to display urls export : str Export dataframe data to csv,json,xlsx file """ df = paprika.get_list_of_exchanges(quotes=currency).sort_values( by=sortby, ascending=descend) df_data = df.copy() if df.empty: print("No data found", "\n") return cols = [col for col in df.columns if col != "rank"] df[cols] = df[cols].applymap( lambda x: long_number_format_with_type_check(x)) print(f"\nDisplaying data vs {currency}") if gtff.USE_TABULATE_DF: print( tabulate( df.head(top), headers=df.columns, floatfmt=".2f", showindex=False, tablefmt="fancy_grid", ), "\n", ) else: print(df.to_string, "\n") export_data( export, os.path.dirname(os.path.abspath(__file__)), "exchanges", df_data, )
def price_supply(coin_id: str, other_args: List[str]): """Get ticker information for single coin Parameters ---------- coin_id: str Identifier of coin for CoinPaprika API other_args: List[str] Arguments to pass to argparse """ parser = argparse.ArgumentParser( prog="ps", add_help=False, formatter_class=argparse.ArgumentDefaultsHelpFormatter, description="""Get price and supply related metrics for given coin.""", ) parser.add_argument( "--vs", help="Quoted currency. Default USD", dest="vs", default="USD", type=str, choices=CURRENCIES, ) try: ns_parser = parse_known_args_and_warn(parser, other_args) if not ns_parser: return df = paprika.get_tickers_info_for_coin(coin_id, ns_parser.vs) if df.empty: print("No data found", "\n") return df = df.applymap(lambda x: long_number_format_with_type_check(x)) print( tabulate( df, headers=df.columns, floatfmt=".2f", showindex=False, tablefmt="fancy_grid", ), "\n", ) except Exception as e: print(e, "\n")
def display_all_coins_market_info(currency: str, sortby: str, descend: bool, top: int, export: str) -> None: """Displays basic market information for all coins from CoinPaprika API. [Source: CoinPaprika] Parameters ---------- currency: str Quoted currency top: int Number of records to display sortby: str Key by which to sort data descend: bool Flag to sort data descending links: bool Flag to display urls export : str Export dataframe data to csv,json,xlsx file """ df = paprika.get_coins_market_info(quotes=currency).sort_values( by=sortby, ascending=descend) df_data = df.copy() if df.empty: console.print("No data found", "\n") return cols = [col for col in df.columns if col != "rank"] df[cols] = df[cols].applymap( lambda x: long_number_format_with_type_check(x)) console.print(f"\nDisplaying data vs {currency}") print_rich_table( df.head(top), headers=list(df.columns), show_index=False, title="Basic Market Information", ) console.print("") export_data( export, os.path.dirname(os.path.abspath(__file__)), "markets", df_data, )
def display_price_supply(coin_id: str, currency: str, export: str) -> None: """Get ticker information for single coin [Source: CoinPaprika] Parameters ---------- coin_id: str Identifier of coin for CoinPaprika API currency: str Quoted currency export: str Export dataframe data to csv,json,xlsx """ df = coinpaprika_model.get_tickers_info_for_coin(coin_id, currency) if df.empty: print("No data found", "\n") return df = df.applymap(lambda x: long_number_format_with_type_check(x)) if gtff.USE_TABULATE_DF: print( tabulate( df, headers=df.columns, floatfmt=".2f", showindex=False, tablefmt="fancy_grid", ), "\n", ) else: print(df.to_string, "\n") export_data( export, os.path.dirname(os.path.abspath(__file__)), "ps", df, )
def global_market(other_args: List[str]): """Return data frame with most important global crypto statistics like: market_cap_usd, volume_24h_usd, bitcoin_dominance_percentage, cryptocurrencies_number, market_cap_ath_value, market_cap_ath_date, volume_24h_ath_value, volume_24h_ath_date, market_cap_change_24h, volume_24h_change_24h, last_updated, Parameters ---------- other_args: List[str] Arguments to pass to argparse """ parser = argparse.ArgumentParser( add_help=False, formatter_class=argparse.ArgumentDefaultsHelpFormatter, prog="global", description="""Show most important global crypto statistics like: market_cap_usd, volume_24h_usd, bitcoin_dominance_percentage, cryptocurrencies_number, market_cap_ath_value, market_cap_ath_date, volume_24h_ath_value, volume_24h_ath_date, market_cap_change_24h, volume_24h_change_24h, last_updated.""", ) try: ns_parser = parse_known_args_and_warn(parser, other_args) if not ns_parser: return df = paprika.get_global_market() df["Value"] = df["Value"].apply(lambda x: long_number_format_with_type_check(x)) print( tabulate( df, headers=df.columns, floatfmt=".1f", showindex=False, tablefmt="fancy_grid", ) ) print("") except Exception as e: print(e, "\n")
def display_global_market(export: str) -> None: """Return data frame with most important global crypto statistics like: market_cap_usd, volume_24h_usd, bitcoin_dominance_percentage, cryptocurrencies_number, market_cap_ath_value, market_cap_ath_date, volume_24h_ath_value, volume_24h_ath_date, market_cap_change_24h, volume_24h_change_24h, last_updated [Source: CoinPaprika] Parameters ---------- export : str Export dataframe data to csv,json,xlsx file """ df = paprika.get_global_market() df_data = df.copy() df["Value"] = df["Value"].apply( lambda x: long_number_format_with_type_check(x)) if gtff.USE_TABULATE_DF: print( tabulate( df, headers=df.columns, floatfmt=".1f", showindex=False, tablefmt="fancy_grid", ), "\n", ) else: print(df.to_string, "\n") export_data( export, os.path.dirname(os.path.abspath(__file__)), "global", df_data, )
def display_stablecoins( top: int, export: str, sortby: str, descend: bool, pie: bool ) -> None: """Shows stablecoins data [Source: CoinGecko] Parameters ---------- top: int Number of records to display sortby: str Key by which to sort data descend: bool Flag to sort data descending export : str Export dataframe data to csv,json,xlsx file """ df = gecko.get_stable_coins(top) if not df.empty: total_market_cap = int(df["market_cap"].sum()) df[f"Percentage [%] of top {top}"] = (df["market_cap"] / total_market_cap) * 100 df_data = df df = df.sort_values(by=sortby, ascending=descend).head(top) df = df.set_axis( [ "Symbol", "Name", "Price [$]", "Market Cap [$]", "Market Cap Rank", "Change 24h [%]", "Change 7d [%]", "Volume [$]", f"Percentage [%] of top {top}", ], axis=1, inplace=False, ) df = df.applymap(lambda x: long_number_format_with_type_check(x)) if pie: stables_to_display = df_data[df_data[f"Percentage [%] of top {top}"] >= 1] other_stables = df_data[df_data[f"Percentage [%] of top {top}"] < 1] values_list = list( stables_to_display[f"Percentage [%] of top {top}"].values ) values_list.append(other_stables[f"Percentage [%] of top {top}"].sum()) labels_list = list(stables_to_display["name"].values) labels_list.append("Others") _, ax = plt.subplots(figsize=plot_autoscale(), dpi=PLOT_DPI) ax.pie( values_list, labels=labels_list, wedgeprops={"linewidth": 0.5, "edgecolor": "white"}, labeldistance=1.05, autopct="%1.0f%%", startangle=90, ) ax.set_title(f"Market cap distribution of top {top} Stablecoins") if gtff.USE_ION: plt.ion() plt.show() console.print( f""" First {top} stablecoins have a total {long_number_format_with_type_check(total_market_cap)} dollars of market cap. """ ) print_rich_table( df.head(top), headers=list(df.columns), show_index=False, title="Stablecoin Data", ) console.print("") export_data( export, os.path.dirname(os.path.abspath(__file__)), "cgstables", df, ) else: console.print("\nUnable to retrieve data from CoinGecko.\n")
def all_exchanges(other_args: List[str]): """List exchanges from CoinPaprika API Parameters ---------- other_args: List[str] Arguments to pass to argparse """ parser = argparse.ArgumentParser( add_help=False, formatter_class=argparse.ArgumentDefaultsHelpFormatter, prog="exchanges", description="""Show all exchanges from CoinPaprika You can display only top N number of coins with --top parameter. You can sort data by rank, name, currencies, markets, fiats, confidence, volume_24h,volume_7d ,volume_30d, sessions_per_month --sort parameter and also with --descend flag to sort descending. Displays: rank, name, currencies, markets, fiats, confidence, volume_24h, volume_7d ,volume_30d, sessions_per_month""", ) parser.add_argument( "--vs", help="Quoted currency. Default USD", dest="vs", default="USD", type=str, choices=CURRENCIES, ) parser.add_argument( "-t", "--top", default=20, dest="top", help="Limit of records", type=check_positive, ) parser.add_argument( "-s", "--sort", dest="sortby", type=str, help="Sort by given column. Default: rank", default="rank", choices=[ "rank", "name", "currencies", "markets", "fiats", "confidence", "volume_24h", "volume_7d", "volume_30d", "sessions_per_month", ], ) parser.add_argument( "--descend", action="store_false", help="Flag to sort in descending order (lowest first)", dest="descend", default=True, ) try: ns_parser = parse_known_args_and_warn(parser, other_args) if not ns_parser: return df = paprika.get_list_of_exchanges(quotes=ns_parser.vs).sort_values( by=ns_parser.sortby, ascending=ns_parser.descend ) if df.empty: print("No data found", "\n") return cols = [col for col in df.columns if col != "rank"] df[cols] = df[cols].applymap(lambda x: long_number_format_with_type_check(x)) print("") print(f"Displaying data vs {ns_parser.vs}") print( tabulate( df.head(ns_parser.top), headers=df.columns, floatfmt=".2f", showindex=False, tablefmt="fancy_grid", ) ) print("") except Exception as e: print(e, "\n")