Esempio n. 1
0
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,
        )
Esempio n. 2
0
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,
    )
Esempio n. 3
0
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,
    )
Esempio n. 4
0
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,
    )
Esempio n. 6
0
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")
Esempio n. 7
0
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,
    )
Esempio n. 8
0
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,
    )
Esempio n. 9
0
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,
    )
Esempio n. 11
0
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")
Esempio n. 12
0
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")