diff --git a/gamestonk_terminal/config_terminal.py b/gamestonk_terminal/config_terminal.py index aa796fbd572..73001ac4dcb 100644 --- a/gamestonk_terminal/config_terminal.py +++ b/gamestonk_terminal/config_terminal.py @@ -152,3 +152,6 @@ API_BITQUERY_KEY = os.getenv("GT_API_BITQUERY_KEY") or "REPLACE_ME" # https://terra.smartstake.io/ API_SMARTSTAKE_KEY = os.getenv("GT_API_SMARTSTAKE_KEY") or "REPLACE_ME" API_SMARTSTAKE_TOKEN = os.getenv("GT_API_SMARTSTAKE_TOKEN") or "REPLACE_ME" + +# https://messari.io/ +API_MESSARI_KEY = os.getenv("GT_API_MESSARI_KEY") or "REPLACE_ME" diff --git a/gamestonk_terminal/cryptocurrency/due_diligence/dd_controller.py b/gamestonk_terminal/cryptocurrency/due_diligence/dd_controller.py index 19db646630a..cc8b2387d1e 100644 --- a/gamestonk_terminal/cryptocurrency/due_diligence/dd_controller.py +++ b/gamestonk_terminal/cryptocurrency/due_diligence/dd_controller.py @@ -23,6 +23,8 @@ from gamestonk_terminal.cryptocurrency.due_diligence import ( glassnode_model, glassnode_view, pycoingecko_view, + messari_model, + messari_view, ) from gamestonk_terminal.decorators import log_start_end from gamestonk_terminal.helper_funcs import ( @@ -71,12 +73,14 @@ class DueDiligenceController(CryptoBaseController): "balance", ], "cb": ["cbbook", "trades", "stats"], + "mes": ["mcapdom"], } DD_VIEWS_MAPPING = { "cg": pycoingecko_view, "cp": coinpaprika_view, "bin": binance_view, + "mes": messari_view, } PATH = "/crypto/dd/" @@ -132,6 +136,9 @@ class DueDiligenceController(CryptoBaseController): choices["twitter"]["-s"] = { c: None for c in coinpaprika_view.TWEETS_FILTERS } + choices["mcapdom"]["-i"] = { + c: None for c in messari_model.INTERVALS_TIMESERIES + } choices["ps"]["--vs"] = {c: None for c in coinpaprika_view.CURRENCIES} self.completer = NestedCompleter.from_nested_dict(choices) @@ -174,7 +181,9 @@ class DueDiligenceController(CryptoBaseController): [src]Coinbase[/src] cbbook show order book trades show last trades - stats show coin stats[/cmds] + stats show coin stats +[src]Messari[/src] + mcapdom show market cap dominance[/cmds] """ console.print(text=help_text, menu="Stocks - Due Diligence") @@ -1183,3 +1192,58 @@ class DueDiligenceController(CryptoBaseController): descend=ns_parser.descend, export=ns_parser.export, ) + + @log_start_end(log=logger) + def call_mcapdom(self, other_args: List[str]): + """Process mcapdom command""" + + parser = argparse.ArgumentParser( + add_help=False, + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + prog="mcapdom", + description=""" + Display asset's percentage share of total crypto circulating market cap + [Source: https://messari.io] + """, + ) + + parser.add_argument( + "-i", + "--interval", + dest="interval", + type=str, + help="Frequency interval. Default: 1d", + default="1d", + choices=messari_model.INTERVALS_TIMESERIES, + ) + + parser.add_argument( + "-s", + "--start", + dest="start", + type=valid_date, + help="Initial date. Default: A year ago", + default=(datetime.now() - timedelta(days=365)).strftime("%Y-%m-%d"), + ) + + parser.add_argument( + "-end", + "--end", + dest="end", + type=valid_date, + help="End date. Default: Today", + default=datetime.now().strftime("%Y-%m-%d"), + ) + + ns_parser = parse_known_args_and_warn( + parser, other_args, EXPORT_BOTH_RAW_DATA_AND_FIGURES + ) + + if ns_parser: + messari_view.display_marketcap_dominance( + coin=self.symbol.upper(), + interval=ns_parser.interval, + start=ns_parser.start, + end=ns_parser.end, + export=ns_parser.export, + ) diff --git a/gamestonk_terminal/cryptocurrency/due_diligence/messari_model.py b/gamestonk_terminal/cryptocurrency/due_diligence/messari_model.py new file mode 100644 index 00000000000..d83eb929be2 --- /dev/null +++ b/gamestonk_terminal/cryptocurrency/due_diligence/messari_model.py @@ -0,0 +1,72 @@ +import logging + +import pandas as pd +import requests + +from gamestonk_terminal import config_terminal as cfg +from gamestonk_terminal.decorators import log_start_end +from gamestonk_terminal.rich_config import console + +logger = logging.getLogger(__name__) + +INTERVALS_TIMESERIES = ["5m", "15m", "30m", "1h", "1d", "1w"] + + +base_url = "https://data.messari.io/api/v1/" + + +@log_start_end(log=logger) +def get_marketcap_dominance( + coin: str, interval: str, start: str, end: str +) -> pd.DataFrame: + """Returns market dominance of a coin over time + [Source: https://messari.io/] + + Parameters + ---------- + coin : str + Crypto symbol to check market cap dominance + start : int + Initial date like string (e.g., 2021-10-01) + end : int + End date like string (e.g., 2021-10-01) + interval : str + Interval frequency (e.g., 1d) + + Returns + ------- + pd.DataFrame + market dominance percentage over time + """ + + url = base_url + f"assets/{coin}/metrics/mcap.dom/time-series" + + headers = {"x-messari-api-key": cfg.API_MESSARI_KEY} + + parameters = { + "start": start, + "end": end, + "interval": interval, + } + + r = requests.get(url, params=parameters, headers=headers) + + df = pd.DataFrame() + + if r.status_code == 200: + df = pd.DataFrame( + r.json()["data"]["values"], columns=["timestamp", "marketcap_dominance"] + ) + + if df.empty: + console.print(f"No data found for {coin}.\n") + else: + df = df.set_index("timestamp") + df.index = pd.to_datetime(df.index, unit="ms") + + elif r.status_code == 401: + console.print("[red]Invalid API Key[/red]\n") + else: + console.print(r.text) + + return df diff --git a/gamestonk_terminal/cryptocurrency/due_diligence/messari_view.py b/gamestonk_terminal/cryptocurrency/due_diligence/messari_view.py new file mode 100644 index 00000000000..92e3564b2e1 --- /dev/null +++ b/gamestonk_terminal/cryptocurrency/due_diligence/messari_view.py @@ -0,0 +1,80 @@ +import logging +import os +from typing import List, Optional + +from matplotlib import pyplot as plt + +from gamestonk_terminal.config_terminal import theme +from gamestonk_terminal.decorators import check_api_key +from gamestonk_terminal import config_plot as cfgPlot +from gamestonk_terminal.cryptocurrency.due_diligence.messari_model import ( + get_marketcap_dominance, +) +from gamestonk_terminal.decorators import log_start_end +from gamestonk_terminal.helper_funcs import export_data, plot_autoscale +from gamestonk_terminal.rich_config import console + +logger = logging.getLogger(__name__) + + +@log_start_end(log=logger) +@check_api_key(["API_MESSARI_KEY"]) +def display_marketcap_dominance( + coin: str, + start: str, + end: str, + interval: str, + export: str = "", + external_axes: Optional[List[plt.Axes]] = None, +) -> None: + """Display market dominance of a coin over time + [Source: https://messari.io/] + + Parameters + ---------- + coin : str + Crypto symbol to check market cap dominance + start : int + Initial date like string (e.g., 2021-10-01) + end : int + End date like string (e.g., 2021-10-01) + interval : str + Interval frequency (e.g., 1d) + export : str + Export dataframe data to csv,json,xlsx file + external_axes : Optional[List[plt.Axes]], optional + External axes (1 axis is expected in the list), by default None + """ + + df = get_marketcap_dominance(coin=coin, start=start, end=end, interval=interval) + + if df.empty: + return + + # This plot has 1 axis + if not external_axes: + _, ax = plt.subplots(figsize=plot_autoscale(), dpi=cfgPlot.PLOT_DPI) + else: + if len(external_axes) != 1: + logger.error("Expected list of one axis item.") + console.print("[red]Expected list of one axis item./n[/red]") + return + (ax,) = external_axes + + ax.plot(df.index, df["marketcap_dominance"]) + + ax.set_title(f"{coin}'s Market Cap Dominance over time") + ax.set_ylabel(f"{coin} Percentage share") + ax.set_xlim(df.index[0], df.index[-1]) + + theme.style_primary_axis(ax) + + if not external_axes: + theme.visualize_output() + + export_data( + export, + os.path.dirname(os.path.abspath(__file__)), + "mcapdom", + df, + ) diff --git a/scripts/test_crypto_dd.gst b/scripts/test_crypto_dd.gst index b3cc4937640..029cd99e96e 100644 --- a/scripts/test_crypto_dd.gst +++ b/scripts/test_crypto_dd.gst @@ -11,4 +11,5 @@ social score dev bc -exit \ No newline at end of file +mcapdom +exit diff --git a/tests/gamestonk_terminal/cryptocurrency/due_diligence/cassettes/test_messari_model/test_get_marketcap_dominance[BTC-1d-2022-01-10-2022-03-08].yaml b/tests/gamestonk_terminal/cryptocurrency/due_diligence/cassettes/test_messari_model/test_get_marketcap_dominance[BTC-1d-2022-01-10-2022-03-08].yaml new file mode 100644 index 00000000000..810ebc29ee2 --- /dev/null +++ b/tests/gamestonk_terminal/cryptocurrency/due_diligence/cassettes/test_messari_model/test_get_marketcap_dominance[BTC-1d-2022-01-10-2022-03-08].yaml @@ -0,0 +1,71 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.27.1 + x-messari-api-key: + - mock_x-messari-api-key + method: GET + uri: https://data.messari.io/api/v1/assets/BTC/metrics/mcap.dom/time-series?start=2022-01-10&end=2022-03-08&interval=1d + response: + body: + string: !!binary | + H4sIAAAAAAAA/3SVT2/jyNHGvwrRl/cNQGvqf1fpmM0pQW7OZQcDg5G4Y2YsSiCpnQwG/u4BZTbJ + BFjDB8P8sfqpp58q/kzj1Ez3MR1/pvatuY3tOR0JoE5Td2nHqbnc0jERED0BP6E8QxxVj0wHVhMB + tfg1vdfp3EzNXOPWDM2lndrhUbEZx3Z6+db+SMf05+dfUr38pzunY8KWkdCbp1akfRJyfXKC05OT + U9sSEbCmetY3TKsGfEJ4Bjg+fn9NdWr7804g+H897PqpHX5v3ubTzqlO1+HcDumYmvHU9ueu/5rq + 9Nt1uDTzAf8ar33a9f2yPrn33b+fLt3bWze2p2t/HlOdTte3+6Uf0/Hzzqk6XZrhWzudmtvL+Xrp + +qY/tenLe53G02t7eTh0aaehO31YcDk1t8P5ekl16ptLm47p7+X96i/r+3U6t+Np6G5Td+3TMT2/ + ttV6TrWeU3VjNb221cPi/xurWzuc2n5qvrbV+NoMbXX9rZquU/NWnYYft+lanbrhdH9rpq7/utVL + dfq9ebu348smeR+F5/J31fXV3pNq7GYRs4L2dj29Vv+P1V+b/t4MPyqMDFW5mOofz7/86Q+s+uPm + tm7muF26vrvcLy//e8Hj9T6c2pdmmobun/cPvz7/LOb+rem+XVOd7sP8wus03cbjp0/fv38/fJuf + HE7Xy6f0Pl/XhwXp+PkzmmDO5DD/1BwHNwxkRUAlcvlSPxDXoA9E4CBKnFWzsWShhQhR2xVhBzJR + c84LQcAfJR6ECDgo5GyZPS8EostGhDIzWYYAc1sQAtm0Eucwh4wOJFKIQFoJcCNHFWMxLUI45yLV + Dx7GYDkzo5svhJhsUkkQ3UVno4ohpAqbVKcQIXc3YyjNGJuvlgE5uHtWUyFdiEy8mcriGJrNhaOU + cAhbgZxNnYKFzSAXP3whoBY8MKooIs9SSyvhJGuNQJLIQOKOgR8Eg7mvJSJUdL4VJbVCoCpthDkz + uHiOjMV1JkFbEfdgBnQ0CpelXeYlZVALHRQ1EBWJSRWXblhQZEXYMZuYIKBQLIQC+EqQANucGzXm + lfBMuxougAZo7swLYZltJVADAlDUM1qRuuTjo5sMmsOMg4BzqeElIjMhYa6ZwzwYlpRxlH4fhDEI + QnYMWgMggLFJJfcgY/ZwXXoRBN1cDTaE+fqRLasUJGhzFcAyZyMDEo1yDGXftAZkQDZEw5ASI2GT + na1ZUUTNQK3MpojiloFHt6QYwJqLWC22PYw3QhSm2XYppxjJpnUeFs8eSGxaTskIWwCycpYMjgjG + a8OPkS9IhETQLN48oiDuvPkamdTMYs7S6nxYbFpV3UHDc3bwJfNanP8gAB0sQpRpaUZRaJM6t6oG + xKFIJfHzAt2kMs5R9wzZsmipwqi7tCohBYdD5nXl6SPA692wh2YyEs2UC+G7yUJhYbZgyebL3ajm + 3WARzAMazm6ApV+z3WABoLuzuQiVodAsu8EyECEWp5jbWQhn3sU1IIjRZb6yZWzKV2QZLHfWMMxk + VobTAGwf1sAIzsKiXHavQdA+AREsCmbb/jbM62DxQXTOA1t2Xj9oRrZOFh/YBIJQgFWFCsK6ThYf + 0FRRVOc1LYurjzWwZSSLxfzloOymi2mmtB+sCPRgDMqMpYgh7pcAYTCSGOK6Jx7h3UIiyjE/zsiC + X768v/8nAAD//6Kn+3blCgAA + headers: + Connection: + - keep-alive + Content-Length: + - '1272' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Mon, 14 Mar 2022 09:55:32 GMT + content-encoding: + - gzip + server: + - istio-envoy + vary: + - Accept-Encoding,Origin + x-envoy-decorator-operation: + - meridian-service.meridian.svc.cluster.local:8080/* + x-envoy-upstream-service-time: + - '246' + x-ratelimit-limit: + - '4000' + x-ratelimit-remaining: + - '3984' + x-ratelimit-reset: + - '1647329561' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/gamestonk_terminal/cryptocurrency/due_diligence/cassettes/test_messari_view/test_display_marketcap_dominance.yaml b/tests/gamestonk_terminal/cryptocurrency/due_diligence/cassettes/test_messari_view/test_display_marketcap_dominance.yaml new file mode 100644 index 00000000000..e42f8032735 --- /dev/null +++ b/tests/gamestonk_terminal/cryptocurrency/due_diligence/cassettes/test_messari_view/test_display_marketcap_dominance.yaml @@ -0,0 +1,71 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.27.1 + x-messari-api-key: + - mock_x-messari-api-key + method: GET + uri: https://data.messari.io/api/v1/assets/BTC/metrics/mcap.dom/time-series?start=2022-01-10&end=2022-03-08&interval=1d + response: + body: + string: !!binary | + H4sIAAAAAAAA/3SWT2/jyNHGvwrRl/cNQGvqf1fpmM0pQW7OZQcDg5G4Y2YsSiCpnQwG/u4BZTbJ + BFjDB0H9Y/VTTz/V1M80Ts10H9PxZ2rfmtvYntORCOo0dZd2nJrLLR0TAdET8BPKM/KR5ChxcCQz + 8NBf03udzs3UzDVuzdBc2qkdHhWbcWynl2/tj3RMf37+JdXLN905HRO2jITePLUi7ZOQ65MTnJ6c + nNqWiIA11bO+YVo14BPCM8Dx8f9rqlPbn3cCwf9rseundvi9eZt3O6c6XYdzO6RjasZT25+7/muq + 02/X4dLMG/xrvPZp1/fLunLvu38/Xbq3t25sT9f+PKY6na5v90s/puPnnVN1ujTDt3Y6NbeX8/XS + 9U1/atOX9zqNp9f28nDo0k5Dd/qw4HJqbofz9ZLq1DeXNh3T38vz1V/W5+t0bsfT0N2m7tqnY3p+ + bat1n2rdp+rGanptq4fF/zdWt3Y4tf3UfG2r8bUZ2ur6WzVdp+atOg0/btO1OnXD6f7WTF3/dauX + 6vR783Zvx5dN8j4Kz+Vz1fXV3pNq7GYRs4L2dj29Vv+P1V+b/t4MPyqMDFU5mOofz7/86Q+s+uPm + tm7muF26vrvcLy//e8Dj9T6c2pdmmobun/cPvz7/LOb+rem+XVOd7sP8wOs03cbjp0/fv38/fJtX + Dqfr5VN6n4/rw4J0/PwZTTBncpj/ao6DGwayIqASuXypH4hr0AcicBAlzqrZWLLQQoSo7YqwA5mo + OeeFIOCPEg9CBBwUcrbMnhcC0WUjQpmZLEOAuS0IgWxaiXOYQ0YHEilEIK0EuJGjirGYFiGcc5Hq + Bw9jsJyZ0c0XQkw2qSSI7qKzUcUQUoVNqlOIkLubMZRmjM1Xy4Ac3D2rqZAuRCbeTGVxDM3mwlFK + OIStQM6mTsHCZpCLH74QUAseGFUUkWeppZVwkrVGIElkIHHHwA+CwdzXEhEqOp+KklohUJU2wpwZ + XDxHxuI6k6CtiHswAzoahcvSLvOSMqiFDooaiIrEpIpLNywosiLsmE1MEFAoFkIBfCVIgG3OjRrz + SnimXQ0XQAM0d+aFsMy2EqgBASjqGa1IXfLx0U0GzWHGQcC51PASkZmQMNfMYR4MS8o4Sr8PwhgE + ITsGrQEQwNikknuQMXu4Lr0Igm6uBhvCfPzIllUKErS5CmCZs5EBiUbZhrJvWgMyIBuiYUiJkbDJ + ztasKKJmoFZmU0Rxy8CjW1IMYM1FrBbbHsYbIQrTbLuUXYxk0zoPi2cPJDYtu2SELQBZOUsGRwTj + teHHyBckQiJoFm8eURB33nyNTGpmMWdpdT4sNq2q7qDhOTv4knktzn8QgA4WIcq0NKMotEmdW1UD + 4lCkkvj5At2kMs5R9wzZsmipwqi7tCohBYdD5vXK00eA17NhD81kJJopF8J3k4XCwmzBks2Xs1HN + u8EimAc0nN0AS7/zj51djtDd2VyEylBolt1gGYgQi1PM7SyEM+/iGhDE6DIf2TI25S2yDJY7axhm + MivDaQC2D2tgBGdhUS53r0HQPgERLApm2/1tmNfB4oPonAe27Ly+0IxsnSw+sAkEoQCrChWEdZ0s + PqCpoqjO17Qsrj6ugS0jWSzmNwdlN11MM6X9YEWgB2NQZixFDHF/CRAGI4khrvfEI7xbSEQ55uWM + LPjly/v7fwIAAP//7x9zNuUKAAA= + headers: + Connection: + - keep-alive + Content-Length: + - '1274' + Content-Type: + - application/json; charset=UTF-8 + Date: + - Mon, 14 Mar 2022 13:24:49 GMT + content-encoding: + - gzip + server: + - istio-envoy + vary: + - Accept-Encoding,Origin + x-envoy-decorator-operation: + - meridian-service.meridian.svc.cluster.local:8080/* + x-envoy-upstream-service-time: + - '239' + x-ratelimit-limit: + - '4000' + x-ratelimit-remaining: + - '3982' + x-ratelimit-reset: + - '1647329561' + status: + code: 200 + message: OK +version: 1 diff --git a/tests/gamestonk_terminal/cryptocurrency/due_diligence/csv/test_messari_model/test_get_marketcap_dominance[BTC-1d-2022-01-10-2022-03-08].csv b/tests/gamestonk_terminal/cryptocurrency/due_diligence/csv/test_messari_model/test_get_marketcap_dominance[BTC-1d-2022-01-10-2022-03-08].csv new file mode 100644 index 00000000000..282dcc73fe6 --- /dev/null +++ b/tests/gamestonk_terminal/cryptocurrency/due_diligence/csv/test_messari_model/test_get_marketcap_dominance[BTC-1d-2022-01-10-2022-03-08].csv @@ -0,0 +1,59 @@ +timestamp,marketcap_dominance +2022-01-10,39.861913510152284 +2022-01-11,40.45237557634742 +2022-01-12,39.86380264568372 +2022-01-13,39.44080507767387 +2022-01-14,39.495333267090686 +2022-01-15,39.23796807180244 +2022-01-16,39.08628154634652 +2022-01-17,38.89630677331868 +2022-01-18,39.24118845417784 +2022-01-19,39.82944288866307 +2022-01-20,40.02808887565425 +2022-01-21,40.3481957684397 +2022-01-22,40.776582934366076 +2022-01-23,41.3154511354178 +2022-01-24,40.91249702488191 +2022-01-25,41.99545776752561 +2022-01-26,41.968330848797144 +2022-01-27,41.889330181629845 +2022-01-28,42.515911512325516 +2022-01-29,42.38176464101429 +2022-01-30,42.24036642156339 +2022-01-31,42.38840160168833 +2022-02-01,42.15909014587165 +2022-02-02,41.70579663920373 +2022-02-03,41.49685739689302 +2022-02-04,41.463041078192425 +2022-02-05,42.2889263389859 +2022-02-06,41.936103436136754 +2022-02-07,42.006737626024595 +2022-02-08,41.907013611619476 +2022-02-09,42.27514456605687 +2022-02-10,41.85739251903579 +2022-02-11,42.36211432883346 +2022-02-12,42.86638789123657 +2022-02-13,42.753747081106354 +2022-02-14,42.994992648068994 +2022-02-15,42.97256669764625 +2022-02-16,42.55880598778081 +2022-02-17,42.5018069945326 +2022-02-18,42.143256023951245 +2022-02-19,42.313255870767456 +2022-02-20,42.352129398073686 +2022-02-21,42.23895726245727 +2022-02-22,42.14343369347689 +2022-02-23,42.20889398386011 +2022-02-24,42.00188836844265 +2022-02-25,42.60442348297674 +2022-02-26,41.99092318444793 +2022-02-27,41.78835961726633 +2022-02-28,41.909199374345384 +2022-03-01,42.99993450661868 +2022-03-02,43.45883236783284 +2022-03-03,43.364092140355424 +2022-03-04,43.16551455348149 +2022-03-05,42.574692464278655 +2022-03-06,42.29918931927319 +2022-03-07,42.282193124611425 +2022-03-08,42.34539611471341 diff --git a/tests/gamestonk_terminal/cryptocurrency/due_diligence/test_messari_model.py b/tests/gamestonk_terminal/cryptocurrency/due_diligence/test_messari_model.py new file mode 100644 index 00000000000..c61b6fad64b --- /dev/null +++ b/tests/gamestonk_terminal/cryptocurrency/due_diligence/test_messari_model.py @@ -0,0 +1,28 @@ +# IMPORTATION STANDARD + +# IMPORTATION THIRDPARTY +import pytest + +# IMPORTATION INTERNAL +from gamestonk_terminal.cryptocurrency.due_diligence import messari_model + + +@pytest.fixture(scope="module") +def vcr_config(): + return { + "filter_headers": [("x-messari-api-key", "mock_x-messari-api-key")], + } + + +@pytest.mark.vcr +@pytest.mark.parametrize( + "coin,interval,start,end", + [ + ("BTC", "1d", "2022-01-10", "2022-03-08"), + ], +) +def test_get_marketcap_dominance(coin, interval, start, end, recorder): + df = messari_model.get_marketcap_dominance( + coin=coin, interval=interval, start=start, end=end + ) + recorder.capture(df) diff --git a/tests/gamestonk_terminal/cryptocurrency/due_diligence/txt/test_dd_controller/test_print_help.txt b/tests/gamestonk_terminal/cryptocurrency/due_diligence/txt/test_dd_controller/test_print_help.txt index 2fdfdd158ba..0d7b3411686 100644 --- a/tests/gamestonk_terminal/cryptocurrency/due_diligence/txt/test_dd_controller/test_print_help.txt +++ b/tests/gamestonk_terminal/cryptocurrency/due_diligence/txt/test_dd_controller/test_print_help.txt @@ -35,4 +35,5 @@ Coinbase cbbook show order book trades show last trades stats show coin stats - +Messari + mcapdom show market cap dominance diff --git a/website/content/cryptocurrency/due_diligence/mcapdom/_index.md b/website/content/cryptocurrency/due_diligence/mcapdom/_index.md new file mode 100644 index 00000000000..673c3dbc50a --- /dev/null +++ b/website/content/cryptocurrency/due_diligence/mcapdom/_index.md @@ -0,0 +1,19 @@ +``` +usage: mcapdom [-i {5m,15m,30m,1h,1d,1w}] [-s START] [-end END] [-h] + [--export {csv,json,xlsx,png,jpg,pdf,svg}] +``` + +Display asset's percentage share of total crypto circulating market cap [Source: https://messari.io] + +``` +optional arguments: + -i {5m,15m,30m,1h,1d,1w}, --interval {5m,15m,30m,1h,1d,1w} + Frequency interval. Default: 1d (default: 1d) + -s START, --start START + Initial date. Default: A year ago (default: 2021-03-14) + -end END, --end END End date. Default: Today (default: 2022-03-14) + -h, --help show this help message (default: False) + --export {csv,json,xlsx,png,jpg,pdf,svg} + Export raw data into csv, json, xlsx and figure into png, jpg, pdf, svg + (default: ) +``` diff --git a/website/data/menu/main.yml b/website/data/menu/main.yml index 16dd618cbcb..0f5e8102500 100755 --- a/website/data/menu/main.yml +++ b/website/data/menu/main.yml @@ -598,7 +598,6 @@ main: ref: "/terminal/common/quantitative_analysis/capm" - name: line ref: "/terminal/common/quantitative_analysis/line" - - name: prediction techniques ref: "/terminal/common/prediction_techniques" sub: @@ -764,6 +763,8 @@ main: ref: "/terminal/cryptocurrency/due_diligence/trades" - name: stats ref: "/terminal/cryptocurrency/due_diligence/stats" + - name: stats + ref: "/cryptocurrency/due_diligence/mcapdom" - name: onchain ref: "/terminal/cryptocurrency/onchain" sub: