def monthly_returns(report_name: str, months: int) -> pd.DataFrame: """Необходимое количество месяцев для анализа.""" df = pdf_middle.portfolio_cum_return( pdf.read_data(report_name).iloc[-months - 1:]) df = pd.concat([df, pdf_middle.index_cum_return(df)], axis=1).pct_change().dropna() df.columns = ["Portfolio", "MOEX"] return df
def get_investor_data(file_name: str, investor_name: str) -> pd.DataFrame: """Формирует DataFrame с вкладами, стоимостью активов и дивидендами инвестора.""" df = pdf.read_data(file_name) value_column = "Value_" + investor_name investor_share = df[value_column] / df["Value"] df["Dividends"] = df["Dividends"] * investor_share df = df[[investor_name, value_column, "Dividends"]] df.columns = ["Inflow", "Value", "Dividends"] return df
def test_report_new_month(): port = portfolio.Portfolio(date=DATE_NEW, cash=CASH, positions=POSITIONS) pdf.report("test", port, dict(WLMike=10000, Igor=-5000), 4321) df = pdf.read_data("test") date = port.date assert df.index[-1] == date assert df.loc[date, "WLMike"] == pytest.approx(10000) assert df.loc[date, "Igor"] == pytest.approx(-5000) assert df.loc[date, "Value_WLMike"] == pytest.approx(387_550.829_708_377) assert df.loc[date, "Value_Igor"] == pytest.approx(4972.170_292) assert df.loc[date, "Value"] == pytest.approx(392_523) assert df.loc[date, "Dividends"] == pytest.approx(4321)
def test_update_data(): port = portfolio.Portfolio(date=DATE_NEW, cash=CASH, positions=POSITIONS) pdf.update_data("test", port.date, port.value[PORTFOLIO], dict(WLMike=1000, Igor=-2000), 1234) df = pdf.read_data("test") assert df.shape == (241, 6) assert df.index[-1] == pd.Timestamp("2018-05-07") assert df.loc["2018-05-07", "WLMike"] == pytest.approx(1000) assert df.loc["2018-05-07", "Igor"] == pytest.approx(-2000) assert df.loc["2018-05-07", "Value_WLMike"] == pytest.approx(384_396.431_074_62) assert df.loc["2018-05-07", "Value_Igor"] == pytest.approx(8126.568_925_380_33) assert df.loc["2018-05-07", "Value"] == pytest.approx(392_523) assert df.loc["2018-05-07", "Dividends"] == pytest.approx(1234)
def test_read_data(): df = pdf.read_data("test") assert df.shape == (240, 6) assert df.index[0] == pd.Timestamp("2008-02-21") assert df.index[-1] == pd.Timestamp("2018-04-19") assert df.loc["2018-04-19", "Value"] == pytest.approx(392_261.78)