def test_download_csv_warn_1(): d = d_warn_csv[1] with pytest.warns(UserWarning): data = download(**d) print(data.head()) isinstance(data, pd.DataFrame)
def test_portfolio_yfinance_pass_1(): d = d_pass_yfinance[0] data = download(**d) data = clean_data(data) pf = Portfolio(data=data, risk_free_rate=0.001, freq=252) pf.mc_simulation() pf.plot_mc_simulation() pf.print_mc_results()
def test_portfolio_moex_pass_0(): d = d_pass_moex[0] data = download(**d) data = clean_data(data) pf = Portfolio(data=data) pf.mc_simulation() pf.plot_mc_simulation() pf.print_mc_results()
def test_download_moex_pass_4(): d = d_pass_moex[4] data = download(**d) print(data.head()) isinstance(data, pd.DataFrame) data = clean_data(data) tickers = data.columns.tolist() print(tickers) assert sorted(tickers) == sorted(tickers_pass_moex[4])
def test_download_moex_pass_3(): d = d_pass_moex[3] data = download(**d) print(data.head()) isinstance(data, pd.DataFrame)
def test_download_yfinance_pass_1(): d = d_pass_yfinance[1] data = download(**d) print(data.head()) isinstance(data, pd.DataFrame)
def test_download_csv_pass_0(): d = d_pass_csv[0] data = download(**d) print(data.head()) isinstance(data, pd.DataFrame)
import pandas as pd from pfo.stocks.cluster import cluster_stocks from pfo.stocks.stock import Stock from pathlib import Path, WindowsPath from pfo.utils.market_data import download, Source from pfo.utils.data_utils import clean_data path = (Path.cwd() / ".." / "cache" / "moex_all.csv").resolve() data = download( Source.MOEX, tickers=[], boards=[ { "board": "TQBR", "shares": "shares" }, { "board": "TQTF", "shares": "shares" }, { "board": "FQBR", "shares": "foreignshares" }, ], ) data = clean_data(data) data.to_csv(path)
import datetime import matplotlib.pyplot as plt from pfo.pf.portfolio import Portfolio import numpy as np from pfo.utils.market_data import download, Source from pfo.utils.data_utils import clean_data start_date = datetime.datetime(2019, 1, 1) end_date = "2020-11-20" tickers = [ "GM", "WMT", "NVDA", "TSLA", "GE", "AAL", "AMD", "ADBE", "AMZN", ] data = download( source=Source.YFINANCE, tickers=tickers, start_date=start_date, end_date=end_date ) data = clean_data(data) pf = Portfolio(data=data, risk_free_rate=0.001, freq=252) pf.discrete_allocation()
from pfo.stocks.stock import Stock pd.set_option("display.max_rows", None) pd.set_option("display.max_columns", None) pd.set_option("display.width", None) pd.set_option("display.max_colwidth", None) pd.set_option("display.width", 150) start_date = datetime.datetime(2020, 8, 27) end_date = datetime.datetime(2020, 11, 27) data = download( source=Source.MOEX, tickers=["AFKS", "APTK", "LNZL", "MAGEP", "MRKS", "PLZL", "ROLO", "SELG"], board={ "board": "TQBR", "shares": "shares" }, start_date=start_date, end_date=end_date, ) data = clean_data(data) pf_stocks = [] for ticker in data.columns: stk = Stock(ticker=ticker, data=data) stk.plot_prices() stk.plot_daily_returns() pf_stocks.append(ticker) pf1 = Portfolio(data=data, risk_free_rate=0.01, freq=252) pf1.mc_simulation(10000)
import datetime import matplotlib.pyplot as plt import pandas as pd from pfo.stocks.cluster import cluster_stocks from pfo.stocks.stock import Stock from pfo.utils.market_data import download, Source from pfo.utils.data_utils import clean_data start_date = datetime.datetime(2018, 11, 20) end_date = datetime.datetime(2020, 11, 20) data = download(source=Source.MOEX, tickers=[], boards=[{ "board": "TQBR", "shares": "shares" }]) data = clean_data(data) data = data[start_date:end_date] isnull = data.isnull().sum() for ticker in data.columns: try: if isnull[ticker] > 50: data.drop(ticker, axis=1, inplace=True) except: pass pf_stocks = [] for ticker in data.columns: stk = Stock(ticker=ticker, data=data) if stk.sharp >= 1.0 or stk.sortino >= 1.0:
def test_cluster_stocks_pass_0(): d = d_pass_csv[0] data = download(**d) data = clean_data(data) data.dropna(how="all").replace([np.inf, -np.inf], np.nan) cluster_stocks(data, n_clusters=4, verbose=True)