Beispiel #1
0
 def setUp(self):
     self.filename = "test_file"
     store = Storage("..\\testData\\")
     self.filepath = store.excel("test_file")
     self.xls = XLSio(store)
     self.xls.table = Mock()
     self.xls.table.to_excel = Mock()
Beispiel #2
0
def storeValuationSummaryBrief(tickers = None):
    store = Storage()
    if tickers is None:
        xls = XLSio(store)
        xls.loadWorkbook("StockSummary")
        xls.table = xls.table[xls.table["P/E Ratio (TTM)"].notnull()]
        tickers = xls.getTickers()
    summary = {}
    count = 1.0
    errors = {}
    print("Assessing " + str(len(tickers)) + " companies")
    for ticker in tickers:
        try:
            reporter = Reporter(ticker)
            summary[ticker] = reporter.oneLineValuation()
        except MissingStatementEntryError as E:
            errors[ticker] = E.message
        except InsufficientDataError as E:
            errors[ticker] = E.message
        except Exception as E:
            errors[ticker] = E.message
        if count % max(len(tickers) / 4, 1) == 0:
            pct_complete = round(100.0 * count / len(tickers))
            print(str(pct_complete) + "% complete")    
        count += 1
    
    index = summary.items()[0][1].index        
    summary = pandas.DataFrame(summary, index = index).T
    summary.to_excel(store.excel("ValuationSummary"))
    print(str(len(errors)) + " Failed")
    print(str(len(summary)) + " Succeeded")
    return errors
Beispiel #3
0
 def setUp(self):
     self.filename = "test_file"
     store = Storage("..\\testData\\")
     self.filepath = store.excel("test_file")
     self.xls = XLSio(store)
     self.xls.table = Mock()
     self.xls.table.to_excel = Mock()
Beispiel #4
0
class Test_Storage(unittest.TestCase):

    def setUp(self):
        self.root_location = "..\\testData\\"
        self.store = Storage(self.root_location)
        self.resource = Financials("ASX", "annual")

    def test_StorageLoadResource(self):
        self.resource.fromDict = Mock(return_value = self.resource)
        self.store.load_pickle = Mock(return_value = "saved_dict")

        loaded_resource = self.store.load(self.resource)

        self.resource.fromDict.assert_called_once_with("saved_dict")
        self.assertIs(loaded_resource, self.resource)

    def test_StorageLocationForFinancials(self):
        expected_folder = self.root_location + self.resource.ticker + "\\Financials"
        self.assertEqual(self.store.financials(self.resource), expected_folder)

    def test_StorageLocationForAnnualFinancials(self):
        expected_folder = self.root_location + self.resource.ticker + "\\Financials\\Annual"
        self.assertEqual(self.store.annualFinancials(self.resource), expected_folder)

    def test_StorageLocationForInterimFinancials(self):
        expected_folder = self.root_location + self.resource.ticker + "\\Financials\\Interim"
        self.assertEqual(self.store.interimFinancials(self.resource), expected_folder)
Beispiel #5
0
class Test_ScrapingOverviewData(unittest.TestCase):
    def setUp(self):
        self.ticker = "SRV"
        self.type = "overview"
        self.data_dir = "..\\testData\\"
        self.store = Storage(self.data_dir)
        self.expected = {
            "P/E Ratio (TTM)": 21.68,
            "EPS (TTM)": 0.34,
            "Market Cap": 698.87,
            "Shares Outstanding": 98.43,
            "Public Float": 43.03,
            "Yield": 3.01,
            "Latest Dividend": 0.11,
            "Ex-Dividend Date": "09/07/15"
        }
        self.scraper = WSJscraper(self.store)
        self.scraper.overview = BeautifulSoup(
            open(self.store.html(self.ticker, self.type)), "lxml")

    def test_RetrievesKeyStockDataTable(self):
        data = self.scraper.keyStockData()
        # scraper should return a dictionary
        self.assertIsInstance(data, dict)
        self.assertEqual(data.keys().sort(), self.expected.keys().sort())
        self.assertEqual(data, self.expected)
