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")
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()