class PortfolioCreatorTestCase(unittest.TestCase): def setUp(self): self.portfolio = PortfolioCreator().create(MockDataSource()) def test_it_creates_a_portfolio(self): self.assertAlmostEqual(self.portfolio.total_value(), -1019.34) self.assertEqual(self.portfolio.percentages(), {"CASHX": 1.0}) self.assertEqual( self.portfolio.asset_classes(), { 'Annuities': 0.0, 'Cash Equivalents': 1.0, 'Commodities': 0.0, 'Equities': 0.0, 'Fixed Assets': 0.0, 'Fixed Income': 0.0, 'Real Estate': 0.0 }) def test_it_assigns_the_correct_names_to_the_accounts(self): accounts = self.portfolio.accounts first_account = accounts[0] self.assertEqual(first_account.name(), "Checking") second_account = accounts[1] self.assertEqual(second_account.name(), "Credit Card") third_account = accounts[2] self.assertEqual(third_account.name(), "Credit Card") def test_it_assigns_the_correct_update_frequencies_to_the_accounts(self): accounts = self.portfolio.accounts first_account = accounts[0] self.assertEqual(first_account.update_frequency(), 12) second_account = accounts[1] self.assertEqual(second_account.update_frequency(), 22) third_account = accounts[2] self.assertEqual(third_account.update_frequency(), 195) def test_it_assigns_the_correct_open_dates_to_the_accounts(self): accounts = self.portfolio.accounts first_account = accounts[0] self.assertEqual(first_account.open_date(), None) second_account = accounts[1] self.assertEqual(second_account.open_date(), "2000-11-12") third_account = accounts[2] self.assertEqual(third_account.open_date(), "2017-1-1") def test_it_assigns_the_correct_terms_to_the_accounts(self): accounts = self.portfolio.accounts first_account = accounts[0] self.assertEqual(first_account.term(), "none") second_account = accounts[1] self.assertEqual(second_account.term(), "medium") third_account = accounts[2] self.assertEqual(third_account.term(), "none")
def update_frequency(): global portfolio request_body = UpdateFrequencyFormatter().format(request.form.to_dict()) json_body = json.dumps(request_body) requests.post(Constants.DATA_URL + "/update_frequency", data=json_body) portfolio = PortfolioCreator().create(DataSource()) return redirect("/accounts", code=302)
def append_snapshot(): global portfolio request_body = AppendSnapshotFormatter(EpochDateConverter()).format( request.form.to_dict()) json_body = json.dumps(request_body) requests.post(Constants.DATA_URL + "/append_snapshot", data=json_body) portfolio = PortfolioCreator().create(DataSource()) return redirect("/accounts", code=302)
def setUp(self): self.portfolio = PortfolioCreator().create(MockDataSource())
import csv import matplotlib.pyplot as plt from portfolio_creator.portfolio_creator import PortfolioCreator from portfolio_creator.data_source import DataSource from utilities.presenter import Presenter portfolio = PortfolioCreator().create(DataSource()) unsorted_data = portfolio.percentages() percentages = {} sorted_names = sorted(unsorted_data, key=unsorted_data.__getitem__) for k in sorted_names: percentages[k] = unsorted_data[k] with open("percentages.csv", 'w', newline='') as csvfile: writer = csv.writer(csvfile, delimiter=',') writer.writerow(['Symbol', 'Weight']) for symbol, percentage in percentages.items(): writer.writerow([symbol, Presenter.decimal_as_percentage(percentage)]) plt.bar(range(len(percentages)), percentages.values(), align='center') plt.xticks(range(len(percentages)), percentages.keys(), rotation=90) plt.ylabel('Weight (% of Portfolio)') plt.title('Asset Weights') plt.show()
import matplotlib.pyplot as plt from portfolio_creator.data_source import DataSource from portfolio_creator.portfolio_creator import PortfolioCreator portfolio = PortfolioCreator().create(DataSource()) unsorted_data = portfolio.asset_classes() asset_classes = {} sorted_names = sorted(unsorted_data, key=unsorted_data.__getitem__) for k in sorted_names: asset_classes[k] = unsorted_data[k] plt.bar(range(len(asset_classes)), asset_classes.values(), align='center') plt.xticks(range(len(asset_classes)), asset_classes.keys()) plt.ylabel('Weight (% of Portfolio)') plt.title('Asset Class Weights') plt.show()
from pylab import plot, xlabel, ylabel, title, show from portfolio_creator.data_source import DataSource from portfolio_creator.portfolio_creator import PortfolioCreator from report.line_graph import LineGraph from utilities.epoch_date_converter import EpochDateConverter portfolio = PortfolioCreator().create(DataSource()) data = LineGraph(portfolio).net_worth_vs_time( "2003-01-01", EpochDateConverter().epoch_to_date()) plot(data["times"], data["values"]) xlabel('Date') ylabel("Owner's Equity") title("Owner's Equity vs. Time") show()
import datetime from portfolio_analysis.portfolio_analyzer import PortfolioAnalyzer from portfolio_creator.data_source import DataSource from portfolio_creator.portfolio_creator import PortfolioCreator from pylab import plot, xlabel, ylabel, title, show from utilities.constants import Constants from utilities.epoch_date_converter import EpochDateConverter portfolio = PortfolioCreator().create(DataSource()) analyzer = PortfolioAnalyzer(portfolio) number_of_days = round(Constants.DAYS_PER_YEAR) times = [] debt = [] for day in range(0, number_of_days): historical_time = EpochDateConverter().date_to_epoch( ) - day * Constants.SECONDS_PER_DAY formatted_date = EpochDateConverter().epoch_to_date(historical_time) times.append(datetime.datetime.fromtimestamp(historical_time)) debt.append(portfolio.liabilities_without_mortgage(formatted_date)) plot(times, debt) xlabel('Date') ylabel("Debt") title("Debt vs. Time") show()