def from_archive(cls, symbol, *args, **kwargs): """ Returns an object that is capable of calculating various metrics of the stock, with data loaded from archive. symbol: e.g. "C6L.SI" Any extra arguments will be passed on to the constructor. """ kwargs.update({ "historical": load_fundamental_data("price", symbol), "balance_sheet": load_fundamental_data("balance_sheet", symbol), "income_statement": load_fundamental_data("income_statement", symbol), "cash_flow": load_fundamental_data("cash_flow", symbol), }) return cls(*args, **kwargs)
def test_load_fundamental_data_select_columns(self): mock_get_numerical_column_names = MagicMock(return_value=("Open", "High", "Low", "Close", "Volume", "Adj Close")) mock_get_fundamentals = MagicMock(return_value=[ (datetime(2012, 12, 20), 6860, 100.4), (datetime(2012, 12, 21), 7850, 99.9), (datetime(2012, 12, 22), 3870, 32.6), ]) with patch("fa.analysis.io.get_numerical_column_names", mock_get_numerical_column_names), \ patch("fa.analysis.io.get_fundamentals", mock_get_fundamentals): df = io.load_fundamental_data("price", "C6L.SI", ["Volume", "Adj Close"]) expected = pd.DataFrame( [[6860, 100.4], [7850, 99.9], [3870, 32.6]], index=pd.to_datetime(["2012-12-20", "2012-12-21", "2012-12-22"]), columns=["Volume", "Adj Close"] ) expected.index.name = "Date" self.assertFrameEqual(df, expected)
total_gain = capital_gain + total_dividend_payout total_return = total_gain / total_amount_invested print("total return = {0:.0f}% after {1:.1f} years.".format(total_return * 100, cash_flow_period + 1)) dividend_payout_proportion = total_dividend_payout / total_gain print("dividend payout comprises {0:.0f}%".format(dividend_payout_proportion * 100)) all_return = ((units_bought * sell_price + dividend_payout) / amount_invested - 1).replace(np.inf, np.nan) annual_return = all_return / hold_period_years print("average annual return = {0:.1f}%".format(annual_return.mean() * 100)) if __name__ == "__main__": symbol = "^STI" historical_data = load_fundamental_data("price", symbol) price = historical_data["Close"] return_in_1yr = calc_future_return(price, 365) valuation = return_in_1yr.map(get_valuation) valuation.index.name = "Date" valuation.name = "Valuation" # main working dataset for the study dataset = pd.concat([price, valuation], axis=1).dropna() # with open("output.csv", 'w') as f: # dataset.to_csv(f) # one year after the last investment sell_date = price.index[-1]