Ejemplo n.º 1
0
def get_YahooFinancials(ticker, d1, d2, dividend=True):
    di = {'formatted_date': 'date', 'open': 'price', 'amount': 'dividend'}
    # (1) Get price data
    cn_price = ['formatted_date', 'open']
    stock = YahooFinancials(ticker)
    price = stock.get_historical_price_data(d1, d2, 'daily')[ticker]
    price = pd.DataFrame(price['prices'])[cn_price]
    price = price.rename(columns=di).assign(ticker=ticker)
    price.date = pd.to_datetime(price.date)
    price = add_date_int(price)  #.drop(columns=['day','date'])
    price = price.query('day == 1').reset_index(None, True).drop(columns='day')
    assert not (price.year + price.month / 100).duplicated().any()
    assert price.price.notnull().all()
    # (2) Get dividend data
    if dividend:
        cn_dividend = ['formatted_date', 'amount']
        dividend = stock.get_daily_dividend_data(d1, d2)[ticker]
        dividend = pd.DataFrame(dividend)[cn_dividend]
        dividend.rename(columns=di, inplace=True)
        dividend.date = pd.to_datetime(dividend.date)
        dividend = add_date_int(dividend)
        dividend = dividend.groupby(['year',
                                     'month']).dividend.sum().reset_index()
        price = price.merge(dividend, 'left', ['year', 'month'])  # merge
    return price
Ejemplo n.º 2
0
    def _get_dividends(self, symbols):
        start_date = '2019-01-15'
        d = datetime.datetime.today()
        end_date = d.strftime("%Y-%m-%d")
        yahoo_financials = YahooFinancials(symbols)
        logging.info(
            f"[_get_dividends] Getting dividends from Yahoo {start_date} to {end_date} for {symbols}"
        )
        divs = yahoo_financials.get_daily_dividend_data(start_date, end_date)
        logging.info(f"[_get_dividends] Done")

        return divs
Ejemplo n.º 3
0
 def _DownloadDividendsCSVFromYahooFinance(self, symbols: List[Text]) -> List[Optional[Text]]:
   csv_data = []
   today = datetime.datetime.now().strftime("%Y-%m-%d")
   all_assets = YahooFinancials(symbols)
   all_dividends = all_assets.get_daily_dividend_data(
       start_date=config.DEFAULT_MIN_DATE, end_date=today)
   for symbol in symbols:
     dividends = all_dividends[symbol]
     if dividends is None:
       csv_data.append(None)
       continue
     lines = ['Date,Amount']  # Header
     for e in dividends:
       if e['amount'] is None:
         continue
       lines.append(f'{e["formatted_date"]},{e["amount"]}')
     lines.append('')  # This will add a last line break.
     csv_data.append("\n".join(lines))
   return csv_data
Ejemplo n.º 4
0
class TestModule(TestCase):
    def setUp(self):
        self.test_yf_stock_single = YahooFinancials('C')
        self.test_yf_stock_multi = YahooFinancials(stocks)
        self.test_yf_treasuries_single = YahooFinancials('^IRX')
        self.test_yf_treasuries_multi = YahooFinancials(us_treasuries)
        self.test_yf_currencies = YahooFinancials(currencies)

    # Fundamentals Test
    def test_yf_fundamentals(self):
        # Single stock test
        single_balance_sheet_data_qt = self.test_yf_stock_single.get_financial_stmts(
            'quarterly', 'balance')
        single_income_statement_data_qt = self.test_yf_stock_single.get_financial_stmts(
            'quarterly', 'income')
        single_all_statement_data_qt = self.test_yf_stock_single.get_financial_stmts(
            'quarterly', ['income', 'cash', 'balance'])
        # Multi stock test
        multi_balance_sheet_data_qt = self.test_yf_stock_multi.get_financial_stmts(
            'quarterly', 'balance')
        multi_income_statement_data_qt = self.test_yf_stock_multi.get_financial_stmts(
            'quarterly', 'income')
        multi_all_statement_data_qt = self.test_yf_stock_multi.get_financial_stmts(
            'quarterly', ['income', 'cash', 'balance'])
        # Single stock check
        result = check_fundamental(single_balance_sheet_data_qt, 'bal')
        self.assertEqual(result, True)
        result = check_fundamental(single_income_statement_data_qt, 'inc')
        self.assertEqual(result, True)
        result = check_fundamental(single_all_statement_data_qt, 'all')
        self.assertEqual(result, True)

        # Multi stock check
        result = check_fundamental(multi_balance_sheet_data_qt, 'bal')
        self.assertEqual(result, True)
        result = check_fundamental(multi_income_statement_data_qt, 'inc')
        self.assertEqual(result, True)
        result = check_fundamental(multi_all_statement_data_qt, 'all')
        self.assertEqual(result, True)

    # Historical Price Test
    def test_yf_historical_price(self):
        single_stock_prices = self.test_yf_stock_single.get_historical_price_data(
            '2015-01-15', '2017-10-15', 'weekly')
        expect_dict = {
            'high': 49.099998474121094,
            'volume': 125737200,
            'formatted_date': '2015-01-12',
            'low': 46.599998474121094,
            'adjclose': 45.35684585571289,
            'date': 1421038800,
            'close': 47.61000061035156,
            'open': 48.959999084472656
        }
        self.assertDictEqual(single_stock_prices['C']['prices'][0],
                             expect_dict)

    # Historical Stock Daily Dividend Test
    def test_yf_dividend_price(self):
        single_stock_dividend = self.test_yf_stock_single.get_daily_dividend_data(
            '1986-09-15', '1987-09-15')
        expect_dict = {
            "C": [{
                "date": 533313000,
                "formatted_date": "1986-11-25",
                "amount": 0.02999
            }, {
                "date": 541348200,
                "formatted_date": "1987-02-26",
                "amount": 0.02999
            }, {
                "date": 544714200,
                "formatted_date": "1987-04-06",
                "amount": 0.332
            }, {
                "date": 549120600,
                "formatted_date": "1987-05-27",
                "amount": 0.02999
            }, {
                "date": 552576600,
                "formatted_date": "1987-07-06",
                "amount": 0.332
            }, {
                "date": 557501400,
                "formatted_date": "1987-09-01",
                "amount": 0.02999
            }]
        }
        self.assertDictEqual(single_stock_dividend, expect_dict)

    # Extra Module Methods Test
    def test_yf_module_methods(self):
        # Stocks
        if isinstance(self.test_yf_stock_single.get_current_price(), float):
            self.assertEqual(True, True)
        else:
            self.assertEqual(False, True)
        if isinstance(self.test_yf_stock_single.get_net_income(), int):
            self.assertEqual(True, True)
        else:
            self.assertEqual(False, True)
        # Treasuries
        if isinstance(self.test_yf_treasuries_single.get_current_price(),
                      float):
            self.assertEqual(True, True)
        else:
            self.assertEqual(False, True)
Ejemplo n.º 5
0
import datetime
from yahoofinancials import YahooFinancials

shares = YahooFinancials("2318.HK")
data = shares.get_daily_dividend_data("2018-01-01", "2018-12-31")
print(data)