Beispiel #6
0
class Test_ScrapingOverviewData(unittest.TestCase):

    def setUp(self):
        self.ticker = "SRV"
        self.type = "overview"
        self.data_dir = "..\\testData\\"
        self.store = Storage(self.data_dir)
        self.expected = {"P/E Ratio (TTM)" : 21.68, 
                         "EPS (TTM)" : 0.34, 
                         "Market Cap" : 698.87, 
                         "Shares Outstanding" : 98.43, 
                         "Public Float" : 43.03, 
                         "Yield" : 3.01, 
                         "Latest Dividend" : 0.11, 
                         "Ex-Dividend Date" : "09/07/15"}
        self.scraper = WSJscraper(self.store)
        self.scraper.overview = BeautifulSoup(open(self.store.html(self.ticker, self.type)), "lxml")


    def test_RetrievesKeyStockDataTable(self):
        data = self.scraper.keyStockData()
        # scraper should return a dictionary
        self.assertIsInstance(data, dict)
        self.assertEqual(data.keys().sort(), self.expected.keys().sort())
        self.assertEqual(data, self.expected)
Beispiel #7
0
 def test_BuildsIncomeStatementAddress(self):
     scraper = WSJdownloader(Storage(""))
     for ticker in tickers:
         scraper_address = scraper.get_address(ticker, "income")
         expected_address = annual_income_statement.replace(
             "[ticker]", ticker)
         self.assertEqual(scraper_address, expected_address)
Beispiel #8
0
 def setUp(self):
     self.existing_tickers = ["1PG", "ONT", "1ST", "TGP", "TIX"]
     self.existing_headings = [
         "Company name", "ASX code", "GICS industry group"
     ]
     self.xls = XLSio(Storage("..\\testData\\"))
     self.xls.loadWorkbook("ASXListedCompanies")
Beispiel #9
0
def saveAnalysisToExcel(ticker):
    results = Reporter(ticker)
    store = Storage()
    writer = pandas.ExcelWriter(store.excel(ticker + "analysis"))
    results.summaryTable().to_excel(writer, "Summary")
    results.financials.income.income_sheet.to_excel(writer, "Income")
    assets = results.financials.balance.asset_sheet
    liabilities = results.financials.balance.liabilities
    assets.to_excel(writer, "Balance")
    liabilities.to_excel(writer, "Balance", startrow = len(assets) + 1)
    operating = results.financials.cashflow.operating
    investing = results.financials.cashflow.investing
    financing = results.financials.cashflow.financing
    operating.to_excel(writer, "Cashflow")
    investing.to_excel(writer, "Cashflow", startrow = len(operating) + 1)
    financing.to_excel(writer, "Cashflow", startrow = len(operating) + len(investing) + 2)
    writer.save()
Beispiel #10
0
 def setUp(self):
     self.ticker = "GNG"
     self.type = "balance"
     data_dir = "..\\testData\\"
     store = Storage(data_dir)
     self.assets = pandas.read_pickle(data_dir + "GNG\\GNGassets.pkl")
     self.liabilities = pandas.read_pickle(data_dir +
                                           "GNG\\GNGliabilities.pkl")
     self.scraper = WSJscraper(store)
Beispiel #11
0
 def setUp(self):
     self.ticker = "SRV"
     self.type = "overview"
     self.data_dir = "..\\testData\\"
     self.store = Storage(self.data_dir)
     self.expected = {
         "P/E Ratio (TTM)": 21.68,
         "EPS (TTM)": 0.34,
         "Market Cap": 698.87,
         "Shares Outstanding": 98.43,
         "Public Float": 43.03,
         "Yield": 3.01,
         "Latest Dividend": 0.11,
         "Ex-Dividend Date": "09/07/15"
     }
     self.scraper = WSJscraper(self.store)
     self.scraper.overview = BeautifulSoup(
         open(self.store.html(self.ticker, self.type)), "lxml")
