コード例 #1
0
 def test_two_equity_data_objects_not_equal(self):
     d1 = EquityData(open=10,
                     high=15.5,
                     low=9.1,
                     close=12.33,
                     adj_close=12.33,
                     volume=32000)
     d2 = EquityData(open=1,
                     high=5.5,
                     low=0.1,
                     close=1.28,
                     adj_close=1.28,
                     volume=2240)
     self.assertNotEqual(d1, d2)
コード例 #2
0
    def scrape_eq_multiple_dates(self, ticker, date_list):
        if date_list is None or len(date_list) == 0:
            raise EmptyDateListError(ticker)

        clean_date_list = [Scraper._normalise_datetime(dt) for dt in date_list]
        page = Scraper._get_web_page(ticker)
        data_table = Scraper._get_hist_price_data_table(page, ticker)

        data = {}
        for row in data_table.children:
            values = [
                col.next_element.text for col in row.children
                if col.find('span')
            ]

            dt = datetime.datetime.strptime(values[0], '%b %d, %Y')
            values[0] = dt.date()
            if values[0] in clean_date_list:
                d = EquityData(*(v.replace(',', '') for v in values[1:]))
                data[values[0]] = (values[0], d)

            if len(data) == len(date_list):
                break

        # NOTE(steve): we need to order the data based on the
        # order provided in the input date list
        ordered_data = []
        errors = []
        for date in clean_date_list:
            if date in data:
                ordered_data.append(data[date])
            else:
                errors.append(InvalidDateError(date))

        return ordered_data, errors
コード例 #3
0
 def test_all_fields_price_fields_are_decimals(self):
     d = EquityData()
     self.assertIsInstance(d.open, Decimal)
     self.assertIsInstance(d.high, Decimal)
     self.assertIsInstance(d.low, Decimal)
     self.assertIsInstance(d.close, Decimal)
     self.assertIsInstance(d.adj_close, Decimal)
コード例 #4
0
 def test_defaults_fields_to_zero(self):
     d = EquityData()
     self.assertEqual(d.open, 0)
     self.assertEqual(d.high, 0)
     self.assertEqual(d.low, 0)
     self.assertEqual(d.close, 0)
     self.assertEqual(d.adj_close, 0)
     self.assertEqual(d.volume, 0)
コード例 #5
0
ファイル: utils.py プロジェクト: jeckt/market_data
def get_expected_equity_data():
    ticker = 'AMZN'
    dt = datetime.datetime(2019, 5, 10)
    expected_data = EquityData()
    expected_data.open = Decimal('1898.00')
    expected_data.high = Decimal('1903.79')
    expected_data.low = Decimal('1856.00')
    expected_data.close = Decimal('1889.98')
    expected_data.adj_close = Decimal('1889.98')
    expected_data.volume = int(5718000)
    return ticker, dt, expected_data
コード例 #6
0
ファイル: utils.py プロジェクト: jeckt/market_data
def get_test_data(test_data, ticker, dt):
    data = test_data[ticker]
    date_string = dt.strftime('%d-%b-%Y')
    equity_data = EquityData(open=data[date_string]["open"],
                             high=data[date_string]["high"],
                             low=data[date_string]["low"],
                             close=data[date_string]["close"],
                             adj_close=data[date_string]["adj_close"],
                             volume=data[date_string]["volume"])
    return equity_data
コード例 #7
0
    def get_equity_data(self, security, date):
        self._check_is_valid_security(security)

        ticker_id = self._get_security_id(security)

        rows = self._get_equity_data(ticker_id, date)
        if len(rows) == 0:
            raise InvalidDateError(date)
        elif len(rows) == 1:
            data = EquityData(*rows[0])
            return data
コード例 #8
0
    def get_equity_data_series(self, security):
        self._check_is_valid_security(security)

        ticker_id = self._get_security_id(security)

        with self._conn:
            sql = """SELECT date, open, high, low, close, adj_close, volume
                        FROM equity_prices WHERE (ticker_id = ?)"""

            cursor = self._conn.cursor()
            cursor.execute(sql, (ticker_id, ))
            rows = cursor.fetchall()

            data = [(row[0], EquityData(*row[1:])) for row in rows]

            return sorted(data, reverse=True)
コード例 #9
0
    def scrape_equity_data(self, ticker, date):
        date_only = Scraper._normalise_datetime(date)
        page = Scraper._get_web_page(ticker)
        data_table = Scraper._get_hist_price_data_table(page, ticker)

        for row in data_table.children:
            values = [
                col.next_element.text for col in row.children
                if col.find('span')
            ]

            dt = datetime.datetime.strptime(values[0], '%b %d, %Y')
            values[0] = dt.date()
            if values[0] == date_only:
                d = EquityData(*(v.replace(',', '') for v in values[1:]))
                return d

        raise InvalidDateError(f'{ticker}: {date}')
コード例 #10
0
    def _from_dict(cls, dict_data):
        data = cls()

        data.securities = dict_data['securities']
        data.equity_data = {}
        for sec in data.securities:
            if sec in dict_data:
                data.equity_data[sec] = {}
                for dt, equity_data in dict_data[sec].items():
                    data.equity_data[sec][dt] = EquityData(
                        open=equity_data['open'],
                        high=equity_data['high'],
                        low=equity_data['low'],
                        close=equity_data['close'],
                        adj_close=equity_data['adj_close'],
                        volume=equity_data['volume'])

        return data
コード例 #11
0
 def test_volume_field_is_an_integer(self):
     d = EquityData(volume=400.5)
     self.assertIsInstance(d.volume, int)