decorated functions (#1282)

* decorated functions and removed assertion tests that are now caught by decorator logs
* modified functions with @property
* fixed bc of coingecko
* fixed outedated tests
This commit is contained in:
LBolte29
2022-01-31 20:37:16 +01:00
committed by GitHub
parent 87dae99745
commit 6426b76771
288 changed files with 6075 additions and 3874 deletions

View File

@@ -10,7 +10,7 @@ repos:
- id: check-merge-conflict
- id: detect-private-key
- repo: https://github.com/psf/black
rev: 21.11b1
rev: 22.1.0
hooks:
- id: black
- repo: https://github.com/pycqa/flake8

View File

@@ -1,10 +1,15 @@
"""Covid Model"""
__docformat__ = "numpy"
import logging
import warnings
import pandas as pd
import numpy as np
import numpy as np
import pandas as pd
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
global_cases_time_series = (
"https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_"
@@ -16,6 +21,7 @@ global_deaths_time_series = (
)
@log_start_end(log=logger)
def get_global_cases(country: str) -> pd.DataFrame:
"""Get historical cases for given country
@@ -44,6 +50,7 @@ def get_global_cases(country: str) -> pd.DataFrame:
return cases
@log_start_end(log=logger)
def get_global_deaths(country: str) -> pd.DataFrame:
"""Get historical deaths for given country
@@ -72,6 +79,7 @@ def get_global_deaths(country: str) -> pd.DataFrame:
return deaths
@log_start_end(log=logger)
def get_case_slopes(days_back: int = 30, threshold: int = 10000) -> pd.DataFrame:
"""Load cases and find slope over period

View File

@@ -1,23 +1,28 @@
"""Covid View"""
__docformat__ = "numpy"
import logging
import os
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import pandas as pd
from gamestonk_terminal.rich_config import console
import gamestonk_terminal.feature_flags as gtff
from gamestonk_terminal.alternative.covid import covid_model
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import (
plot_autoscale,
export_data,
plot_autoscale,
print_rich_table,
)
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_covid_ov(
country, raw: bool = False, limit: int = 10, export: str = ""
) -> None:
@@ -82,6 +87,7 @@ def display_covid_ov(
export_data(export, os.path.dirname(os.path.abspath(__file__)), "ov", ov)
@log_start_end(log=logger)
def display_covid_stat(
country, stat: str = "cases", raw: bool = False, limit: int = 10, export: str = ""
) -> None:
@@ -150,6 +156,7 @@ def display_covid_stat(
export_data(export, os.path.dirname(os.path.abspath(__file__)), stat, data)
@log_start_end(log=logger)
def display_country_slopes(
days_back: int = 30,
limit: int = 10,

View File

@@ -1,10 +1,17 @@
"""FinBrain Model"""
__docformat__ = "numpy"
import logging
import pandas as pd
import requests
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def get_sentiment(ticker: str) -> pd.DataFrame:
"""Gets Sentiment analysis provided by FinBrain's API [Source: finbrain]

View File

@@ -1,32 +1,39 @@
"""FinBrain View Module"""
__docformat__ = "numpy"
import logging
import os
from matplotlib import pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
from pandas.plotting import register_matplotlib_converters
import numpy as np
from gamestonk_terminal.helper_funcs import (
plot_autoscale,
export_data,
print_rich_table,
)
import pandas as pd
from matplotlib import pyplot as plt
from pandas.plotting import register_matplotlib_converters
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.common.behavioural_analysis import finbrain_model
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import (
export_data,
plot_autoscale,
print_rich_table,
)
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
register_matplotlib_converters()
@log_start_end(log=logger)
def sentiment_coloring(val: float, last_val: float) -> str:
if float(val) > last_val:
return f"[green]{val}[/green]"
return f"[red]{val}[/red]"
@log_start_end(log=logger)
def plot_sentiment(sentiment: pd.DataFrame, ticker: str) -> None:
"""Plot Sentiment analysis provided by FinBrain's API
@@ -83,6 +90,7 @@ def plot_sentiment(sentiment: pd.DataFrame, ticker: str) -> None:
plt.show()
@log_start_end(log=logger)
def display_sentiment_analysis(ticker: str, export: str = ""):
"""Sentiment analysis from FinBrain

View File

@@ -1,11 +1,18 @@
"""Finnhub Model"""
__docformat__ = "numpy"
import logging
from typing import Dict
import requests
from gamestonk_terminal import config_terminal as cfg
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def get_sentiment_stats(ticker: str) -> Dict:
"""Get sentiment stats [Source: finnhub]

View File

@@ -1,15 +1,20 @@
"""Finnhub View"""
__docformat__ = "numpy"
import logging
import os
import pandas as pd
from gamestonk_terminal.helper_funcs import export_data
from gamestonk_terminal.common.behavioural_analysis import finnhub_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_sentiment_stats(ticker: str, export: str = ""):
"""
Sentiment stats which displays buzz, news score, articles last week, articles weekly average,

View File

@@ -1,10 +1,17 @@
"""Google Model"""
__docformat__ = "numpy"
import logging
import pandas as pd
from pytrends.request import TrendReq
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def get_mentions(ticker: str) -> pd.DataFrame:
"""Get interest over time from google api [Source: google]
@@ -23,6 +30,7 @@ def get_mentions(ticker: str) -> pd.DataFrame:
return pytrend.interest_over_time()
@log_start_end(log=logger)
def get_regions(ticker: str) -> pd.DataFrame:
"""Get interest by region from google api [Source: google]
@@ -41,6 +49,7 @@ def get_regions(ticker: str) -> pd.DataFrame:
return pytrend.interest_by_region()
@log_start_end(log=logger)
def get_queries(ticker: str) -> pd.DataFrame:
"""Get related queries from google api [Source: google]
@@ -59,6 +68,7 @@ def get_queries(ticker: str) -> pd.DataFrame:
return pytrend.related_queries()
@log_start_end(log=logger)
def get_rise(ticker: str) -> pd.DataFrame:
"""Get top rising related queries with this stock's query [Source: google]

View File

@@ -1,21 +1,27 @@
"""Google View"""
__docformat__ = "numpy"
import logging
import os
from datetime import datetime
import matplotlib.pyplot as plt
from gamestonk_terminal import config_plot as cfp
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.common.behavioural_analysis import google_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import (
plot_autoscale,
export_data,
plot_autoscale,
print_rich_table,
)
from gamestonk_terminal.common.behavioural_analysis import google_model
from gamestonk_terminal import config_plot as cfp, feature_flags as gtff
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_mentions(ticker: str, start: datetime, export: str = ""):
"""Plot weekly bars of stock's interest over time. other users watchlist. [Source: Google]
@@ -64,6 +70,7 @@ def display_mentions(ticker: str, start: datetime, export: str = ""):
)
@log_start_end(log=logger)
def display_regions(ticker: str, num: int = 5, export: str = ""):
"""Plot bars of regions based on stock's interest. [Source: Google]
@@ -98,6 +105,7 @@ def display_regions(ticker: str, num: int = 5, export: str = ""):
export_data(export, os.path.dirname(os.path.abspath(__file__)), "regions", df)
@log_start_end(log=logger)
def display_queries(ticker: str, num: int = 5, export: str = ""):
"""Print top related queries with this stock's query. [Source: Google]
@@ -126,6 +134,7 @@ def display_queries(ticker: str, num: int = 5, export: str = ""):
export_data(export, os.path.dirname(os.path.abspath(__file__)), "queries", df)
@log_start_end(log=logger)
def display_rise(ticker: str, num: int, export: str = ""):
"""Print top rising related queries with this stock's query. [Source: Google]

View File

@@ -1,17 +1,23 @@
"""Reddit Model"""
__docformat__ = "numpy"
from typing import List, Dict, Tuple
import logging
from datetime import datetime, timedelta
import pandas as pd
from prawcore.exceptions import ResponseException
from requests import HTTPError
from psaw import PushshiftAPI
import praw
from typing import Dict, List, Tuple
import finviz
import pandas as pd
import praw
from prawcore.exceptions import ResponseException
from psaw import PushshiftAPI
from requests import HTTPError
from gamestonk_terminal import config_terminal as cfg
from gamestonk_terminal.rich_config import console
from gamestonk_terminal.common.behavioural_analysis.reddit_helpers import find_tickers
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
l_sub_reddits = [
"Superstonk",
@@ -27,6 +33,7 @@ l_sub_reddits = [
# pylint:disable=inconsistent-return-statements
@log_start_end(log=logger)
def get_watchlists(
n_to_get: int,
) -> Tuple[List[praw.models.reddit.submission.Submission], Dict, int]:
@@ -95,6 +102,7 @@ def get_watchlists(
return subs, d_watchlist_tickers, n_flair_posts_found
@log_start_end(log=logger)
def get_popular_tickers(
n_top: int, posts_to_look_at: int, subreddits: str = ""
) -> pd.DataFrame:
@@ -229,6 +237,7 @@ def get_popular_tickers(
return popular_tickers_df
@log_start_end(log=logger)
def get_spac_community(
limit: int, popular: bool
) -> Tuple[List[praw.models.reddit.submission.Submission], Dict]:
@@ -298,6 +307,7 @@ def get_spac_community(
return subs, d_watchlist_tickers
@log_start_end(log=logger)
def get_spac(
limit: int = 5,
) -> Tuple[List[praw.models.reddit.submission.Submission], Dict, int]:
@@ -374,6 +384,7 @@ def get_spac(
return subs, d_watchlist_tickers, n_flair_posts_found
@log_start_end(log=logger)
def get_wsb_community(
limit: int = 10, new: bool = False
) -> List[praw.models.reddit.submission.Submission]:
@@ -415,6 +426,7 @@ def get_wsb_community(
return subs
@log_start_end(log=logger)
def get_due_dilligence(
ticker: str, limit: int = 5, n_days: int = 3, show_all_flairs: bool = False
) -> List[praw.models.reddit.submission.Submission]:

View File

@@ -1,20 +1,25 @@
"""Reddit View"""
__docformat__ = "numpy"
import logging
import os
import warnings
from datetime import datetime
from typing import Dict
import finviz
import praw
import pandas as pd
import praw
from gamestonk_terminal.common.behavioural_analysis import reddit_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def print_and_record_reddit_post(
submissions_dict: Dict, submission: praw.models.reddit.submission.Submission
):
@@ -68,6 +73,7 @@ def print_and_record_reddit_post(
console.print("\n")
@log_start_end(log=logger)
def display_watchlist(num: int):
"""Print other users watchlist. [Source: Reddit]
@@ -105,6 +111,7 @@ def display_watchlist(num: int):
console.print("")
@log_start_end(log=logger)
def display_popular_tickers(
n_top: int = 10, posts_to_look_at: int = 50, subreddits: str = "", export: str = ""
):
@@ -143,6 +150,7 @@ def display_popular_tickers(
)
@log_start_end(log=logger)
def display_spac_community(limit: int = 10, popular: bool = False):
"""Look at tickers mentioned in r/SPACs [Source: Reddit]
@@ -183,6 +191,7 @@ def display_spac_community(limit: int = 10, popular: bool = False):
console.print("")
@log_start_end(log=logger)
def display_spac(limit: int = 5):
"""Look at posts containing 'spac' in top communities
@@ -220,6 +229,7 @@ def display_spac(limit: int = 5):
console.print("")
@log_start_end(log=logger)
def display_wsb_community(limit: int = 10, new: bool = False):
"""Show WSB posts
@@ -236,6 +246,7 @@ def display_wsb_community(limit: int = 10, new: bool = False):
print_and_record_reddit_post({}, sub)
@log_start_end(log=logger)
def display_due_diligence(
ticker: str, limit: int = 10, n_days: int = 3, show_all_flairs: bool = False
):

View File

@@ -3,12 +3,16 @@ __docformat__ = "numpy"
from typing import Union, Dict
from datetime import datetime, timedelta
import requests
import logging
import pandas as pd
import requests
from gamestonk_terminal import config_terminal as cfg
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def get_historical(ticker: str, start: str, end: str, number: int) -> pd.DataFrame:
"""Get hour-level sentiment data for the chosen ticker

View File

@@ -1,19 +1,25 @@
"""SentimentInvestor View"""
__docformat__ = "numpy"
import logging
import os
from datetime import datetime
import matplotlib.dates as mdates
from matplotlib import pyplot as plt
import pandas as pd
from gamestonk_terminal.common.behavioural_analysis import sentimentinvestor_model
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.common.behavioural_analysis import sentimentinvestor_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
# pylint: disable=E1101
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_historical(
ticker: str,
start: str,

View File

@@ -1,12 +1,18 @@
"""Stocktwits Model"""
__docformat__ = "numpy"
from typing import Tuple, List, Dict
import logging
from typing import Dict, List, Tuple
import pandas as pd
import requests
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def get_bullbear(ticker: str) -> Tuple[int, int, int, int]:
"""Gets bullbear sentiment for ticker [Source: stocktwits]
@@ -44,6 +50,7 @@ def get_bullbear(ticker: str) -> Tuple[int, int, int, int]:
return 0, 0, 0, 0
@log_start_end(log=logger)
def get_messages(ticker: str, limit: int = 30) -> List[str]:
"""Get last messages for a given ticker [Source: stocktwits]
@@ -71,6 +78,7 @@ def get_messages(ticker: str, limit: int = 30) -> List[str]:
return messages
@log_start_end(log=logger)
def get_trending() -> pd.DataFrame:
"""Get trending tickers from stocktwits [Source: stocktwits]
@@ -95,6 +103,7 @@ def get_trending() -> pd.DataFrame:
return pd.DataFrame()
@log_start_end(log=logger)
def get_stalker(user: str, limit: int = 30) -> List[Dict]:
"""Gets messages from given user [Source: stocktwits]

View File

@@ -1,13 +1,19 @@
"""Stocktwits View"""
__docformat__ = "numpy"
import logging
import pandas as pd
from gamestonk_terminal.common.behavioural_analysis import stocktwits_model
from gamestonk_terminal.rich_config import console
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_bullbear(ticker: str):
"""
Print bullbear sentiment based on last 30 messages on the board.
@@ -29,6 +35,7 @@ def display_bullbear(ticker: str):
console.print("")
@log_start_end(log=logger)
def display_messages(ticker: str, limit: int = 30):
"""Print up to 30 of the last messages on the board. [Source: Stocktwits]
@@ -49,6 +56,7 @@ def display_messages(ticker: str, limit: int = 30):
)
@log_start_end(log=logger)
def display_trending():
"""Show trensing stocks on stocktwits"""
df_trending = stocktwits_model.get_trending()
@@ -61,6 +69,7 @@ def display_trending():
console.print("")
@log_start_end(log=logger)
def display_stalker(user: str, limit: int = 10):
"""Show last posts for given user

View File

@@ -1,6 +1,7 @@
"""Twitter Model"""
__docformat__ = "numpy"
import logging
from typing import Optional
import pandas as pd
@@ -8,12 +9,16 @@ import requests
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
from gamestonk_terminal import config_terminal as cfg
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import clean_tweet, get_data
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
analyzer = SentimentIntensityAnalyzer()
@log_start_end(log=logger)
def load_analyze_tweets(
ticker: str,
count: int,

View File

@@ -1,23 +1,26 @@
"""Twitter view"""
__docformat__ = "numpy"
import logging
import os
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from dateutil import parser as dparse
import gamestonk_terminal.config_plot as cfg_plot
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.common.behavioural_analysis import twitter_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, plot_autoscale
import gamestonk_terminal.config_plot as cfg_plot
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_inference(ticker: str, num: int, export: str = ""):
"""Infer sentiment from past n tweets
@@ -65,6 +68,7 @@ def display_inference(ticker: str, num: int, export: str = ""):
export_data(export, os.path.dirname(os.path.abspath(__file__)), "infer", df_tweets)
@log_start_end(log=logger)
def display_sentiment(ticker: str, n_tweets: int, n_days_past: int, export: str = ""):
"""Plot sentiments from ticker

View File

@@ -1,12 +1,18 @@
""" News View """
__docformat__ = "numpy"
import logging
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__)
@log_start_end(log=logger)
def news(
term: str,
num: int,

View File

@@ -1,14 +1,21 @@
"""Arima Prediction Model"""
__docformat__ = "numpy"
from typing import Union, List, Tuple, Any
import logging
from typing import Any, List, Tuple, Union
import pandas as pd
import pmdarima
from statsmodels.tsa.arima.model import ARIMA
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
ICS = ["aic", "aicc", "bic", "hqic", "oob"]
@log_start_end(log=logger)
def get_arima_model(
values: Union[pd.Series, pd.DataFrame],
arima_order: str,

View File

@@ -3,6 +3,7 @@ __docformat__ = "numpy"
import datetime
import logging
import os
from typing import Union
@@ -17,6 +18,7 @@ from gamestonk_terminal.common.prediction_techniques.pred_helper import (
print_pretty_prediction,
)
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import (
export_data,
get_next_stock_market_days,
@@ -25,12 +27,14 @@ from gamestonk_terminal.helper_funcs import (
)
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
register_matplotlib_converters()
# pylint:disable=too-many-arguments
@log_start_end(log=logger)
def display_arima(
dataset: str,
values: Union[pd.DataFrame, pd.Series],

View File

@@ -1,16 +1,22 @@
"""ETS Prediction Model"""
__docformat__ = "numpy"
import logging
from typing import Union
import numpy as np
import pandas as pd
from statsmodels.tsa.holtwinters import ExponentialSmoothing
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
TRENDS = ["N", "A", "Ad"]
SEASONS = ["N", "A", "M"]
@log_start_end(log=logger)
def get_exponential_smoothing_model(
data: Union[pd.Series, np.ndarray],
trend: str = "N",

View File

@@ -2,13 +2,13 @@
__docformat__ = "numpy"
import datetime
import logging
import os
import warnings
from typing import Union
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from pandas.plotting import register_matplotlib_converters
@@ -21,6 +21,7 @@ from gamestonk_terminal.common.prediction_techniques.pred_helper import (
print_pretty_prediction,
)
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import (
export_data,
get_next_stock_market_days,
@@ -29,12 +30,15 @@ from gamestonk_terminal.helper_funcs import (
)
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
register_matplotlib_converters()
warnings.filterwarnings("ignore")
# pylint:disable=too-many-arguments
@log_start_end(log=logger)
def display_exponential_smoothing(
ticker: str,
values: Union[pd.DataFrame, pd.Series],

View File

@@ -1,18 +1,24 @@
"""KNN Prediction Model"""
__docformat__ = "numpy"
from typing import Tuple, Any, Union
import pandas as pd
import logging
from typing import Any, Tuple, Union
import numpy as np
import pandas as pd
from sklearn import neighbors
from gamestonk_terminal.helper_funcs import get_next_stock_market_days
from gamestonk_terminal.common.prediction_techniques.pred_helper import (
prepare_scale_train_valid_test,
)
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import get_next_stock_market_days
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def get_knn_model_data(
data: Union[pd.Series, pd.DataFrame],
n_input_days: int,

View File

@@ -1,23 +1,28 @@
""" KNN Prediction View"""
__docformat__ = "numpy"
import logging
from typing import Union
import pandas as pd
from pandas.plotting import register_matplotlib_converters
from gamestonk_terminal.common.prediction_techniques.pred_helper import (
print_pretty_prediction,
plot_data_predictions,
)
from gamestonk_terminal.common.prediction_techniques import knn_model
from gamestonk_terminal.common.prediction_techniques.pred_helper import (
plot_data_predictions,
print_pretty_prediction,
)
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
register_matplotlib_converters()
# pylint:disable=too-many-arguments
@log_start_end(log=logger)
def display_k_nearest_neighbors(
ticker: str,
data: Union[pd.DataFrame, pd.Series],

View File

@@ -1,14 +1,21 @@
"""Monte Carlo Model"""
__docformat__ = "numpy"
import logging
from typing import Union
import pandas as pd
import numpy as np
import pandas as pd
from scipy.stats import norm
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
DISTRIBUTIONS = ["normal", "lognormal"]
@log_start_end(log=logger)
def get_mc_brownian(
data: Union[pd.Series, np.ndarray], n_future: int, n_sims: int, use_log=True
) -> np.ndarray:

View File

@@ -1,26 +1,31 @@
"""Monte Carlo View"""
__docformat__ = "numpy"
from typing import Union
import logging
import os
from typing import Union
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from gamestonk_terminal.common.prediction_techniques import mc_model
from gamestonk_terminal.helper_funcs import (
plot_autoscale,
get_next_stock_market_days,
export_data,
)
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.common.prediction_techniques import mc_model
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import (
export_data,
get_next_stock_market_days,
plot_autoscale,
)
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_mc_forecast(
data: Union[pd.Series, np.ndarray],
n_future: int,

View File

@@ -1,39 +1,44 @@
"""Neural Network Prediction Models"""
__docformat__ = "numpy"
from typing import List, Any, Union, Tuple
import pandas as pd
import logging
from typing import Any, List, Tuple, Union
import numpy as np
import pandas as pd
from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import (
LSTM,
SimpleRNN,
AvgPool1D,
Conv1D,
Dense,
Dropout,
Conv1D,
MaxPool1D,
AvgPool1D,
Flatten,
MaxPool1D,
SimpleRNN,
)
from tensorflow.keras.models import Sequential
from tensorflow.keras.optimizers import (
SGD,
Adadelta,
Adagrad,
Adam,
Adamax,
Adagrad,
Adadelta,
Ftrl,
Nadam,
RMSprop,
SGD,
)
from gamestonk_terminal.helper_funcs import get_next_stock_market_days
from gamestonk_terminal.common.prediction_techniques.pred_helper import (
prepare_scale_train_valid_test,
forecast,
)
from gamestonk_terminal import config_neural_network_models as cfg_nn_models
from gamestonk_terminal.common.prediction_techniques.pred_helper import (
forecast,
prepare_scale_train_valid_test,
)
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import get_next_stock_market_days
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
optimizers = {
"Adam": Adam,
@@ -56,6 +61,7 @@ else:
# pylint:disable=too-many-arguments
@log_start_end(log=logger)
def build_neural_network_model(
Layers: List[Any], n_inputs: int, n_days: int
) -> Sequential:
@@ -136,6 +142,7 @@ def build_neural_network_model(
return model
@log_start_end(log=logger)
def mlp_model(
data: Union[pd.Series, pd.DataFrame],
n_input: int,
@@ -256,6 +263,7 @@ def mlp_model(
return forecast_data_df, preds, y_valid, y_dates_valid, scaler
@log_start_end(log=logger)
def rnn_model(
data: Union[pd.Series, pd.DataFrame],
n_input: int,
@@ -369,6 +377,7 @@ def rnn_model(
return forecast_data_df, preds, y_valid, y_dates_valid, scaler
@log_start_end(log=logger)
def lstm_model(
data: Union[pd.Series, pd.DataFrame],
n_input: int,
@@ -482,6 +491,7 @@ def lstm_model(
return forecast_data_df, preds, y_valid, y_dates_valid, scaler
@log_start_end(log=logger)
def conv1d_model(
data: Union[pd.Series, pd.DataFrame],
n_input: int,

View File

@@ -1,20 +1,27 @@
""" Neural Networks View"""
__docformat__ = "numpy"
import logging
from typing import Union
import numpy as np
import pandas as pd
from gamestonk_terminal.common.prediction_techniques import neural_networks_model
from gamestonk_terminal.common.prediction_techniques.pred_helper import (
plot_data_predictions,
print_pretty_prediction,
)
from gamestonk_terminal.common.prediction_techniques import neural_networks_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.rich_config import console
# pylint:disable=too-many-arguments
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_mlp(
dataset: str,
data: Union[pd.Series, pd.DataFrame],
@@ -97,6 +104,7 @@ def display_mlp(
console.print("")
@log_start_end(log=logger)
def display_rnn(
dataset: str,
data: Union[pd.Series, pd.DataFrame],
@@ -178,6 +186,7 @@ def display_rnn(
console.print("")
@log_start_end(log=logger)
def display_lstm(
dataset: str,
data: Union[pd.Series, pd.DataFrame],
@@ -259,6 +268,7 @@ def display_lstm(
console.print("")
@log_start_end(log=logger)
def display_conv1d(
dataset: str,
data: Union[pd.Series, pd.DataFrame],

View File

@@ -1,16 +1,22 @@
"""Regression Model"""
__docformat__ = "numpy"
from typing import Tuple, List, Any, Union
import pandas as pd
import logging
from typing import Any, List, Tuple, Union
import numpy as np
from sklearn import linear_model
from sklearn import pipeline
from sklearn import preprocessing
import pandas as pd
from sklearn import linear_model, pipeline, preprocessing
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.rich_config import console
# The tsxv dependence was removed so this fails. Taking from didiers source
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def split_train(
sequence: np.ndarray, numInputs: int, numOutputs: int, numJumps: int
) -> Tuple[List, List]:
@@ -64,6 +70,7 @@ def split_train(
return X, y
@log_start_end(log=logger)
def get_regression_model(
values: Union[pd.Series, pd.DataFrame],
poly_order: int,

View File

@@ -1,35 +1,39 @@
""" Regression View"""
__docformat__ = "numpy"
from typing import Union
import logging
import os
from typing import Union
import matplotlib.pyplot as plt
import pandas as pd
from pandas.plotting import register_matplotlib_converters
from gamestonk_terminal.helper_funcs import (
patch_pandas_text_adjustment,
get_next_stock_market_days,
plot_autoscale,
export_data,
)
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.common.prediction_techniques import regression_model
from gamestonk_terminal.common.prediction_techniques.pred_helper import (
print_pretty_prediction,
price_prediction_backtesting_color,
print_prediction_kpis,
print_pretty_prediction,
)
from gamestonk_terminal.common.prediction_techniques import regression_model
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import (
export_data,
get_next_stock_market_days,
patch_pandas_text_adjustment,
plot_autoscale,
)
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
register_matplotlib_converters()
# pylint:disable=too-many-arguments
@log_start_end(log=logger)
def display_regression(
dataset: str,
values: Union[pd.Series, pd.DataFrame],

View File

@@ -1,6 +1,7 @@
"""Quantitative Analysis Model"""
__docformat__ = "numpy"
import logging
import warnings
from typing import Any, Tuple
@@ -10,10 +11,16 @@ from scipy import stats
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.stattools import adfuller, kpss
from gamestonk_terminal.decorators import log_start_end
# TODO : Since these are common/ they should be independent of 'stock' info.
# df_stock should be replaced with a generic df and a column variable
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def get_summary(df: pd.DataFrame) -> pd.DataFrame:
"""Print summary statistics
@@ -29,6 +36,7 @@ def get_summary(df: pd.DataFrame) -> pd.DataFrame:
return df_stats
@log_start_end(log=logger)
def get_seasonal_decomposition(
df: pd.DataFrame, multiplicative: bool
) -> Tuple[Any, pd.DataFrame, pd.DataFrame]:
@@ -65,6 +73,7 @@ def get_seasonal_decomposition(
return result, pd.DataFrame(cycle), pd.DataFrame(trend)
@log_start_end(log=logger)
def get_normality(data: pd.DataFrame) -> pd.DataFrame:
"""
Look at the distribution of returns and generate statistics on the relation to the normal curve.
@@ -118,6 +127,7 @@ def get_normality(data: pd.DataFrame) -> pd.DataFrame:
)
@log_start_end(log=logger)
def get_unitroot(df: pd.DataFrame, fuller_reg: str, kpss_reg: str) -> pd.DataFrame:
"""Calculate test statistics for unit roots

View File

@@ -1,35 +1,38 @@
"""Quantitative Analysis View"""
__docformat__ = "numpy"
import logging
import os
import warnings
from typing import Any
from datetime import datetime
from typing import Any
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib
from matplotlib import gridspec
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
import statsmodels.api as sm
from detecta import detect_cusum
from matplotlib import gridspec
from pandas.plotting import register_matplotlib_converters
from scipy import stats
from statsmodels.graphics.gofplots import qqplot
from gamestonk_terminal.rich_config import console
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.common.quantitative_analysis import qa_model
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_classes import LineAnnotateDrawer
from gamestonk_terminal.helper_funcs import (
export_data,
plot_autoscale,
print_rich_table,
)
from gamestonk_terminal.helper_classes import LineAnnotateDrawer
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
register_matplotlib_converters()
@@ -37,6 +40,7 @@ register_matplotlib_converters()
# df_stock should be replaced with a generic df and a column variable
@log_start_end(log=logger)
def color_red(val: Any) -> str:
"""Adds red to dataframe value"""
if val > 0.05:
@@ -44,6 +48,7 @@ def color_red(val: Any) -> str:
return round(val, 4)
@log_start_end(log=logger)
def display_summary(df: pd.DataFrame, export: str):
"""Show summary statistics
@@ -72,6 +77,7 @@ def display_summary(df: pd.DataFrame, export: str):
)
@log_start_end(log=logger)
def display_hist(
name: str,
df: pd.DataFrame,
@@ -114,6 +120,7 @@ def display_hist(
console.print("")
@log_start_end(log=logger)
def display_cdf(
name: str,
df: pd.DataFrame,
@@ -194,6 +201,7 @@ def display_cdf(
)
@log_start_end(log=logger)
def display_bw(
name: str,
df: pd.DataFrame,
@@ -254,6 +262,7 @@ def display_bw(
console.print("")
@log_start_end(log=logger)
def display_acf(name: str, df: pd.DataFrame, target: str, lags: int):
"""Show Auto and Partial Auto Correlation of returns and change in returns
@@ -304,6 +313,7 @@ def display_acf(name: str, df: pd.DataFrame, target: str, lags: int):
console.print("")
@log_start_end(log=logger)
def display_cusum(df: pd.DataFrame, target: str, threshold: float, drift: float):
"""Cumulative sum algorithm (CUSUM) to detect abrupt changes in data
@@ -325,6 +335,7 @@ def display_cusum(df: pd.DataFrame, target: str, threshold: float, drift: float)
console.print("")
@log_start_end(log=logger)
def display_seasonal(
name: str,
df: pd.DataFrame,
@@ -409,6 +420,7 @@ def display_seasonal(
)
@log_start_end(log=logger)
def display_normality(df: pd.DataFrame, target: str, export: str = ""):
"""View normality statistics
@@ -443,6 +455,7 @@ def display_normality(df: pd.DataFrame, target: str, export: str = ""):
)
@log_start_end(log=logger)
def display_qqplot(name: str, df: pd.DataFrame, target: str):
"""Show QQ plot for data against normal quantiles
@@ -472,6 +485,7 @@ def display_qqplot(name: str, df: pd.DataFrame, target: str):
console.print("")
@log_start_end(log=logger)
def display_unitroot(
df: pd.DataFrame, target: str, fuller_reg: str, kpss_reg: str, export: str = ""
):
@@ -508,6 +522,7 @@ def display_unitroot(
)
@log_start_end(log=logger)
def display_raw(
df: pd.DataFrame, sort: str = "", des: bool = False, num: int = 20, export: str = ""
) -> None:
@@ -551,6 +566,7 @@ def display_raw(
console.print("")
@log_start_end(log=logger)
def display_line(
data: pd.Series,
title: str = "",

View File

@@ -1,12 +1,18 @@
"""Rolling Statistics"""
__docformat__ = "numpy"
import logging
from typing import Tuple
import pandas as pd
import pandas_ta as ta
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def get_rolling_avg(df: pd.DataFrame, length: int) -> Tuple[pd.DataFrame, pd.DataFrame]:
"""Return rolling mean and standard deviation
@@ -30,6 +36,7 @@ def get_rolling_avg(df: pd.DataFrame, length: int) -> Tuple[pd.DataFrame, pd.Dat
return pd.DataFrame(rolling_mean), pd.DataFrame(rolling_std)
@log_start_end(log=logger)
def get_spread(df: pd.DataFrame, length: int) -> Tuple[pd.DataFrame, pd.DataFrame]:
"""Standard Deviation and Variance
@@ -57,6 +64,7 @@ def get_spread(df: pd.DataFrame, length: int) -> Tuple[pd.DataFrame, pd.DataFram
return pd.DataFrame(df_sd), pd.DataFrame(df_var)
@log_start_end(log=logger)
def get_quantile(
df: pd.DataFrame, length: int, quantile_pct: float
) -> Tuple[pd.DataFrame, pd.DataFrame]:
@@ -88,6 +96,7 @@ def get_quantile(
return pd.DataFrame(df_med), pd.DataFrame(df_quantile)
@log_start_end(log=logger)
def get_skew(df: pd.DataFrame, length: int) -> pd.DataFrame:
"""Skewness Indicator
@@ -107,6 +116,7 @@ def get_skew(df: pd.DataFrame, length: int) -> pd.DataFrame:
return df_skew
@log_start_end(log=logger)
def get_kurtosis(df: pd.DataFrame, length: int) -> pd.DataFrame:
"""Kurtosis Indicator

View File

@@ -1,6 +1,7 @@
"""Rolling Statistics View"""
__docformat__ = "numpy"
import logging
import os
import matplotlib.pyplot as plt
@@ -10,12 +11,16 @@ from pandas.plotting import register_matplotlib_converters
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.common.quantitative_analysis import rolling_model
from gamestonk_terminal.config_plot import PLOT_DPI
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__)
register_matplotlib_converters()
@log_start_end(log=logger)
def display_mean_std(
name: str, df: pd.DataFrame, target: str, length: int, export: str = ""
):
@@ -86,6 +91,7 @@ def display_mean_std(
)
@log_start_end(log=logger)
def display_spread(
name: str, df: pd.DataFrame, target: str, length: int, export: str = ""
):
@@ -147,6 +153,7 @@ def display_spread(
)
@log_start_end(log=logger)
def display_quantile(
name: str,
df: pd.DataFrame,
@@ -203,6 +210,7 @@ def display_quantile(
)
@log_start_end(log=logger)
def display_skew(
name: str, df: pd.DataFrame, target: str, length: int, export: str = ""
):
@@ -256,6 +264,7 @@ def display_skew(
)
@log_start_end(log=logger)
def display_kurtosis(
name: str, df: pd.DataFrame, target: str, length: int, export: str = ""
):

View File

@@ -1,13 +1,18 @@
"""Custom Indicator Models"""
__docformat__ = "numpy"
import logging
from typing import Any, Tuple
import pandas as pd
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def calculate_fib_levels(
df_stock: pd.DataFrame,
period: int = 120,

View File

@@ -1,6 +1,7 @@
"""Custom TA indicators"""
__docformat__ = "numpy"
import logging
import os
from typing import Any
@@ -10,6 +11,7 @@ import pandas as pd
from gamestonk_terminal import config_plot as cfp
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.common.technical_analysis import custom_indicators_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import (
export_data,
plot_autoscale,
@@ -17,7 +19,10 @@ from gamestonk_terminal.helper_funcs import (
)
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def fibonacci_retracement(
df_stock: pd.DataFrame,
period: int = 120,

View File

@@ -1,10 +1,17 @@
"""Momentum Technical Analysis"""
__docformat__ = "numpy"
import logging
import pandas as pd
import pandas_ta as ta
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def cci(
high_vals: pd.Series,
low_vals: pd.Series,
@@ -43,6 +50,7 @@ def cci(
)
@log_start_end(log=logger)
def macd(
values: pd.DataFrame,
n_fast: int = 12,
@@ -71,6 +79,7 @@ def macd(
)
@log_start_end(log=logger)
def rsi(values: pd.Series, length: int, scalar: float, drift: int) -> pd.DataFrame:
"""Relative strength index
@@ -95,6 +104,7 @@ def rsi(values: pd.Series, length: int, scalar: float, drift: int) -> pd.DataFra
)
@log_start_end(log=logger)
def stoch(
high_vals: pd.Series,
low_vals: pd.Series,
@@ -136,6 +146,7 @@ def stoch(
)
@log_start_end(log=logger)
def fisher(high_vals: pd.Series, low_vals: pd.Series, length: int = 14) -> pd.DataFrame:
"""Fisher Transform
@@ -156,6 +167,7 @@ def fisher(high_vals: pd.Series, low_vals: pd.Series, length: int = 14) -> pd.Da
return pd.DataFrame(ta.fisher(high=high_vals, low=low_vals, length=length).dropna())
@log_start_end(log=logger)
def cg(values: pd.Series, length: int) -> pd.DataFrame:
"""Center of gravity

View File

@@ -1,6 +1,7 @@
"""Momentum View"""
__docformat__ = "numpy"
import logging
import os
import matplotlib.pyplot as plt
@@ -11,12 +12,16 @@ from pandas.plotting import register_matplotlib_converters
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.common.technical_analysis import momentum_model
from gamestonk_terminal.config_plot import PLOT_DPI
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__)
register_matplotlib_converters()
@log_start_end(log=logger)
def display_cci(
df: pd.DataFrame,
length: int = 14,
@@ -81,6 +86,7 @@ def display_cci(
)
@log_start_end(log=logger)
def display_macd(
values: pd.Series,
n_fast: int = 12,
@@ -147,6 +153,7 @@ def display_macd(
)
@log_start_end(log=logger)
def display_rsi(
prices: pd.Series,
length: int = 14,
@@ -212,6 +219,7 @@ def display_rsi(
)
@log_start_end(log=logger)
def display_stoch(
df_stock: pd.DataFrame,
fastkperiod: int = 14,
@@ -289,6 +297,7 @@ def display_stoch(
)
@log_start_end(log=logger)
def display_fisher(
df_stock: pd.DataFrame,
length: int = 14,
@@ -367,6 +376,7 @@ def display_fisher(
)
@log_start_end(log=logger)
def display_cg(
values: pd.Series,
length: int = 14,

View File

@@ -1,13 +1,20 @@
"""Overlap Technical Analysis"""
___docformat__ = "numpy"
import logging
import pandas as pd
import pandas_ta as ta
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
WINDOW_LENGTHS = [20, 50]
WINDOW_LENGTHS2 = [10, 20]
@log_start_end(log=logger)
def ema(values: pd.DataFrame, length: int, offset: int) -> pd.DataFrame:
"""Gets exponential moving average (EMA) for stock
@@ -28,6 +35,7 @@ def ema(values: pd.DataFrame, length: int, offset: int) -> pd.DataFrame:
return pd.DataFrame(ta.ema(values, length=length, offset=offset)).dropna()
@log_start_end(log=logger)
def sma(values: pd.DataFrame, length: int, offset: int) -> pd.DataFrame:
"""Gets simple moving average (EMA) for stock
@@ -48,6 +56,7 @@ def sma(values: pd.DataFrame, length: int, offset: int) -> pd.DataFrame:
return pd.DataFrame(ta.sma(values, length=length, offset=offset)).dropna()
@log_start_end(log=logger)
def wma(values: pd.DataFrame, length: int, offset: int) -> pd.DataFrame:
"""Gets weighted moving average (WMA) for stock
@@ -68,6 +77,7 @@ def wma(values: pd.DataFrame, length: int, offset: int) -> pd.DataFrame:
return pd.DataFrame(ta.wma(values, length=length, offset=offset)).dropna()
@log_start_end(log=logger)
def hma(values: pd.DataFrame, length: int, offset: int) -> pd.DataFrame:
"""Gets hull moving average (HMA) for stock
@@ -88,6 +98,7 @@ def hma(values: pd.DataFrame, length: int, offset: int) -> pd.DataFrame:
return pd.DataFrame(ta.hma(values, length=length, offset=offset)).dropna()
@log_start_end(log=logger)
def zlma(values: pd.DataFrame, length: int, offset: int) -> pd.DataFrame:
"""Gets zero-lagged exponential moving average (ZLEMA) for stock
@@ -108,6 +119,7 @@ def zlma(values: pd.DataFrame, length: int, offset: int) -> pd.DataFrame:
return pd.DataFrame(ta.zlma(values, length=length, offset=offset)).dropna()
@log_start_end(log=logger)
def vwap(day_df: pd.DataFrame, offset: int) -> pd.DataFrame:
"""Gets volume weighted average price (VWAP)

View File

@@ -1,6 +1,7 @@
"""TA Overlap View"""
__docformat__ = "numpy"
import logging
import os
from typing import List
@@ -12,12 +13,16 @@ from pandas.plotting import register_matplotlib_converters
import gamestonk_terminal.feature_flags as gtff
from gamestonk_terminal.common.technical_analysis import overlap_model
from gamestonk_terminal.config_plot import PLOT_DPI
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__)
register_matplotlib_converters()
@log_start_end(log=logger)
def view_ma(
values: pd.Series,
length: List[int] = None,
@@ -98,6 +103,7 @@ def view_ma(
)
@log_start_end(log=logger)
def view_vwap(
s_ticker: str,
df_stock: pd.DataFrame,

View File

@@ -1,10 +1,17 @@
"""Trend Indicators Technical Analysis Model"""
__docformat__ = "numpy"
import logging
import pandas as pd
import pandas_ta as ta
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def adx(
high_values: pd.Series,
low_values: pd.Series,
@@ -47,6 +54,7 @@ def adx(
)
@log_start_end(log=logger)
def aroon(
high_values: pd.Series, low_values: pd.Series, length: int = 25, scalar: int = 100
) -> pd.DataFrame:

View File

@@ -1,6 +1,7 @@
"""Trend Indicators View"""
__docformat__ = "numpy"
import logging
import os
import matplotlib.pyplot as plt
@@ -10,12 +11,16 @@ from pandas.plotting import register_matplotlib_converters
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.common.technical_analysis import trend_indicators_model
from gamestonk_terminal.config_plot import PLOT_DPI
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__)
register_matplotlib_converters()
@log_start_end(log=logger)
def display_adx(
df_stock: pd.DataFrame,
length: int = 14,
@@ -93,6 +98,7 @@ def display_adx(
)
@log_start_end(log=logger)
def display_aroon(
df_stock: pd.DataFrame,
length: int = 25,

View File

@@ -1,12 +1,19 @@
"""Volatility Technical Indicators"""
__docformat__ = "numpy"
import logging
import pandas as pd
import pandas_ta as ta
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
MAMODES = ["ema", "sma", "wma", "hma", "zlma"]
@log_start_end(log=logger)
def bbands(
close_values: pd.Series, length: int = 15, n_std: float = 2, mamode: str = "ema"
) -> pd.DataFrame:
@@ -38,6 +45,7 @@ def bbands(
).dropna()
@log_start_end(log=logger)
def donchian(
high_prices: pd.Series,
low_prices: pd.Series,
@@ -72,6 +80,7 @@ def donchian(
)
@log_start_end(log=logger)
def kc(
high_prices: pd.Series,
low_prices: pd.Series,

View File

@@ -1,6 +1,7 @@
"""Volatility Technical Indicators View"""
__docformat__ = "numpy"
import logging
import os
import matplotlib.pyplot as plt
@@ -10,12 +11,16 @@ from pandas.plotting import register_matplotlib_converters
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.common.technical_analysis import volatility_model
from gamestonk_terminal.config_plot import PLOT_DPI
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__)
register_matplotlib_converters()
@log_start_end(log=logger)
def display_bbands(
df_stock: pd.DataFrame,
length: int = 15,
@@ -82,6 +87,7 @@ def display_bbands(
)
@log_start_end(log=logger)
def display_donchian(
df_stock: pd.DataFrame,
upper_length: int = 20,
@@ -149,6 +155,7 @@ def display_donchian(
)
@log_start_end(log=logger)
def view_kc(
df_stock: pd.DataFrame,
length: int = 20,

View File

@@ -1,10 +1,17 @@
"""Volume Technical Analysis"""
__docformat__ = "numpy"
import logging
import pandas as pd
import pandas_ta as ta
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def ad(df_stock: pd.DataFrame, use_open: bool = False) -> pd.DataFrame:
"""Calculate AD technical indicator
@@ -39,6 +46,7 @@ def ad(df_stock: pd.DataFrame, use_open: bool = False) -> pd.DataFrame:
return pd.DataFrame(df_ta)
@log_start_end(log=logger)
def adosc(
df_stock: pd.DataFrame, use_open: bool = False, fast: int = 3, slow: int = 10
) -> pd.DataFrame:
@@ -78,6 +86,7 @@ def adosc(
return pd.DataFrame(df_ta)
@log_start_end(log=logger)
def obv(df_stock: pd.DataFrame) -> pd.DataFrame:
"""On Balance Volume

View File

@@ -1,20 +1,26 @@
"""Volume View"""
__docformat__ = "numpy"
import logging
import os
import matplotlib.pyplot as plt
import pandas as pd
from pandas.plotting import register_matplotlib_converters
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.common.technical_analysis import volume_model
from gamestonk_terminal.config_plot import PLOT_DPI
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__)
register_matplotlib_converters()
@log_start_end(log=logger)
def display_ad(
df_stock: pd.DataFrame,
use_open: bool = False,
@@ -95,6 +101,7 @@ def display_ad(
)
@log_start_end(log=logger)
def display_adosc(
df_stock: pd.DataFrame,
fast: int = 3,
@@ -180,6 +187,7 @@ def display_adosc(
)
@log_start_end(log=logger)
def display_obv(df_stock: pd.DataFrame, s_ticker: str = "", export: str = ""):
"""Plot OBV technical indicator

View File

@@ -1,10 +1,15 @@
"""Coindix model"""
__docformat__ = "numpy"
import logging
from typing import Optional
import requests
import pandas as pd
import requests
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
VAULTS_FILTERS = ["name", "chain", "protocol", "apy", "tvl", "risk", "link"]
CHAINS = [
@@ -65,6 +70,7 @@ VAULT_KINDS = [
]
@log_start_end(log=logger)
def _risk_mapper(risk_level: int) -> str:
"""Helper methods
Parameters
@@ -81,6 +87,7 @@ def _risk_mapper(risk_level: int) -> str:
return mappings.get(risk_level, "Non Eligible")
@log_start_end(log=logger)
def _prepare_params(**kwargs) -> dict:
"""Helper method, which handles preparation of parameters for requests to coindix api.
@@ -103,6 +110,7 @@ def _prepare_params(**kwargs) -> dict:
return {k: v.lower() for k, v in params.items()}
@log_start_end(log=logger)
def get_defi_vaults(
chain: Optional[str] = None,
protocol: Optional[str] = None,

View File

@@ -1,10 +1,12 @@
"""Coindix view"""
__docformat__ = "numpy"
import logging
import os
from typing import Optional
from gamestonk_terminal.cryptocurrency.defi import coindix_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import (
export_data,
long_number_format,
@@ -12,7 +14,10 @@ from gamestonk_terminal.helper_funcs import (
)
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_defi_vaults(
chain: Optional[str] = None,
protocol: Optional[str] = None,

View File

@@ -1,11 +1,18 @@
"""DeFi Pulse model"""
__docformat__ = "numpy"
import logging
import pandas as pd
import requests
from bs4 import BeautifulSoup
import pandas as pd
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def get_defipulse_index() -> pd.DataFrame:
"""Scrapes data from DeFi Pulse with all DeFi Pulse crypto protocols.
[Source: https://defipulse.com/]

View File

@@ -1,12 +1,18 @@
"""DeFi Pulse view"""
__docformat__ = "numpy"
import logging
import os
from gamestonk_terminal.cryptocurrency.defi import defipulse_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_defipulse(top: int, sortby: str, descend: bool, export: str = "") -> None:
"""Displays all DeFi Pulse crypto protocols.
[Source: https://defipulse.com/]

View File

@@ -1,12 +1,19 @@
"""DeFi Rate model"""
__docformat__ = "numpy"
import logging
import pandas as pd
import requests
from bs4 import BeautifulSoup
from bs4.element import Tag
import pandas as pd
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def _scrape_defirate(url: str, current: bool = True) -> Tag:
"""Helper method that scrapes table object from defirate.com
[Source: https://defirate.com/]
@@ -36,6 +43,7 @@ def _scrape_defirate(url: str, current: bool = True) -> Tag:
return table
@log_start_end(log=logger)
def get_funding_rates(current: bool = True) -> pd.DataFrame:
"""Funding rates are transfer payments made between long and short positions on perpetual swap futures markets.
They’re designed to keep contract prices consistent with the underlying asset.
@@ -63,6 +71,7 @@ def get_funding_rates(current: bool = True) -> pd.DataFrame:
return pd.DataFrame(columns=headers, data=fundings)
@log_start_end(log=logger)
def get_lending_rates(current: bool = True) -> pd.DataFrame:
"""Decentralized Finance lending – or DeFi lending for short – allows users to supply cryptocurrencies
in exchange for earning an annualized return.
@@ -92,6 +101,7 @@ def get_lending_rates(current: bool = True) -> pd.DataFrame:
return pd.DataFrame(columns=headers, data=lendings)
@log_start_end(log=logger)
def get_borrow_rates(current: bool = True) -> pd.DataFrame:
"""One aspect of Decentralized Finance (DeFi) is the ability to take out a loan on top cryptocurrencies at any time
in an entirely permissionless fashion.By using smart contracts, borrowers are able to lock collateral to protect

View File

@@ -1,12 +1,18 @@
"""DeFi Rate View"""
__docformat__ = "numpy"
import logging
import os
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.cryptocurrency.defi import defirate_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_funding_rates(top: int, current: bool = True, export: str = "") -> None:
"""Display Funding rates - transfer payments made between long and short positions on perpetual swap futures markets
[Source: https://defirate.com/]
@@ -40,6 +46,7 @@ def display_funding_rates(top: int, current: bool = True, export: str = "") -> N
)
@log_start_end(log=logger)
def display_lending_rates(top: int, current: bool = True, export: str = "") -> None:
"""Displays top DeFi lendings. Decentralized Finance lending – allows users to supply cryptocurrencies
in exchange for earning an annualized return
@@ -75,6 +82,7 @@ def display_lending_rates(top: int, current: bool = True, export: str = "") -> N
)
@log_start_end(log=logger)
def display_borrow_rates(top: int, current: bool = True, export: str = "") -> None:
"""Displays DeFi borrow rates. By using smart contracts, borrowers are able to lock
collateral to protect against defaults while seamlessly adding to or closing their

View File

@@ -2,12 +2,17 @@
__docformat__ = "numpy"
import datetime
import requests
import logging
import pandas as pd
import requests
from gamestonk_terminal.cryptocurrency.dataframe_helpers import (
very_long_number_formatter,
)
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
UNI_URL = "https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2"
@@ -45,6 +50,7 @@ PAIRS_FILTERS = [
# TODO: convert USD values to int. otherwise sort by these columns won't work
@log_start_end(log=logger)
def query_graph(url: str, query: str) -> dict:
"""Helper methods for querying graphql api. [Source: https://thegraph.com/en/]
@@ -67,6 +73,7 @@ def query_graph(url: str, query: str) -> dict:
return {}
@log_start_end(log=logger)
def get_uni_tokens(skip: int = 0, limit: int = 100) -> pd.DataFrame:
"""Get list of tokens trade-able on Uniswap DEX. [Source: https://thegraph.com/en/]
@@ -103,6 +110,7 @@ def get_uni_tokens(skip: int = 0, limit: int = 100) -> pd.DataFrame:
return pd.DataFrame(data["tokens"]).reset_index()
@log_start_end(log=logger)
def get_uniswap_stats() -> pd.DataFrame:
"""Get base statistics about Uniswap DEX. [Source: https://thegraph.com/en/]
@@ -142,6 +150,7 @@ def get_uniswap_stats() -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_uniswap_pool_recently_added(
last_days: int = 14,
min_volume: int = 100,
@@ -230,6 +239,7 @@ def get_uniswap_pool_recently_added(
]
@log_start_end(log=logger)
def get_uni_pools_by_volume() -> pd.DataFrame:
"""Get uniswap pools by volume. [Source: https://thegraph.com/en/]
@@ -272,6 +282,7 @@ def get_uni_pools_by_volume() -> pd.DataFrame:
]
@log_start_end(log=logger)
def get_last_uni_swaps(limit: int = 100) -> pd.DataFrame:
"""Get the last 100 swaps done on Uniswap [Source: https://thegraph.com/en/]

View File

@@ -1,15 +1,21 @@
"""The Graph view"""
__docformat__ = "numpy"
import logging
import os
from gamestonk_terminal.cryptocurrency.defi import graph_model
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.cryptocurrency.dataframe_helpers import (
very_long_number_formatter,
)
from gamestonk_terminal.cryptocurrency.defi import graph_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_uni_tokens(
skip: int = 0,
limit: int = 20,
@@ -59,6 +65,7 @@ def display_uni_tokens(
)
@log_start_end(log=logger)
def display_uni_stats(export: str = "") -> None:
"""Displays base statistics about Uniswap DEX. [Source: https://thegraph.com/en/]
[Source: https://thegraph.com/en/]
@@ -89,6 +96,7 @@ def display_uni_stats(export: str = "") -> None:
)
@log_start_end(log=logger)
def display_recently_added(
top: int = 20,
days: int = 7,
@@ -152,6 +160,7 @@ def display_recently_added(
)
@log_start_end(log=logger)
def display_uni_pools(
top: int = 20, sortby: str = "volumeUSD", descend: bool = False, export: str = ""
) -> None:
@@ -189,6 +198,7 @@ def display_uni_pools(
)
@log_start_end(log=logger)
def display_last_uni_swaps(
top: int = 20, sortby: str = "timestamp", descend: bool = False, export: str = ""
) -> None:

View File

@@ -1,11 +1,17 @@
"""Llama model"""
__docformat__ = "numpy"
from datetime import datetime
import logging
import textwrap
import requests
import pandas as pd
from datetime import datetime
import numpy as np
import pandas as pd
import requests
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
API_URL = "https://api.llama.fi"
@@ -21,6 +27,7 @@ LLAMA_FILTERS = [
]
@log_start_end(log=logger)
def get_defi_protocols() -> pd.DataFrame:
"""Returns information about listed DeFi protocols, their current TVL and changes to it in the last hour/day/week.
[Source: https://docs.llama.fi/api]
@@ -62,6 +69,7 @@ def get_defi_protocols() -> pd.DataFrame:
raise ValueError("Wrong response type\n") from e
@log_start_end(log=logger)
def get_defi_protocol(protocol: str) -> pd.DataFrame:
"""Returns information about historical tvl of a defi protocol.
[Source: https://docs.llama.fi/api]
@@ -81,6 +89,7 @@ def get_defi_protocol(protocol: str) -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_defi_tvl() -> pd.DataFrame:
"""Returns historical values of the total sum of TVLs from all listed protocols.
[Source: https://docs.llama.fi/api]

View File

@@ -1,25 +1,33 @@
"""Llama View"""
__docformat__ = "numpy"
import logging
import os
from matplotlib import ticker, dates as mdates
import matplotlib.pyplot as plt
from matplotlib import dates as mdates
from matplotlib import ticker
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal.cryptocurrency.cryptocurrency_helpers import read_data_file
from gamestonk_terminal.cryptocurrency.dataframe_helpers import (
replace_underscores_in_column_names,
)
from gamestonk_terminal.cryptocurrency.defi import llama_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import (
export_data,
plot_autoscale,
long_number_format,
plot_autoscale,
print_rich_table,
)
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_grouped_defi_protocols(num: int = 50, export: str = "") -> None:
"""Display top dApps (in terms of TVL) grouped by chain.
[Source: https://docs.llama.fi/api]
@@ -65,6 +73,7 @@ def display_grouped_defi_protocols(num: int = 50, export: str = "") -> None:
)
@log_start_end(log=logger)
def display_defi_protocols(
top: int, sortby: str, descend: bool, description: bool, export: str = ""
) -> None:
@@ -128,6 +137,7 @@ def display_defi_protocols(
)
@log_start_end(log=logger)
def display_historical_tvl(dapps: str = "", export: str = ""):
"""Displays historical TVL of different dApps
[Source: https://docs.llama.fi/api]
@@ -179,6 +189,7 @@ def display_historical_tvl(dapps: str = "", export: str = ""):
)
@log_start_end(log=logger)
def display_defi_tvl(top: int, export: str = "") -> None:
"""Displays historical values of the total sum of TVLs from all listed protocols.
[Source: https://docs.llama.fi/api]

View File

@@ -1,16 +1,22 @@
"""Substack model"""
__docformat__ = "numpy"
import textwrap
import concurrent.futures
import logging
import textwrap
import pandas as pd
import requests
from bs4 import BeautifulSoup
from dateutil import parser
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def scrape_substack(url: str) -> list:
"""Helper method to scrape newsletters from substack.
[Source: substack.com]
@@ -42,6 +48,7 @@ def scrape_substack(url: str) -> list:
return results
@log_start_end(log=logger)
def get_newsletters() -> pd.DataFrame:
"""Scrape all substack newsletters from url list.
[Source: substack.com]

View File

@@ -2,12 +2,18 @@
__docformat__ = "numpy"
import logging
import os
from gamestonk_terminal.cryptocurrency.defi import substack_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_newsletters(top: int = 10, export: str = "") -> None:
"""Display DeFi related substack newsletters.
[Source: substack.com]

View File

@@ -1,14 +1,21 @@
"""Terra Engineer model"""
__docformat__ = "numpy"
import requests
import logging
import pandas as pd
import requests
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
api_url = "https://terra.engineer/en"
ASSETS = ["ust", "luna", "sdt"]
@log_start_end(log=logger)
def get_history_asset_from_terra_address(
asset: str = "ust", address: str = ""
) -> pd.DataFrame:

View File

@@ -1,19 +1,27 @@
"""Terra Engineer View"""
__docformat__ = "numpy"
import logging
import os
import matplotlib.pyplot as plt
from matplotlib import ticker, dates as mdates
from gamestonk_terminal.cryptocurrency.defi import terraengineer_model
from gamestonk_terminal.helper_funcs import (
export_data,
plot_autoscale,
long_number_format,
)
from matplotlib import dates as mdates
from matplotlib import ticker
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal.cryptocurrency.defi import terraengineer_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import (
export_data,
long_number_format,
plot_autoscale,
)
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_terra_asset_history(
asset: str = "", address: str = "", export: str = ""
) -> None:
@@ -63,6 +71,7 @@ def display_terra_asset_history(
)
@log_start_end(log=logger)
def display_anchor_yield_reserve(export: str = "") -> None:
"""Displays the 30-day history of the Anchor Yield Reserve.
[Source: https://docs.llama.fi/api]

View File

@@ -1,16 +1,22 @@
"""Terra Money FCD model"""
__docformat__ = "numpy"
import logging
import textwrap
from typing import Any, Tuple
from datetime import datetime
import requests
from typing import Any, Tuple
import pandas as pd
import requests
from gamestonk_terminal.cryptocurrency.dataframe_helpers import (
denominate_number,
prettify_column_names,
replace_unicode,
)
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
GOV_COLUMNS = [
"submitTime",
@@ -33,6 +39,7 @@ VALIDATORS_COLUMNS = [
]
@log_start_end(log=logger)
def _make_request(endpoint: str) -> dict:
"""Helper method handles terra fcd api requests. [Source: https://fcd.terra.dev/v1]
@@ -58,6 +65,7 @@ def _make_request(endpoint: str) -> dict:
raise ValueError(f"Invalid Response: {response.text}") from e
@log_start_end(log=logger)
def _adjust_delegation_info(delegation: dict) -> dict:
"""Helper method which removes redundant fields from delegation info dictionary,
and denominate value fields. [Source: https://fcd.terra.dev/v1]
@@ -84,6 +92,7 @@ def _adjust_delegation_info(delegation: dict) -> dict:
return delegation_info
@log_start_end(log=logger)
def get_staking_account_info(address: str = "") -> Tuple[pd.DataFrame, str]:
"""Get staking info for provided terra account [Source: https://fcd.terra.dev/swagger]
@@ -131,6 +140,7 @@ def get_staking_account_info(address: str = "") -> Tuple[pd.DataFrame, str]:
return df, report
@log_start_end(log=logger)
def get_validators() -> pd.DataFrame:
"""Get information about terra validators [Source: https://fcd.terra.dev/swagger]
@@ -162,6 +172,7 @@ def get_validators() -> pd.DataFrame:
return pd.DataFrame(results).sort_values(by="votingPower")
@log_start_end(log=logger)
def get_proposals(status: str = "") -> pd.DataFrame:
"""Get terra blockchain governance proposals list [Source: https://fcd.terra.dev/swagger]
@@ -217,6 +228,7 @@ def get_proposals(status: str = "") -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_account_growth(cumulative: bool = True) -> pd.DataFrame:
"""Get terra blockchain account growth history [Source: https://fcd.terra.dev/swagger]
@@ -239,6 +251,7 @@ def get_account_growth(cumulative: bool = True) -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_staking_ratio_history():
"""Get terra blockchain staking ratio history [Source: https://fcd.terra.dev/swagger]
@@ -255,6 +268,7 @@ def get_staking_ratio_history():
return df[["date", "stakingRatio"]]
@log_start_end(log=logger)
def get_staking_returns_history():
"""Get terra blockchain staking returns history [Source: https://fcd.terra.dev/v1]

View File

@@ -1,25 +1,33 @@
"""Terra Money FCD view"""
__docformat__ = "numpy"
import logging
import os
import matplotlib.pyplot as plt
from matplotlib import ticker, dates as mdates
from matplotlib import dates as mdates
from matplotlib import ticker
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal.cryptocurrency.dataframe_helpers import (
prettify_column_names,
very_long_number_formatter,
)
from gamestonk_terminal.cryptocurrency.defi import terramoney_fcd_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import (
export_data,
long_number_format,
plot_autoscale,
print_rich_table,
)
from gamestonk_terminal.cryptocurrency.dataframe_helpers import (
prettify_column_names,
very_long_number_formatter,
)
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_account_staking_info(
address: str = "", top: int = 10, export: str = ""
) -> None:
@@ -50,6 +58,7 @@ def display_account_staking_info(
)
@log_start_end(log=logger)
def display_validators(
top: int = 10, sortby: str = "votingPower", descend: bool = False, export: str = ""
) -> None:
@@ -94,6 +103,7 @@ def display_validators(
)
@log_start_end(log=logger)
def display_gov_proposals(
top: int = 10,
status: str = "all",
@@ -138,6 +148,7 @@ def display_gov_proposals(
)
@log_start_end(log=logger)
def display_account_growth(
kind: str = "total", cumulative: bool = False, top: int = 90, export: str = ""
) -> None:
@@ -198,6 +209,7 @@ def display_account_growth(
)
@log_start_end(log=logger)
def display_staking_ratio_history(top: int = 90, export: str = "") -> None:
"""Display terra blockchain staking ratio history [Source: https://fcd.terra.dev/v1]
@@ -239,6 +251,7 @@ def display_staking_ratio_history(top: int = 90, export: str = "") -> None:
)
@log_start_end(log=logger)
def display_staking_returns_history(top: int = 90, export: str = "") -> None:
"""Display terra blockchain staking returns history [Source: https://fcd.terra.dev/swagger]

View File

@@ -1,13 +1,20 @@
"""CoinMarketCap model"""
__docformat__ = "numpy"
import logging
import pandas as pd
from coinmarketcapapi import CoinMarketCapAPI
import gamestonk_terminal.config_terminal as cfg
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
FILTERS = ["Symbol", "CMC_Rank", "LastPrice", "DayPctChange", "MarketCap"]
@log_start_end(log=logger)
def get_cmc_top_n() -> pd.DataFrame:
"""Shows top n coins. [Source: CoinMarketCap]

View File

@@ -1,11 +1,16 @@
"""CoinMarketCap view"""
__docformat__ = "numpy"
import logging
import os
from gamestonk_terminal.cryptocurrency.discovery import coinmarketcap_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
sort_map = {
"Symbol": "Symbol",
"CMC_Rank": "CMC_Rank",
@@ -15,6 +20,7 @@ sort_map = {
}
@log_start_end(log=logger)
def display_cmc_top_coins(
top: int = 15,
sortby: str = "CMC_Rank",

View File

@@ -1,9 +1,15 @@
"""CoinPaprika model"""
__docformat__ = "numpy"
from typing import Optional, Any
import logging
from typing import Any, Optional
import pandas as pd
from gamestonk_terminal.cryptocurrency.coinpaprika_helpers import PaprikaSession
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
CATEGORIES = [
"currencies",
@@ -17,6 +23,7 @@ CATEGORIES = [
FILTERS = ["category", "id", "name"]
@log_start_end(log=logger)
def get_search_results(
query: str, category: Optional[Any] = None, modifier: Optional[Any] = None
) -> pd.DataFrame:

View File

@@ -1,12 +1,18 @@
"""CoinPaprika view"""
__docformat__ = "numpy"
import logging
import os
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
import gamestonk_terminal.cryptocurrency.discovery.coinpaprika_model as paprika
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_search_results(
query: str,
category: str,

View File

@@ -3,10 +3,16 @@ __docformat__ = "numpy"
# pylint: disable=C0301,E1137
import requests
import logging
import pandas as pd
import requests
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import get_user_agent
logger = logging.getLogger(__name__)
NFT_COLUMNS = [
"Name",
"Protocols",
@@ -31,6 +37,7 @@ DEX_COLUMNS = [
]
@log_start_end(log=logger)
def _make_request(url: str) -> dict:
"""Helper method handles dappradar api requests. [Source: https://dappradar.com/]
@@ -55,6 +62,7 @@ def _make_request(url: str) -> dict:
raise ValueError(f"Invalid Response: {response.text}") from e
@log_start_end(log=logger)
def get_top_nfts() -> pd.DataFrame:
"""Get top nft collections [Source: https://dappradar.com/]
@@ -92,6 +100,7 @@ def get_top_nfts() -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_top_dexes() -> pd.DataFrame:
"""Get top dexes by daily volume and users [Source: https://dappradar.com/]
@@ -119,6 +128,7 @@ def get_top_dexes() -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_top_games() -> pd.DataFrame:
"""Get top blockchain games by daily volume and users [Source: https://dappradar.com/]
@@ -149,6 +159,7 @@ def get_top_games() -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_top_dapps() -> pd.DataFrame:
"""Get top decentralized applications by daily volume and users [Source: https://dappradar.com/]

View File

@@ -1,18 +1,21 @@
"""DappRadar view"""
__docformat__ = "numpy"
import logging
import os
from gamestonk_terminal.cryptocurrency.dataframe_helpers import (
very_long_number_formatter,
)
from gamestonk_terminal.cryptocurrency.discovery import dappradar_model
from gamestonk_terminal.helper_funcs import (
export_data,
print_rich_table,
)
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_top_nfts(top: int = 10, sortby: str = "", export: str = "") -> None:
"""Displays top nft collections [Source: https://dappradar.com/]
@@ -51,6 +54,7 @@ def display_top_nfts(top: int = 10, sortby: str = "", export: str = "") -> None:
)
@log_start_end(log=logger)
def display_top_games(top: int = 10, export: str = "", sortby: str = "") -> None:
"""Displays top blockchain games [Source: https://dappradar.com/]
@@ -89,6 +93,7 @@ def display_top_games(top: int = 10, export: str = "", sortby: str = "") -> None
)
@log_start_end(log=logger)
def display_top_dexes(top: int = 10, export: str = "", sortby: str = "") -> None:
"""Displays top decentralized exchanges [Source: https://dappradar.com/]
@@ -127,6 +132,7 @@ def display_top_dexes(top: int = 10, export: str = "", sortby: str = "") -> None
)
@log_start_end(log=logger)
def display_top_dapps(top: int = 10, export: str = "", sortby: str = "") -> None:
"""Displays top decentralized exchanges [Source: https://dappradar.com/]

View File

@@ -1,11 +1,15 @@
"""CoinGecko model"""
__docformat__ = "numpy"
import os
import json
import logging
import os
from typing import List
import pandas as pd
from pycoingecko import CoinGeckoAPI
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
PERIODS = {
"1h": "?time=h1",
@@ -76,6 +80,7 @@ DEX_FILTERS = [
]
@log_start_end(log=logger)
def read_file_data(file_name: str) -> dict:
if file_name.split(".")[1] != "json":
raise TypeError("Please load json file")
@@ -87,12 +92,15 @@ def read_file_data(file_name: str) -> dict:
return data
@log_start_end(log=logger)
def get_categories_keys() -> List[str]:
categories = read_file_data("coingecko_categories.json")
return list(categories.keys())
@log_start_end(log=logger)
def get_coins(top: int = 250, category: str = "") -> pd.DataFrame:
"""Get N coins from CoinGecko [Source: CoinGecko]
Parameters
@@ -149,6 +157,7 @@ GAINERS_LOSERS_COLUMNS = [
]
@log_start_end(log=logger)
def get_gainers_or_losers(
top: int = 20, period: str = "1h", typ: str = "gainers"
) -> pd.DataFrame:
@@ -198,6 +207,7 @@ def get_gainers_or_losers(
return sorted_df
@log_start_end(log=logger)
def get_trending_coins() -> pd.DataFrame:
"""Returns trending coins [Source: CoinGecko]
@@ -219,6 +229,7 @@ def get_trending_coins() -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_coin_list() -> pd.DataFrame:
"""Get list of coins available on CoinGecko [Source: CoinGecko]
@@ -236,6 +247,7 @@ def get_coin_list() -> pd.DataFrame:
).reset_index()
@log_start_end(log=logger)
def get_coins_for_given_exchange(exchange_id: str = "binance", page: int = 1) -> dict:
"""Helper method to get all coins available on binance exchange [Source: CoinGecko]
@@ -257,6 +269,7 @@ def get_coins_for_given_exchange(exchange_id: str = "binance", page: int = 1) ->
return binance_coins["tickers"]
@log_start_end(log=logger)
def get_mapping_matrix_for_exchange(exchange_id: str, pages: int = 12) -> dict:
"""Creates a matrix with all coins available on Binance with corresponding coingecko coin_id. [Source: CoinGecko]

View File

@@ -1,15 +1,21 @@
"""CoinGecko view"""
__docformat__ = "numpy"
import logging
import os
from pandas.plotting import register_matplotlib_converters
from gamestonk_terminal.cryptocurrency.dataframe_helpers import (
very_long_number_formatter,
)
from gamestonk_terminal.cryptocurrency.discovery import pycoingecko_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
register_matplotlib_converters()
# pylint: disable=inconsistent-return-statements
@@ -26,6 +32,7 @@ COINS_COLUMNS = [
]
@log_start_end(log=logger)
def display_coins(
category: str, top: int = 250, sortby: str = "Symbol", export: str = ""
) -> None:
@@ -82,6 +89,7 @@ def display_coins(
console.print("\nUnable to retrieve data from CoinGecko.\n")
@log_start_end(log=logger)
def display_gainers(
period: str = "1h", top: int = 20, sortby: str = "Symbol", export: str = ""
) -> None:
@@ -123,6 +131,7 @@ def display_gainers(
console.print("\nUnable to retrieve data from CoinGecko.\n")
@log_start_end(log=logger)
def display_losers(
period: str = "1h", top: int = 20, export: str = "", sortby: str = "Symbol"
) -> None:
@@ -164,6 +173,7 @@ def display_losers(
console.print("\nUnable to retrieve data from CoinGecko.\n")
@log_start_end(log=logger)
def display_trending(export: str = "") -> None:
"""Display trending coins [Source: CoinGecko]

View File

@@ -2,20 +2,26 @@
__docformat__ = "numpy"
import argparse
from typing import Tuple, Union, List
import logging
from collections import defaultdict
from typing import List, Tuple, Union
import matplotlib.pyplot as plt
import mplfinance as mpf
import pandas as pd
from binance.client import Client
from binance.exceptions import BinanceAPIException
import gamestonk_terminal.config_terminal as cfg
from gamestonk_terminal.helper_funcs import plot_autoscale
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.feature_flags import USE_ION as ion
from gamestonk_terminal.helper_funcs import plot_autoscale
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def _get_trading_pairs() -> List[dict]:
"""Helper method that return all trading pairs on binance. Other methods are use this data as an input for e.g
building dataframe with all coins, or to build dict of all trading pairs. [Source: Binance]
@@ -51,6 +57,7 @@ def _get_trading_pairs() -> List[dict]:
return trading_pairs
@log_start_end(log=logger)
def get_all_binance_trading_pairs() -> pd.DataFrame:
"""Returns all available pairs on Binance in DataFrame format. DataFrame has 3 columns symbol, baseAsset, quoteAsset
example row: ETHBTC | ETH | BTC
@@ -68,6 +75,7 @@ def get_all_binance_trading_pairs() -> pd.DataFrame:
return pd.DataFrame(trading_pairs)[["symbol", "baseAsset", "quoteAsset"]]
@log_start_end(log=logger)
def get_binance_available_quotes_for_each_coin() -> dict:
"""Helper methods that for every coin available on Binance add all quote assets. [Source: Binance]
@@ -85,6 +93,7 @@ def get_binance_available_quotes_for_each_coin() -> dict:
return results
@log_start_end(log=logger)
def check_valid_binance_str(symbol: str) -> str:
"""Check if symbol is in defined binance. [Source: Binance]"""
client = Client(cfg.API_BINANCE_KEY, cfg.API_BINANCE_SECRET)
@@ -97,6 +106,7 @@ def check_valid_binance_str(symbol: str) -> str:
) from e
@log_start_end(log=logger)
def show_available_pairs_for_given_symbol(
symbol: str = "ETH",
) -> Tuple[Union[str, None], list]:
@@ -124,6 +134,7 @@ def show_available_pairs_for_given_symbol(
return None, []
@log_start_end(log=logger)
def plot_candles(candles_df: pd.DataFrame, title: str) -> None:
"""Plot candle chart from dataframe. [Source: Binance]

View File

@@ -1,19 +1,23 @@
"""Binance view"""
__docformat__ = "numpy"
import logging
import os
from binance.client import Client
import numpy as np
import pandas as pd
from gamestonk_terminal.helper_funcs import (
export_data,
print_rich_table,
)
from gamestonk_terminal.cryptocurrency.cryptocurrency_helpers import plot_order_book
from binance.client import Client
import gamestonk_terminal.config_terminal as cfg
from gamestonk_terminal.cryptocurrency.cryptocurrency_helpers import plot_order_book
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_order_book(coin: str, limit: int, currency: str, export: str) -> None:
"""Get order book for currency. [Source: Binance]
@@ -48,6 +52,7 @@ def display_order_book(coin: str, limit: int, currency: str, export: str) -> Non
)
@log_start_end(log=logger)
def display_balance(coin: str, currency: str, export: str) -> None:
"""Get account holdings for asset. [Source: Binance]

View File

@@ -1,16 +1,23 @@
"""Coinbase model"""
__docformat__ = "numpy"
from typing import Optional, Any, Tuple
import pandas as pd
import logging
from typing import Any, Optional, Tuple
import numpy as np
import pandas as pd
from gamestonk_terminal.cryptocurrency.coinbase_helpers import (
check_validity_of_product,
make_coinbase_request,
)
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def show_available_pairs_for_given_symbol(symbol: str = "ETH") -> Tuple[str, list]:
pairs = make_coinbase_request("/products")
df = pd.DataFrame(pairs)[["base_currency", "quote_currency"]]
@@ -25,6 +32,7 @@ def show_available_pairs_for_given_symbol(symbol: str = "ETH") -> Tuple[str, lis
return symbol, coin_df["quote_currency"].to_list()
@log_start_end(log=logger)
def get_trading_pair_info(product_id: str) -> pd.DataFrame:
"""Get information about chosen trading pair. [Source: Coinbase]
@@ -47,6 +55,7 @@ def get_trading_pair_info(product_id: str) -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_order_book(product_id: str) -> Tuple[np.ndarray, np.ndarray, str, dict]:
"""Get orders book for chosen trading pair. [Source: Coinbase]
@@ -88,6 +97,7 @@ def get_order_book(product_id: str) -> Tuple[np.ndarray, np.ndarray, str, dict]:
return bids, asks, product_id, market_book
@log_start_end(log=logger)
def get_trades(
product_id: str, limit: int = 1000, side: Optional[Any] = None
) -> pd.DataFrame:
@@ -116,6 +126,7 @@ def get_trades(
return pd.DataFrame(product)[["time", "price", "size", "side"]]
@log_start_end(log=logger)
def get_candles(product_id: str, interval: str = "24h") -> pd.DataFrame:
"""Get candles for chosen trading pair and time interval. [Source: Coinbase]
@@ -174,6 +185,7 @@ def get_candles(product_id: str, interval: str = "24h") -> pd.DataFrame:
]
@log_start_end(log=logger)
def get_product_stats(product_id: str) -> pd.DataFrame:
"""Get 24 hr stats for the product. Volume is in base currency units.
Open, high and low are in quote currency units. [Source: Coinbase]

View File

@@ -1,18 +1,23 @@
"""Coinbase view"""
__docformat__ = "numpy"
import logging
import os
from typing import Optional
import pandas as pd
from pandas.plotting import register_matplotlib_converters
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.cryptocurrency.due_diligence import coinbase_model
from gamestonk_terminal.cryptocurrency.cryptocurrency_helpers import plot_order_book
from gamestonk_terminal.cryptocurrency.due_diligence import coinbase_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
register_matplotlib_converters()
@log_start_end(log=logger)
def display_order_book(product_id: str, export: str = "") -> None:
"""Displays a list of available currency pairs for trading. [Source: Coinbase]
@@ -34,6 +39,7 @@ def display_order_book(product_id: str, export: str = "") -> None:
)
@log_start_end(log=logger)
def display_trades(
product_id: str, limit: int = 1000, side: Optional[str] = None, export: str = ""
) -> None:
@@ -69,6 +75,7 @@ def display_trades(
)
@log_start_end(log=logger)
def display_candles(product_id: str, interval: str = "24h", export: str = "") -> None:
"""Get candles for chosen trading pair and time interval. [Source: Coinbase]
@@ -97,6 +104,7 @@ def display_candles(product_id: str, interval: str = "24h", export: str = "") ->
)
@log_start_end(log=logger)
def display_stats(product_id: str, export: str = "") -> None:
"""Get 24 hr stats for the product. Volume is in base currency units.
Open, high and low are in quote currency units. [Source: Coinbase]

View File

@@ -1,14 +1,21 @@
import json
import datetime as dt
import json
import logging
import pandas as pd
import requests
from gamestonk_terminal import config_terminal as cfg
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
api_url = "https://open-api.coinglass.com/api/pro/v1/"
INTERVALS = [0, 1, 2, 4]
@log_start_end(log=logger)
def get_open_interest_per_exchange(symbol: str, interval: int) -> pd.DataFrame:
"""Returns open interest by exchange for a certain symbol
[Source: https://coinglass.github.io/API-Reference/]

View File

@@ -1,16 +1,23 @@
import logging
import os
from matplotlib import pyplot as plt, dates as mdates
import pandas as pd
import pandas as pd
from matplotlib import dates as mdates
from matplotlib import pyplot as plt
from gamestonk_terminal import config_plot as cfgPlot
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.cryptocurrency.due_diligence.coinglass_model import (
get_open_interest_per_exchange,
)
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, plot_autoscale
from gamestonk_terminal import config_plot as cfgPlot
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_open_interest(symbol: str, interval: int, export: str) -> None:
"""Displays open interest by exchange for a certain cryptocurrency
[Source: https://coinglass.github.io/API-Reference/]
@@ -38,6 +45,7 @@ def display_open_interest(symbol: str, interval: int, export: str) -> None:
)
@log_start_end(log=logger)
def plot_data(df: pd.DataFrame, symbol: str):
df_price = df[["price"]].copy()

View File

@@ -1,15 +1,22 @@
"""CoinPaprika model"""
__docformat__ = "numpy"
from typing import Tuple, Optional, Any
from datetime import datetime, timedelta
import logging
import textwrap
from datetime import datetime, timedelta
from typing import Any, Optional, Tuple
import pandas as pd
from dateutil import parser
from gamestonk_terminal.cryptocurrency.coinpaprika_helpers import PaprikaSession
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def get_coin(coin_id: str = "eth-ethereum") -> dict:
"""Get coin by id [Source: CoinPaprika]
@@ -28,6 +35,7 @@ def get_coin(coin_id: str = "eth-ethereum") -> dict:
return coin
@log_start_end(log=logger)
def get_coin_twitter_timeline(coin_id: str = "eth-ethereum") -> pd.DataFrame:
"""Get twitter timeline for given coin id. Not more than last 50 tweets [Source: CoinPaprika]
@@ -62,6 +70,7 @@ def get_coin_twitter_timeline(coin_id: str = "eth-ethereum") -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_coin_events_by_id(coin_id: str = "eth-ethereum") -> pd.DataFrame:
"""Get all events related to given coin like conferences, start date of futures trading etc. [Source: CoinPaprika]
@@ -112,6 +121,7 @@ def get_coin_events_by_id(coin_id: str = "eth-ethereum") -> pd.DataFrame:
return data
@log_start_end(log=logger)
def get_coin_exchanges_by_id(coin_id: str = "eth-ethereum") -> pd.DataFrame:
"""Get all exchanges for given coin id. [Source: CoinPaprika]
@@ -134,6 +144,7 @@ def get_coin_exchanges_by_id(coin_id: str = "eth-ethereum") -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_coin_markets_by_id(
coin_id: str = "eth-ethereum", quotes: str = "USD"
) -> pd.DataFrame:
@@ -182,6 +193,7 @@ def get_coin_markets_by_id(
return pd.DataFrame(data)
@log_start_end(log=logger)
def get_ohlc_historical(
coin_id: str = "eth-ethereum", quotes: str = "USD", days: int = 90
) -> pd.DataFrame:
@@ -228,6 +240,7 @@ def get_ohlc_historical(
return pd.DataFrame(data)
@log_start_end(log=logger)
def get_tickers_info_for_coin(
coin_id: str = "btc-bitcoin", quotes: str = "USD"
) -> pd.DataFrame:
@@ -313,6 +326,7 @@ def get_tickers_info_for_coin(
return df
@log_start_end(log=logger)
def validate_coin(coin: str, coins_dct: dict) -> Tuple[str, Optional[Any]]:
"""Helper method that validates if proper coin id or symbol was provided [Source: CoinPaprika]
@@ -345,6 +359,7 @@ def validate_coin(coin: str, coins_dct: dict) -> Tuple[str, Optional[Any]]:
return coin_found, symbol
@log_start_end(log=logger)
def basic_coin_info(coin_id: str = "btc-bitcoin") -> pd.DataFrame:
"""Basic coin information [Source: CoinPaprika]

View File

@@ -1,18 +1,21 @@
"""CoinPaprika view"""
__docformat__ = "numpy"
import logging
import os
from pandas.plotting import register_matplotlib_converters
from gamestonk_terminal.helper_funcs import (
export_data,
print_rich_table,
)
from gamestonk_terminal.cryptocurrency.due_diligence import coinpaprika_model
from gamestonk_terminal.cryptocurrency.dataframe_helpers import (
long_number_format_with_type_check,
)
from gamestonk_terminal.cryptocurrency.due_diligence import coinpaprika_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
register_matplotlib_converters()
# pylint: disable=inconsistent-return-statements
@@ -79,6 +82,7 @@ CURRENCIES = [
]
@log_start_end(log=logger)
def display_twitter(
coin_id: str = "btc-bitcoin",
top: int = 10,
@@ -129,6 +133,7 @@ def display_twitter(
)
@log_start_end(log=logger)
def display_events(
coin_id: str = "btc-bitcoin",
top: int = 10,
@@ -183,6 +188,7 @@ def display_events(
)
@log_start_end(log=logger)
def display_exchanges(
coin_id: str = "btc-bitcoin",
top: int = 10,
@@ -227,6 +233,7 @@ def display_exchanges(
)
@log_start_end(log=logger)
def display_markets(
coin_id: str = "btc-bitcoin",
currency: str = "USD",
@@ -287,6 +294,7 @@ def display_markets(
)
@log_start_end(log=logger)
def display_price_supply(
coin_id: str = "btc-bitcoin",
currency: str = "USD",
@@ -326,6 +334,7 @@ def display_price_supply(
)
@log_start_end(log=logger)
def display_basic(
coin_id: str = "btc-bitcoin",
export: str = "",

View File

@@ -1,17 +1,23 @@
"""Finbrain Crypto Sentiment Analysis"""
__docformat__ = "numpy"
import logging
import os
import pandas as pd
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.common.behavioural_analysis.finbrain_model import get_sentiment
from gamestonk_terminal.common.behavioural_analysis.finbrain_view import (
plot_sentiment,
sentiment_coloring,
)
from gamestonk_terminal.common.behavioural_analysis.finbrain_model import get_sentiment
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
try:
@@ -21,6 +27,7 @@ except ValueError:
COINS = None
@log_start_end(log=logger)
def display_crypto_sentiment_analysis(coin: str, export: str) -> None:
"""Sentiment analysis from FinBrain for Cryptocurrencies

View File

@@ -1,7 +1,13 @@
import json
import logging
import pandas as pd
import requests
from gamestonk_terminal import config_terminal as cfg
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
api_url = "https://api.glassnode.com/v1/metrics/"
@@ -167,6 +173,7 @@ INTERVALS_DISPLAY_EXCHANGE_NET_POSITION_CHANGE = ["24h"]
INTERVALS_EXCHANGE_BALANCES = ["24h"]
@log_start_end(log=logger)
def get_close_price(asset: str, interval: str, since: int, until: int) -> pd.DataFrame:
"""Returns the price of a cryptocurrency
[Source: https://glassnode.com]
@@ -208,6 +215,7 @@ def get_close_price(asset: str, interval: str, since: int, until: int) -> pd.Dat
return pd.DataFrame()
@log_start_end(log=logger)
def get_non_zero_addresses(
asset: str, interval: str, since: int, until: int
) -> pd.DataFrame:
@@ -251,6 +259,7 @@ def get_non_zero_addresses(
return pd.DataFrame()
@log_start_end(log=logger)
def get_active_addresses(
asset: str, interval: str, since: int, until: int
) -> pd.DataFrame:
@@ -294,6 +303,7 @@ def get_active_addresses(
return pd.DataFrame()
@log_start_end(log=logger)
def get_hashrate(asset: str, interval: str, since: int, until: int) -> pd.DataFrame:
"""Returns dataframe with mean hashrate of btc or eth blockchain and asset price
[Source: https://glassnode.com]
@@ -340,6 +350,7 @@ def get_hashrate(asset: str, interval: str, since: int, until: int) -> pd.DataFr
return pd.DataFrame()
@log_start_end(log=logger)
def get_exchange_balances(
asset: str, exchange: str, interval: str, since: int, until: int
) -> pd.DataFrame:
@@ -398,6 +409,7 @@ def get_exchange_balances(
return pd.DataFrame()
@log_start_end(log=logger)
def get_exchange_net_position_change(
asset: str, exchange: str, interval: str, since: int, until: int
) -> pd.DataFrame:

View File

@@ -1,10 +1,15 @@
from datetime import datetime
import logging
import os
from matplotlib import pyplot as plt, dates as mdates, ticker
from datetime import datetime
import matplotlib
import numpy as np
from gamestonk_terminal.helper_funcs import export_data, plot_autoscale
from matplotlib import dates as mdates
from matplotlib import pyplot as plt
from matplotlib import ticker
from gamestonk_terminal import config_plot as cfgPlot
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.cryptocurrency.due_diligence.glassnode_model import (
get_active_addresses,
get_close_price,
@@ -13,10 +18,14 @@ from gamestonk_terminal.cryptocurrency.due_diligence.glassnode_model import (
get_hashrate,
get_non_zero_addresses,
)
from gamestonk_terminal import feature_flags as gtff
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)
def display_btc_rainbow(since: int, until: int, export: str = ""):
"""Displays bitcoin rainbow chart
[Price data from source: https://glassnode.com]
@@ -136,6 +145,7 @@ def display_btc_rainbow(since: int, until: int, export: str = ""):
)
@log_start_end(log=logger)
def display_active_addresses(
asset: str, since: int, until: int, interval: str, export: str = ""
) -> None:
@@ -190,6 +200,7 @@ def display_active_addresses(
)
@log_start_end(log=logger)
def display_non_zero_addresses(
asset: str, since: int, until: int, interval: str, export: str = ""
) -> None:
@@ -244,6 +255,7 @@ def display_non_zero_addresses(
)
@log_start_end(log=logger)
def display_exchange_net_position_change(
asset: str, exchange: str, since: int, until: int, interval: str, export: str = ""
) -> None:
@@ -315,6 +327,7 @@ def display_exchange_net_position_change(
)
@log_start_end(log=logger)
def display_exchange_balances(
asset: str,
exchange: str,
@@ -386,6 +399,7 @@ def display_exchange_balances(
)
@log_start_end(log=logger)
def display_hashrate(
asset: str,
since: int,

View File

@@ -1,25 +1,31 @@
"""CoinGecko model"""
__docformat__ = "numpy"
from typing import Tuple, Union, Any, Dict, List, Optional
import regex as re
import logging
from typing import Any, Dict, List, Optional, Tuple, Union
import pandas as pd
import regex as re
from pycoingecko import CoinGeckoAPI
from gamestonk_terminal.cryptocurrency.discovery.pycoingecko_model import read_file_data
from gamestonk_terminal.cryptocurrency.pycoingecko_helpers import (
remove_keys,
filter_list,
find_discord,
rename_columns_in_dct,
create_dictionary_with_prefixes,
DENOMINATION,
calc_change,
)
from gamestonk_terminal.cryptocurrency.dataframe_helpers import (
replace_underscores_in_column_names,
)
from gamestonk_terminal.cryptocurrency.discovery.pycoingecko_model import read_file_data
from gamestonk_terminal.cryptocurrency.pycoingecko_helpers import (
DENOMINATION,
calc_change,
create_dictionary_with_prefixes,
filter_list,
find_discord,
remove_keys,
rename_columns_in_dct,
)
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
CHANNELS = {
"telegram_channel_identifier": "telegram",
"twitter_screen_name": "twitter",
@@ -41,6 +47,7 @@ BASE_INFO = [
]
@log_start_end(log=logger)
def get_coin_potential_returns(
main_coin: str,
vs: Union[str, None] = None,
@@ -185,6 +192,7 @@ def get_coin_potential_returns(
return pd.DataFrame()
@log_start_end(log=logger)
def check_coin(coin_id: str):
coins = read_file_data("coingecko_coins.json")
for coin in coins:
@@ -195,6 +203,7 @@ def check_coin(coin_id: str):
return None
@log_start_end(log=logger)
def get_coin_market_chart(
coin_id: str = "", vs_currency: str = "usd", days: int = 30, **kwargs: Any
) -> pd.DataFrame:
@@ -227,6 +236,7 @@ def get_coin_market_chart(
class Coin:
"""Coin class, it holds loaded coin"""
@log_start_end(log=logger)
def __init__(self, symbol: str, load_from_api: bool = False):
self.client = CoinGeckoAPI()
if load_from_api:
@@ -238,9 +248,11 @@ class Coin:
if self.coin_symbol:
self.coin: Dict[Any, Any] = self._get_coin_info()
@log_start_end(log=logger)
def __str__(self):
return f"{self.coin_symbol}"
@log_start_end(log=logger)
def _validate_coin(self, search_coin: str) -> Tuple[Optional[Any], Optional[Any]]:
"""Validate if given coin symbol or id exists in list of available coins on CoinGecko.
If yes it returns coin id. [Source: CoinGecko]
@@ -269,6 +281,7 @@ class Coin:
return coin, symbol
raise ValueError(f"Could not find coin with the given id: {search_coin}\n")
@log_start_end(log=logger)
def coin_list(self) -> list:
"""List all available coins [Source: CoinGecko]
@@ -280,6 +293,7 @@ class Coin:
return [token.get("id") for token in self._coin_list]
@log_start_end(log=logger)
def _get_coin_info(self) -> dict:
"""Helper method which fetch the coin information by id from CoinGecko API like:
(name, price, market, ... including exchange tickers) [Source: CoinGecko]
@@ -293,6 +307,7 @@ class Coin:
params = dict(localization="false", tickers="false", sparkline=True)
return self.client.get_coin_by_id(self.coin_symbol, **params)
@log_start_end(log=logger)
def _get_links(self) -> Dict:
"""Helper method that extracts links from coin [Source: CoinGecko]
@@ -304,7 +319,7 @@ class Coin:
return self.coin.get("links", {})
@property
@log_start_end(log=logger)
def get_repositories(self) -> Optional[Any]:
"""Get list of all repositories for given coin [Source: CoinGecko]
@@ -316,7 +331,7 @@ class Coin:
return self._get_links().get("repos_url")
@property
@log_start_end(log=logger)
def get_developers_data(self) -> pd.DataFrame:
"""Get coin development data from GitHub or BitBucket like:
number of pull requests, contributor etc [Source: CoinGecko]
@@ -344,7 +359,7 @@ class Coin:
return df[df["Value"].notna()]
@property
@log_start_end(log=logger)
def get_blockchain_explorers(self) -> Union[pd.DataFrame, Any]:
"""Get list of URLs to blockchain explorers for given coin. [Source: CoinGecko]
@@ -368,7 +383,7 @@ class Coin:
return df[df["Value"].notna()]
return None
@property
@log_start_end(log=logger)
def get_social_media(self) -> pd.DataFrame:
"""Get list of URLs to social media like twitter, facebook, reddit... [Source: CoinGecko]
@@ -402,7 +417,7 @@ class Coin:
)
return df[df["Value"].notna()]
@property
@log_start_end(log=logger)
def get_websites(self) -> pd.DataFrame:
"""Get list of URLs to websites like homepage of coin, forum. [Source: CoinGecko]
@@ -428,7 +443,7 @@ class Coin:
)
return df[df["Value"].notna()]
@property
@log_start_end(log=logging)
def get_categories(self) -> Union[Dict[Any, Any], List[Any]]:
"""Coins categories. [Source: CoinGecko]
@@ -440,6 +455,7 @@ class Coin:
return self.coin.get("categories", {})
@log_start_end(log=logger)
def _get_base_market_data_info(self) -> dict:
"""Helper method that fetches all the base market/price information about given coin. [Source: CoinGecko]
@@ -465,7 +481,7 @@ class Coin:
market_dct.update(prices)
return market_dct
@property
@log_start_end(log=logger)
def get_base_info(self) -> pd.DataFrame:
"""Get all the base information about given coin. [Source: CoinGecko]
@@ -496,7 +512,7 @@ class Coin:
return df[df["Value"].notna()]
@property
@log_start_end(log=logger)
def get_market_data(self) -> pd.DataFrame:
"""Get all the base market information about given coin. [Source: CoinGecko]
@@ -551,6 +567,7 @@ class Coin:
)
return df[df["Value"].notna()]
@log_start_end(log=logger)
def get_all_time_high(self, currency: str = "usd") -> pd.DataFrame:
"""Get all time high data for given coin. [Source: CoinGecko]
@@ -586,6 +603,7 @@ class Coin:
df["Metric"] = df["Metric"] + f" {currency.upper()}"
return df[df["Value"].notna()]
@log_start_end(log=logger)
def get_all_time_low(self, currency: str = "usd") -> pd.DataFrame:
"""Get all time low data for given coin. [Source: CoinGecko]
@@ -621,7 +639,7 @@ class Coin:
df["Metric"] = df["Metric"] + f" {currency.upper()}"
return df[df["Value"].notna()]
@property
@log_start_end(log=logger)
def get_scores(self) -> pd.DataFrame:
"""Get different kind of scores for given coin. [Source: CoinGecko]
@@ -666,6 +684,7 @@ class Coin:
)
return df[df["Value"].notna()]
@log_start_end(log=logger)
def get_coin_market_chart(
self, vs_currency: str = "usd", days: int = 30, **kwargs: Any
) -> pd.DataFrame:
@@ -696,6 +715,7 @@ class Coin:
df["currency"] = vs_currency
return df
@log_start_end(log=logger)
def get_ohlc(self, vs_currency: str = "usd", days: int = 90) -> pd.DataFrame:
"""Get Open, High, Low, Close prices for given coin. [Source: CoinGecko]

View File

@@ -1,23 +1,22 @@
"""CoinGecko view"""
__docformat__ = "numpy"
# pylint: disable=C0209
import logging
import os
from typing import Union
from pandas.plotting import register_matplotlib_converters
from gamestonk_terminal.helper_funcs import (
export_data,
print_rich_table,
)
import gamestonk_terminal.cryptocurrency.due_diligence.pycoingecko_model as gecko
from gamestonk_terminal.cryptocurrency.dataframe_helpers import wrap_text_in_df
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
register_matplotlib_converters()
# pylint: disable=inconsistent-return-statements
# pylint: disable=R0904, C0302
@log_start_end(log=logger)
def display_coin_potential_returns(
main_coin: str,
vs: Union[str, None] = None,
@@ -41,11 +40,13 @@ def display_coin_potential_returns(
Export dataframe data to csv,json,xlsx file
"""
df = gecko.get_coin_potential_returns(main_coin, vs, top, price)
df["Potential Market Cap ($)"] = df.apply(
lambda x: "{:,}".format(int(x["Potential Market Cap ($)"])), axis=1
lambda x: f"{int(x['Potential Market Cap ($)']):n}", axis=1
)
df["Current Market Cap ($)"] = df.apply(
lambda x: "{:,}".format(int(x["Current Market Cap ($)"])), axis=1
lambda x: f"{int(x['Current Market Cap ($)']):n}", axis=1
)
print_rich_table(
@@ -61,6 +62,7 @@ def display_coin_potential_returns(
)
@log_start_end(log=logger)
def display_info(symbol: str, export: str) -> None:
"""Shows basic information about loaded coin. [Source: CoinGecko]
@@ -74,7 +76,7 @@ def display_info(symbol: str, export: str) -> None:
coin = gecko.Coin(symbol)
df = wrap_text_in_df(coin.get_base_info, w=80)
df = wrap_text_in_df(coin.get_base_info(), w=80)
print_rich_table(
df, headers=list(df.columns), show_index=False, title="Basic Coin Information"
@@ -89,6 +91,7 @@ def display_info(symbol: str, export: str) -> None:
)
@log_start_end(log=logger)
def display_web(symbol: str, export: str) -> None:
"""Shows found websites corresponding to loaded coin. [Source: CoinGecko]
@@ -102,7 +105,7 @@ def display_web(symbol: str, export: str) -> None:
coin = gecko.Coin(symbol)
df = coin.get_websites
df = coin.get_websites()
print_rich_table(
df, headers=list(df.columns), show_index=False, title="Websites for Loaded Coin"
@@ -117,6 +120,7 @@ def display_web(symbol: str, export: str) -> None:
)
@log_start_end(log=logger)
def display_social(symbol: str, export: str) -> None:
"""Shows social media corresponding to loaded coin. [Source: CoinGecko]
@@ -128,7 +132,7 @@ def display_social(symbol: str, export: str) -> None:
Export dataframe data to csv,json,xlsx file
"""
coin = gecko.Coin(symbol)
df = coin.get_social_media
df = coin.get_social_media()
print_rich_table(
df,
@@ -146,6 +150,7 @@ def display_social(symbol: str, export: str) -> None:
)
@log_start_end(log=logger)
def display_dev(symbol: str, export: str) -> None:
"""Shows developers data for loaded coin. [Source: CoinGecko]
@@ -158,7 +163,7 @@ def display_dev(symbol: str, export: str) -> None:
"""
coin = gecko.Coin(symbol)
df = coin.get_developers_data
df = coin.get_developers_data()
print_rich_table(
df,
@@ -176,6 +181,7 @@ def display_dev(symbol: str, export: str) -> None:
)
@log_start_end(log=logger)
def display_ath(symbol: str, currency: str, export: str) -> None:
"""Shows all time high data for loaded coin. [Source: CoinGecko]
@@ -204,6 +210,7 @@ def display_ath(symbol: str, currency: str, export: str) -> None:
)
@log_start_end(log=logger)
def display_atl(symbol: str, currency: str, export: str) -> None:
"""Shows all time low data for loaded coin. [Source: CoinGecko]
@@ -232,6 +239,7 @@ def display_atl(symbol: str, currency: str, export: str) -> None:
)
@log_start_end(log=logger)
def display_score(symbol: str, export: str) -> None:
"""Shows different kind of scores for loaded coin. [Source: CoinGecko]
@@ -244,7 +252,7 @@ def display_score(symbol: str, export: str) -> None:
"""
coin = gecko.Coin(symbol)
df = coin.get_scores
df = coin.get_scores()
print_rich_table(
df,
@@ -262,6 +270,7 @@ def display_score(symbol: str, export: str) -> None:
)
@log_start_end(log=logger)
def display_bc(symbol: str, export: str) -> None:
"""Shows urls to blockchain explorers. [Source: CoinGecko]
@@ -274,7 +283,7 @@ def display_bc(symbol: str, export: str) -> None:
"""
coin = gecko.Coin(symbol)
df = coin.get_blockchain_explorers
df = coin.get_blockchain_explorers()
print_rich_table(
df, headers=list(df.columns), show_index=False, title="Blockchain URLs"
@@ -289,6 +298,7 @@ def display_bc(symbol: str, export: str) -> None:
)
@log_start_end(log=logger)
def display_market(symbol: str, export: str) -> None:
"""Shows market data for loaded coin. [Source: CoinGecko]
@@ -301,7 +311,7 @@ def display_market(symbol: str, export: str) -> None:
"""
coin = gecko.Coin(symbol)
df = coin.get_market_data
df = coin.get_market_data()
print_rich_table(
df, headers=list(df.columns), show_index=False, title="Market Data"

View File

@@ -1,12 +1,19 @@
""" nftcalendar.io Model """
__docformat__ = "numpy"
import logging
import pandas as pd
import requests
from bs4 import BeautifulSoup
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import get_user_agent
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def get_nft_drops(url: str) -> pd.DataFrame:
"""Get NFT drops [Source: nftcalendar.io]
@@ -56,6 +63,7 @@ def get_nft_drops(url: str) -> pd.DataFrame:
)
@log_start_end(log=logger)
def get_nft_today_drops() -> pd.DataFrame:
"""Get NFT today drops [Source: nftcalendar.io]
@@ -67,6 +75,7 @@ def get_nft_today_drops() -> pd.DataFrame:
return get_nft_drops("https://nftcalendar.io/")
@log_start_end(log=logger)
def get_nft_upcoming_drops() -> pd.DataFrame:
"""Get NFT upcoming drops [Source: nftcalendar.io]
@@ -78,6 +87,7 @@ def get_nft_upcoming_drops() -> pd.DataFrame:
return get_nft_drops("https://nftcalendar.io/events")
@log_start_end(log=logger)
def get_nft_ongoing_drops() -> pd.DataFrame:
"""Get NFT ongoing drops [Source: nftcalendar.io]
@@ -89,6 +99,7 @@ def get_nft_ongoing_drops() -> pd.DataFrame:
return get_nft_drops("https://nftcalendar.io/events/ongoing/")
@log_start_end(log=logger)
def get_nft_newest_drops() -> pd.DataFrame:
"""Get NFT newest drops [Source: nftcalendar.io]

View File

@@ -1,12 +1,18 @@
""" nftcalendar.io View """
__docformat__ = "numpy"
import logging
import os
from gamestonk_terminal.helper_funcs import export_data
from gamestonk_terminal.cryptocurrency.nft import nftcalendar_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_nft_today_drops(num: int, export: str):
"""Display NFT today drops. [Source: nftcalendar.io]
@@ -36,6 +42,7 @@ def display_nft_today_drops(num: int, export: str):
)
@log_start_end(log=logger)
def display_nft_upcoming_drops(num: int, export: str):
"""Display NFT upcoming drops. [Source: nftcalendar.io]
@@ -65,6 +72,7 @@ def display_nft_upcoming_drops(num: int, export: str):
)
@log_start_end(log=logger)
def display_nft_ongoing_drops(num: int, export: str):
"""Display NFT ongoing drops. [Source: nftcalendar.io]
@@ -94,6 +102,7 @@ def display_nft_ongoing_drops(num: int, export: str):
)
@log_start_end(log=logger)
def display_nft_newest_drops(num: int, export: str):
"""Display NFT newest drops. [Source: nftcalendar.io]

View File

@@ -1,12 +1,19 @@
""" opensea.io Model """
import logging
from datetime import datetime
import requests
import pandas as pd
import requests
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
API_URL = "https://api.opensea.io/api/v1"
@log_start_end(log=logger)
def get_collection_stats(slug: str) -> pd.DataFrame:
"""Get stats of a nft collection [Source: opensea.io]

View File

@@ -1,11 +1,17 @@
""" opensea.io View """
import logging
import os
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.cryptocurrency.nft.opensea_model import get_collection_stats
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_collection_stats(slug: str, export: str):
"""Display collection stats. [Source: opensea.io]

View File

@@ -3,25 +3,31 @@ __docformat__ = "numpy"
import datetime
import json
import logging
import os
from typing import Optional
import numpy as np
from requests.exceptions import HTTPError
from requests.adapters import HTTPAdapter
import requests
import pandas as pd
import requests
from requests.adapters import HTTPAdapter
from requests.exceptions import HTTPError
from gamestonk_terminal import config_terminal as cfg
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
class BitQueryApiKeyException(Exception):
"""Bit Query Api Key Exception object"""
@log_start_end(log=logger)
def __init__(self, message: str):
super().__init__(message)
self.message = message
@log_start_end(log=logger)
def __str__(self) -> str:
return f"BitQueryApiKeyException: {self.message}"
@@ -123,6 +129,7 @@ DECENTRALIZED_EXCHANGES_MAP = {e.lower(): e for e in DECENTRALIZED_EXCHANGES}
NETWORKS = ["bsc", "ethereum", "matic"]
@log_start_end(log=logger)
def _extract_dex_trades(data: dict) -> pd.DataFrame:
"""Helper method that extracts from bitquery api response data from nested dictionary:
response = {'ethereum' : {'dexTrades' : <data>}}. If 'dexTrades' is None, raises Exception.
@@ -144,6 +151,7 @@ def _extract_dex_trades(data: dict) -> pd.DataFrame:
return pd.json_normalize(dex_trades)
@log_start_end(log=logger)
def query_graph(url: str, query: str) -> dict:
"""Helper methods for querying graphql api. [Source: https://bitquery.io/]
@@ -191,6 +199,7 @@ def query_graph(url: str, query: str) -> dict:
return data["data"]
@log_start_end(log=logger)
def get_erc20_tokens() -> pd.DataFrame:
"""Helper method that loads ~1500 most traded erc20 token.
[Source: json file]
@@ -211,6 +220,7 @@ def get_erc20_tokens() -> pd.DataFrame:
return df[["name", "symbol", "address", "count"]]
@log_start_end(log=logger)
def find_token_address(token: str) -> Optional[str]:
"""Helper methods that search for ERC20 coin base on provided symbol or token address.
If erc20 token address is provided, then function checks if it's proper address and returns it back.
@@ -244,6 +254,7 @@ def find_token_address(token: str) -> Optional[str]:
return found_token.iloc[0]["address"]
@log_start_end(log=logger)
def get_dex_trades_by_exchange(
trade_amount_currency: str = "USD", limit: int = 90
) -> pd.DataFrame:
@@ -296,6 +307,7 @@ def get_dex_trades_by_exchange(
)
@log_start_end(log=logger)
def get_dex_trades_monthly(
trade_amount_currency: str = "USD", limit: int = 90
) -> pd.DataFrame:
@@ -352,6 +364,7 @@ def get_dex_trades_monthly(
return df[["date", "trades", "tradeAmount"]]
@log_start_end(log=logger)
def get_daily_dex_volume_for_given_pair(
limit: int = 100,
token: str = "UNI",
@@ -449,6 +462,7 @@ def get_daily_dex_volume_for_given_pair(
].sort_values(by="date", ascending=False)
@log_start_end(log=logger)
def get_token_volume_on_dexes(
token: str = "UNI",
trade_amount_currency: str = "USD",
@@ -507,6 +521,7 @@ def get_token_volume_on_dexes(
)
@log_start_end(log=logger)
def get_ethereum_unique_senders(interval: str = "day", limit: int = 90) -> pd.DataFrame:
"""Get number of unique ethereum addresses which made a transaction in given time interval.
@@ -562,6 +577,7 @@ def get_ethereum_unique_senders(interval: str = "day", limit: int = 90) -> pd.Da
return df[UEAT_FILTERS]
@log_start_end(log=logger)
def get_most_traded_pairs(
network: str = "ethereum", exchange: str = "Uniswap", limit: int = 90
) -> pd.DataFrame:
@@ -611,6 +627,7 @@ def get_most_traded_pairs(
return df[TTCP_FILTERS]
@log_start_end(log=logger)
def get_spread_for_crypto_pair(
token: str = "WETH", vs: str = "USDT", limit: int = 30
) -> pd.DataFrame:

View File

@@ -1,17 +1,22 @@
"""The BitQuery view"""
__docformat__ = "numpy"
import logging
import os
from gamestonk_terminal.cryptocurrency.dataframe_helpers import (
very_long_number_formatter,
prettify_column_names,
very_long_number_formatter,
)
from gamestonk_terminal.cryptocurrency.onchain import bitquery_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_dex_trades(
trade_amount_currency: str = "USD",
kind: str = "dex",
@@ -73,6 +78,7 @@ def display_dex_trades(
)
@log_start_end(log=logger)
def display_daily_volume_for_given_pair(
token: str = "WBTC",
vs: str = "USDT",
@@ -137,6 +143,7 @@ def display_daily_volume_for_given_pair(
)
@log_start_end(log=logger)
def display_dex_volume_for_token(
token: str = "WBTC",
trade_amount_currency: str = "USD",
@@ -195,6 +202,7 @@ def display_dex_volume_for_token(
)
@log_start_end(log=logger)
def display_ethereum_unique_senders(
interval: str = "days",
limit: int = 10,
@@ -253,6 +261,7 @@ def display_ethereum_unique_senders(
)
@log_start_end(log=logger)
def display_most_traded_pairs(
exchange="Uniswap",
days: int = 10,
@@ -307,6 +316,7 @@ def display_most_traded_pairs(
)
@log_start_end(log=logger)
def display_spread_for_crypto_pair(
token="ETH",
vs="USDC",

View File

@@ -1,10 +1,17 @@
"""Blockchain model"""
__docformat__ = "numpy"
import requests
import logging
import pandas as pd
import requests
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def _make_request(endpoint: str) -> dict:
"""Helper method handles Blockchain API requests. [Source: https://api.blockchain.info/]
@@ -30,6 +37,7 @@ def _make_request(endpoint: str) -> dict:
raise ValueError(f"Invalid Response: {response.text}") from e
@log_start_end(log=logger)
def get_btc_circulating_supply() -> pd.DataFrame:
"""Returns BTC circulating supply [Source: https://api.blockchain.info/]
@@ -48,6 +56,7 @@ def get_btc_circulating_supply() -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_btc_confirmed_transactions() -> pd.DataFrame:
"""Returns BTC confirmed transactions [Source: https://api.blockchain.info/]

View File

@@ -1,20 +1,28 @@
"""Blockchain View"""
__docformat__ = "numpy"
import logging
import os
from datetime import datetime
import matplotlib.pyplot as plt
from matplotlib import ticker, dates as mdates
from gamestonk_terminal.cryptocurrency.onchain import blockchain_model
from gamestonk_terminal.helper_funcs import (
export_data,
plot_autoscale,
long_number_format,
)
from matplotlib import dates as mdates
from matplotlib import ticker
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal.cryptocurrency.onchain import blockchain_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import (
export_data,
long_number_format,
plot_autoscale,
)
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_btc_circulating_supply(since: int, until: int, export: str) -> None:
"""Returns BTC circulating supply [Source: https://api.blockchain.info/]
@@ -62,6 +70,7 @@ def display_btc_circulating_supply(since: int, until: int, export: str) -> None:
)
@log_start_end(log=logger)
def display_btc_confirmed_transactions(since: int, until: int, export: str) -> None:
"""Returns BTC confirmed transactions [Source: https://api.blockchain.info/]

View File

@@ -1,8 +1,15 @@
"""ETH Gas Station model"""
import logging
import pandas as pd
import requests
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def get_gwei_fees() -> pd.DataFrame:
"""Returns the most recent Ethereum gas fees in gwei
[Source: https://ethgasstation.info]

View File

@@ -1,11 +1,16 @@
"""ETH Gas Station view"""
import logging
import os
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.cryptocurrency.onchain.ethgasstation_model import get_gwei_fees
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_gwei_fees(export: str) -> None:
"""Current gwei fees
[Source: https://ethgasstation.info]

View File

@@ -1,15 +1,20 @@
"""Ethplorer model"""
__docformat__ = "numpy"
import logging
import textwrap
from datetime import datetime
from typing import Any, Optional
from time import sleep
from typing import Any, Optional
import pandas as pd
import requests
from gamestonk_terminal.cryptocurrency.dataframe_helpers import create_df_index
import gamestonk_terminal.config_terminal as cfg
from gamestonk_terminal.cryptocurrency.dataframe_helpers import create_df_index
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
PRICES_FILTERS = [
"date",
@@ -50,6 +55,7 @@ HOLDERS_FILTERS = [
]
@log_start_end(log=logger)
def split_cols_with_dot(column: str) -> str:
"""Split column name in data frame columns whenever there is a dot between 2 words.
E.g. price.availableSupply -> priceAvailableSupply.
@@ -65,6 +71,7 @@ def split_cols_with_dot(column: str) -> str:
Value of column with replaced format.
"""
@log_start_end(log=logger)
def replace(string: str, char: str, index: int) -> str:
"""Helper method which replaces values with dot as a separator and converts it to camelCase format
@@ -92,6 +99,7 @@ def split_cols_with_dot(column: str) -> str:
return column
@log_start_end(log=logger)
def enrich_social_media(dct: dict) -> None:
"""Searching inside dictionary if there are any information about twitter, reddit or coingecko. If yes it
updates dictionary with url to given social media site.
@@ -113,6 +121,7 @@ def enrich_social_media(dct: dict) -> None:
dct[k] = v + dct[k]
@log_start_end(log=logger)
def make_request(endpoint: str, address: Optional[str] = None, **kwargs: Any) -> dict:
"""Helper method that handles request for Ethplorer API [Source: https://ethplorer.io/]
@@ -152,6 +161,7 @@ def make_request(endpoint: str, address: Optional[str] = None, **kwargs: Any) ->
return response
@log_start_end(log=logger)
def get_token_decimals(address: str) -> Optional[int]:
"""Helper methods that gets token decimals number. [Source: Ethplorer]
@@ -171,6 +181,7 @@ def get_token_decimals(address: str) -> Optional[int]:
return None
@log_start_end(log=logger)
def get_address_info(address: str) -> pd.DataFrame:
"""Get info about tokens on you ethereum blockchain balance. Eth balance, balance of all tokens which
have name and symbol. [Source: Ethplorer]
@@ -237,6 +248,7 @@ def get_address_info(address: str) -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_top_tokens() -> pd.DataFrame:
"""Get top 50 tokens. [Source: Ethplorer]
@@ -265,6 +277,7 @@ def get_top_tokens() -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_top_token_holders(address) -> pd.DataFrame:
"""Get info about top token holders. [Source: Ethplorer]
@@ -288,6 +301,7 @@ def get_top_token_holders(address) -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_address_history(address) -> pd.DataFrame:
"""Get information about balance historical transactions. [Source: Ethplorer]
@@ -321,6 +335,7 @@ def get_address_history(address) -> pd.DataFrame:
return df[cols]
@log_start_end(log=logger)
def get_token_info(address) -> pd.DataFrame:
"""Get info about ERC20 token. [Source: Ethplorer]
@@ -382,6 +397,7 @@ def get_token_info(address) -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_tx_info(tx_hash) -> pd.DataFrame:
"""Get info about transaction. [Source: Ethplorer]
@@ -424,6 +440,7 @@ def get_tx_info(tx_hash) -> pd.DataFrame:
return df
@log_start_end(log=logger)
def get_token_history(address) -> pd.DataFrame:
"""Get info about token historical transactions. [Source: Ethplorer]
@@ -467,6 +484,7 @@ def get_token_history(address) -> pd.DataFrame:
return df[["timestamp", "name", "symbol", "value", "from", "to", "transactionHash"]]
@log_start_end(log=logger)
def get_token_historical_price(address) -> pd.DataFrame:
"""Get token historical prices with volume and market cap, and average price. [Source: Ethplorer]

View File

@@ -1,15 +1,21 @@
"""Ethplorer view"""
__docformat__ = "numpy"
import logging
import os
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.cryptocurrency.dataframe_helpers import (
very_long_number_formatter,
)
from gamestonk_terminal.cryptocurrency.onchain import ethplorer_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, print_rich_table
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_address_info(
address: str,
top: int = 15,
@@ -57,6 +63,7 @@ def display_address_info(
)
@log_start_end(log=logger)
def display_top_tokens(
top: int = 15,
sortby: str = "rank",
@@ -101,6 +108,7 @@ def display_top_tokens(
)
@log_start_end(log=logger)
def display_top_token_holders(
address: str,
top: int = 10,
@@ -145,6 +153,7 @@ def display_top_token_holders(
)
@log_start_end(log=logger)
def display_address_history(
address: str,
top: int = 10,
@@ -191,6 +200,7 @@ def display_address_history(
)
@log_start_end(log=logger)
def display_token_info(
address: str,
social: bool = False,
@@ -231,6 +241,7 @@ def display_token_info(
)
@log_start_end(log=logger)
def display_tx_info(
tx_hash: str,
export: str = "",
@@ -263,6 +274,7 @@ def display_tx_info(
)
@log_start_end(log=logger)
def display_token_history(
address: str,
top: int = 10,
@@ -319,6 +331,7 @@ def display_token_history(
)
@log_start_end(log=logger)
def display_token_historical_prices(
address: str,
top: int = 30,

View File

@@ -1,12 +1,18 @@
"""Whale Alert model"""
__docformat__ = "numpy"
from typing import Optional
import logging
import textwrap
import requests
import pandas as pd
from typing import Optional
import numpy as np
import pandas as pd
import requests
import gamestonk_terminal.config_terminal as cfg
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
FILTERS = [
"date",
@@ -22,14 +28,17 @@ FILTERS = [
class ApiKeyException(Exception):
"""Api Key Exception object"""
@log_start_end(log=logger)
def __init__(self, message: str):
super().__init__(message)
self.message = message
@log_start_end(log=logger)
def __str__(self) -> str:
return f"ApiKeyException: {self.message}"
@log_start_end(log=logger)
def make_request(params: Optional[dict] = None) -> dict:
"""Helper methods for requests [Source: https://docs.whale-alert.io/]
@@ -56,6 +65,7 @@ def make_request(params: Optional[dict] = None) -> dict:
raise ValueError(f"Invalid Response: {response.text}") from e
@log_start_end(log=logger)
def get_whales_transactions(min_value: int = 800000, limit: int = 100) -> pd.DataFrame:
"""Whale Alert's API allows you to retrieve live and historical transaction data from major blockchains.
Supported blockchain: Bitcoin, Ethereum, Ripple, NEO, EOS, Stellar and Tron. [Source: https://docs.whale-alert.io/]

View File

@@ -1,16 +1,22 @@
"""Whale Alert view"""
__docformat__ = "numpy"
import logging
import os
from gamestonk_terminal.cryptocurrency.onchain import whale_alert_model
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import (
export_data,
long_number_format,
print_rich_table,
)
from gamestonk_terminal.cryptocurrency.onchain import whale_alert_model
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_whales_transactions(
min_value: int = 800000,
top: int = 100,

View File

@@ -1,15 +1,21 @@
"""Blockchain Center Model"""
import json
import logging
from datetime import datetime
import pandas as pd
import requests
from bs4 import BeautifulSoup
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import get_user_agent
logger = logging.getLogger(__name__)
DAYS = [30, 90, 365]
@log_start_end(log=logger)
def get_altcoin_index(period: int, since: int, until: int) -> pd.DataFrame:
"""Get altcoin index overtime
[Source: https://blockchaincenter.net]

View File

@@ -1,16 +1,24 @@
"""Blockchain Center View"""
import logging
import os
from matplotlib import pyplot as plt, dates as mdates
from matplotlib import dates as mdates
from matplotlib import pyplot as plt
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal.cryptocurrency.overview.blockchaincenter_model import (
get_altcoin_index,
DAYS,
get_altcoin_index,
)
from gamestonk_terminal.decorators import log_start_end
from gamestonk_terminal.helper_funcs import export_data, plot_autoscale
from gamestonk_terminal import feature_flags as gtff
from gamestonk_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_altcoin_index(
period: int, since: int, until: int, export: str = ""
) -> None:

View File

@@ -1,10 +1,12 @@
"""Coinbase model"""
__docformat__ = "numpy"
import logging
import pandas as pd
from gamestonk_terminal.cryptocurrency.coinbase_helpers import (
make_coinbase_request,
)
from gamestonk_terminal.cryptocurrency.coinbase_helpers import make_coinbase_request
from gamestonk_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
PAIRS_FILTERS = [
"id",
@@ -18,6 +20,7 @@ PAIRS_FILTERS = [
]
@log_start_end(log=logger)
def get_trading_pairs() -> pd.DataFrame:
"""Get a list of available currency pairs for trading. [Source: Coinbase]

Some files were not shown because too many files have changed in this diff Show More