Beispiel #12
0
class Test_Storage(unittest.TestCase):
    def setUp(self):
        self.root_location = "..\\testData\\"
        self.store = Storage(self.root_location)

    def test_StorageLocationForExcel(self):
        filename = "test"
        expected_filepath = self.root_location + filename + ".xlsx"
        self.assertEqual(self.store.excel(filename), expected_filepath)

    def test_StorageLocationForHTML(self):
        ticker = "AAA"
        type = "overview"
        expected_filepath = self.root_location + ticker + "\\" + ticker + type + ".html"
        self.assertEqual(self.store.html(ticker, type), expected_filepath)

    def test_StorageLocationForStockPickle(self):
        ticker = "AAA"
        type = "income"
        expected_filepath = self.root_location + ticker + "\\pickles\\" + type + ".pkl"
        self.assertEqual(self.store.stock_pickle(ticker, type),
                         expected_filepath)
Beispiel #13
0
class Test_Storage(unittest.TestCase):

    def setUp(self):
        self.root_location = "..\\testData\\"
        self.store = Storage(self.root_location)


    def test_StorageLocationForExcel(self):
        filename = "test"
        expected_filepath = self.root_location + filename + ".xlsx"
        self.assertEqual(self.store.excel(filename), expected_filepath)

    def test_StorageLocationForHTML(self):
        ticker = "AAA"
        type = "overview"
        expected_filepath = self.root_location + ticker + "\\" + ticker + type + ".html"
        self.assertEqual(self.store.html(ticker, type), expected_filepath)

    def test_StorageLocationForStockPickle(self):
        ticker = "AAA"
        type = "income"
        expected_filepath = self.root_location + ticker + "\\pickles\\" + type + ".pkl"
        self.assertEqual(self.store.stock_pickle(ticker, type), expected_filepath)
Beispiel #14
0
def retrieveOverviewData(storage_dir, headings = None):
    store = Storage(storage_dir)
    xls = XLSio(store)
    scraper = WSJscraper(store)
    xls.loadWorkbook("ASXListedCompanies")
    tickers = xls.getTickers()
    new_data = {}
    for ticker in tickers:
        scraper.load_overview(ticker)
        try:
            new_data[ticker] = scraper.keyStockData()
        except Exception:
            print("Problem with: " + ticker)
    xls.updateTable(new_data)
    xls.saveAs("StockSummary")
Beispiel #15
0
 def setUp(self):
     self.ticker = "SRV"
     self.type = "overview"
     self.data_dir = "..\\testData\\"
     self.store = Storage(self.data_dir)
     self.expected = {"P/E Ratio (TTM)" : 21.68, 
                      "EPS (TTM)" : 0.34, 
                      "Market Cap" : 698.87, 
                      "Shares Outstanding" : 98.43, 
                      "Public Float" : 43.03, 
                      "Yield" : 3.01, 
                      "Latest Dividend" : 0.11, 
                      "Ex-Dividend Date" : "09/07/15"}
     self.scraper = WSJscraper(self.store)
     self.scraper.overview = BeautifulSoup(open(self.store.html(self.ticker, self.type)), "lxml")
Beispiel #16
0
class Test_LoadingPages(unittest.TestCase):

    def setUp(self):
        self.ticker = "SRV"
        self.type = "overview"
        self.data_dir = "..\\testData\\"
        self.store = Storage(self.data_dir)
        self.scraper = WSJscraper(self.store)


    def test_StoresSoupObjectOnPageLoad(self):
        self.scraper.load_overview(self.ticker)
        expected = BeautifulSoup(open(self.store.html(self.ticker, "overview")), "lxml")
        self.assertIsInstance(self.scraper.overview, BeautifulSoup)
        self.assertEqual(self.scraper.overview.title, expected.title)

    def test_ChecksForValidYears(self):
        years = [u'2015', u' ', u'012', u'.3']
        self.assertRaises(InsufficientDataError, self.scraper.check_years, years = years)
        self.assertIsNone(self.scraper.check_years([u'2015', u'2014', u'2013']))
