Search code examples
pythonpandasfinanceyahoo-financeyfinance

yfinance ignores start date and end date


import yfinance as yf
import pandas as pd

tickers = ['AAPL','NVDA','MSFT']
b_date = '2010-01-01'
e_date = '2020-12-31'
stock_data = yf.download(tickers,b_date,e_date)
print(stock_data)

I set my start date and end date as 2010-01-01 and 2020-12-31, but why the result only shows data from 2010-01-04 to 2020-12-30?

[*********************100%%**********************]  3 of 3 completed
             Adj Close                          ...     Volume                    
                  AAPL        MSFT        NVDA  ...       AAPL      MSFT      NVDA
Date                                            ...                               
2010-01-04    6.487534   23.522572    4.240801  ...  493729600  38409100  80020400
2010-01-05    6.498749   23.530165    4.302728  ...  601904800  49749600  72864800
2010-01-06    6.395379   23.385765    4.330251  ...  552160000  58182400  64916800
2010-01-07    6.383555   23.142555    4.245389  ...  477131200  50559700  54779200
2010-01-08    6.425995   23.302160    4.254561  ...  447610800  51197400  47816800
...                ...         ...         ...  ...        ...       ...       ...
2020-12-23  128.856812  215.676376  129.811371  ...   88223700  18699600  17914400
2020-12-24  129.850571  217.364548  129.656723  ...   54930100  10550600   9788400
2020-12-28  134.494797  219.521133  128.721237  ...  124486200  17933500  21256400
2020-12-29  132.704025  218.730698  129.152817  ...  121047300  17403200  17037200
2020-12-30  131.572495  216.320389  131.173416  ...   96452100  20272300  22539600

[2768 rows x 18 columns]

It does not make any sense to me because 2010-01-01 is Wednesday and 2020-12-31 is Thursday.

How to fix?

yifnance 0.2.28 pandas 2.0.3


Solution

  • It does not make any sense to me because 2010-01-01 is Wednesday and 2020-12-31 is Thursday.

    Are you really sure?

    >>> pd.Timestamp('2010-01-01').strftime('%A')  # New year, stock market is closed
    'Friday'
    
    >>> pd.Timestamp('2010-01-02').strftime('%A')  # Weekend, stock market is closed
    'Saturday'
    
    >>> pd.Timestamp('2010-01-03').strftime('%A')  # Weekend, stock market is closed
    'Sunday'
    
    >>> pd.Timestamp('2010-01-04').strftime('%A')  # Monday, stock market is open
    'Monday'
    

    The last day is not inclusive. If you want this day, your end date should be '2021-01-01':

    tickers = ['AAPL','NVDA','MSFT']
    b_date = '2010-01-01'
    e_date = '2021-01-01'
    stock_data = yf.download(tickers,b_date,e_date)
    print(stock_data)
    
    # Output
                 Adj Close                               Close  ...        Open     Volume                    
                      AAPL        MSFT        NVDA        AAPL  ...        NVDA       AAPL      MSFT      NVDA
    Date                                                        ...                                           
    2010-01-04    6.487533   23.522570    4.240801    7.643214  ...    4.627500  493729600  38409100  80020400
    2010-01-05    6.498750   23.530159    4.302727    7.656429  ...    4.605000  601904800  49749600  72864800
    2010-01-06    6.395379   23.385761    4.330251    7.534643  ...    4.687500  552160000  58182400  64916800
    2010-01-07    6.383558   23.142561    4.245389    7.520714  ...    4.695000  477131200  50559700  54779200
    2010-01-08    6.425996   23.302160    4.254562    7.570714  ...    4.590000  447610800  51197400  47816800
    ...                ...         ...         ...         ...  ...         ...        ...       ...       ...
    2020-12-24  129.850601  217.364532  129.656708  131.970001  ...  130.372498   54930100  10550600   9788400
    2020-12-28  134.494781  219.521133  128.721252  136.690002  ...  130.625000  124486200  17933500  21256400
    2020-12-29  132.703995  218.730728  129.152802  134.869995  ...  129.250000  121047300  17403200  17037200
    2020-12-30  131.572464  216.320419  131.173431  133.720001  ...  129.902496   96452100  20272300  22539600
    2020-12-31  130.559021  217.042542  130.267868  132.690002  ...  131.365005   99116600  20942100  19242400
    
    [2769 rows x 18 columns]