Beispiel #17
0
class Test_LoadingPages(unittest.TestCase):
    def setUp(self):
        self.ticker = "SRV"
        self.type = "overview"
        self.data_dir = "..\\testData\\"
        self.store = Storage(self.data_dir)
        self.scraper = WSJscraper(self.store)

    def test_StoresSoupObjectOnPageLoad(self):
        self.scraper.load_overview(self.ticker)
        expected = BeautifulSoup(
            open(self.store.html(self.ticker, "overview")), "lxml")
        self.assertIsInstance(self.scraper.overview, BeautifulSoup)
        self.assertEqual(self.scraper.overview.title, expected.title)

    def test_ChecksForValidYears(self):
        years = [u'2015', u' ', u'012', u'.3']
        self.assertRaises(InsufficientDataError,
                          self.scraper.check_years,
                          years=years)
        self.assertIsNone(self.scraper.check_years([u'2015', u'2014',
                                                    u'2013']))
Beispiel #18
0
 def test_BuildsFinancialsOverviewAddress(self):
     scraper = WSJdownloader(Storage(""))
     for ticker in tickers:
         scraper_address = scraper.get_address(ticker, "financials")
         expected_address = financials_overview.replace("[ticker]", ticker)
         self.assertEqual(scraper_address, expected_address)
Beispiel #19
0
 def setUp(self):
     self.ticker = "SRV"
     self.type = "overview"
     self.data_dir = "..\\testData\\"
     self.store = Storage(self.data_dir)
     self.scraper = WSJscraper(self.store)
Beispiel #20
0
 def test_BuildsCashFlowAddress(self):
     scraper = WSJdownloader(Storage(""))
     for ticker in tickers:
         scraper_address = scraper.get_address(ticker, "cashflow")
         expected_address = annual_cash_flow.replace("[ticker]", ticker)
         self.assertEqual(scraper_address, expected_address)
Beispiel #21
0
 def test_BuildsBalanceSheetAddress(self):
     scraper = WSJdownloader(Storage(""))
     for ticker in tickers:
         scraper_address = scraper.get_address(ticker, "balance")
         expected_address = annual_balance_sheet.replace("[ticker]", ticker)
         self.assertEqual(scraper_address, expected_address)
Beispiel #22
0
 def setUp(self):
     self.root_location = "..\\testData\\"
     self.store = Storage(self.root_location)
Beispiel #23
0
 def test_FinancialsCallsAppropriateFolder(self):
     store = Storage()
     store.financials = Mock()
     self.financials.selectFolder(store)
     store.financials.assert_called_once_with(self.financials)
Beispiel #24
0
def buildFinancialAnalyst(ticker, storage_dir = "D:\\Investing\\Data"):
    resource = StockFinancialsResource(Storage(storage_dir))
    income = IncomeStatement(resource.getFinancials(ticker, "income"))
    balance = BalanceSheet(resource.getFinancials(ticker, "assets"), resource.getFinancials(ticker, "liabilities"))
    cashflow = CashflowStatement(resource.getFinancials(ticker, "operating"), resource.getFinancials(ticker, "investing"), resource.getFinancials(ticker, "financing"))
    return FinanceAnalyst(income, balance, cashflow)
Beispiel #25
0
 def setUp(self):
     self.root_location = "..\\testData\\"
     self.store = Storage(self.root_location)
     self.resource = Financials("ASX", "annual")
Beispiel #26
0
def buildPriceAnalyser(ticker, storage_dir = "D:\\Investing\\Data"):
    store = Storage(storage_dir)
    prices = pandas.read_pickle(store.yahoo(ticker))
    return PriceAnalyser(prices) 
Beispiel #27
0
 def setUp(self):
     self.root_location = "..\\testData\\"
     self.store = Storage(self.root_location)
Beispiel #28
0
 def setUp(self):
     self.ticker = "SRV"
     self.type = "overview"
     self.data_dir = "..\\testData\\"
     self.store = Storage(self.data_dir)
     self.scraper = WSJscraper(self.store)