In my use of the InvestPy package, I am able to get stock ticker data easily, using the in-built function ‘get_stock_historical_data’. But not having the same luck in trying to get Index data of Nifty50, for example. A quick look at all the Indian tickers available from the function <investpy.get_stocks(country=’india’)> reveals nothing related to the Index.
Is their a way to get it using the package? My alternative is web-scraping stuff for index. Couldn’t find any thing relevant in the official documentation here.
Advertisement
Answer
There are a few methods that investpy
has implemented to gather information regarding indices. Unfortunately, I could not find any function that returns the performances of each individual member of the index, but you can, for example, get the historical data regarding an index:
df = investpy.get_index_historical_data(index="Nifty 50",
country="India",
from_date='01/01/2018',
to_date='01/01/2019')
Open High Low Close Volume Currency
Date
2018-01-01 10531.70 10537.85 10423.10 10435.55 134532000 INR
2018-01-02 10477.55 10495.20 10404.65 10442.20 158092000 INR
2018-01-03 10482.65 10503.60 10429.55 10443.20 172516992 INR
2018-01-04 10469.40 10513.00 10441.45 10504.80 180256992 INR
2018-01-05 10534.25 10566.10 10520.10 10558.85 186470000 INR
2018-12-26 10635.45 10747.50 10534.55 10729.85 271943 INR
2018-12-27 10817.90 10834.20 10764.45 10779.80 470160 INR
2018-12-28 10820.95 10893.60 10817.15 10859.90 253087 INR
2018-12-31 10913.20 10923.55 10853.20 10862.55 186495 INR
2019-01-01 10881.70 10923.60 10807.10 10910.10 159405 INR
[247 rows x 6 columns]
More on Index Data Retrieval
is found in the documentation here.
You can also retrieve a list of all stocks in a certain country:
df = investpy.get_stocks_list(country="india") # returns 'list'
df = investpy.get_stocks(country="india") # returns 'pandas.DataFrame' (shown below)
country name currency symbol
0 india Aditya Birla Capital INR ADTB
1 india Hubtown INR HUBT
2 india 3i Infotech INR TIIN
3 india 3M India INR TMIN
4 india ABB India INR ABB
1706 india G K P Printing INR GKPP
1707 india Vivid Mercantile INR VIVD
1708 india White Organic INR WHIE
1709 india Parshva Enterprises INR PAHV
1710 india SK International Export INR SKIN
[1711 rows x 6 columns]
Because investpy
doesn’t offer something to get all stocks from a certain index, you will have to sort through them yourself. Fortunately, investpy
does give you functions that allow you to get the recent, historical, etc. data about a specific index (mentioned above). If you are looking for data on each of those stocks, you could:
- Gather symbols of each stock in the Nifty 50 index as a list
- Set up a loop that gets the historical data for each stock
- Perform operations on data such as writing to CSV, etc.
Edit
You mentioned not being able to find data for MSCI Emerging Markets
, which is a world
index. Unfortunately, I could not specify world
as a country. I do not know what the reasoning behind this is, but I did dive into the source code to find out what was happening:
It turns out that the world
indices do exist inside of the investpy/resources/indices.csv
, but they are filtered out in index_countries_as_list()
because the world
country does not exist inside of the variable INDEX_COUNTRIES
in investpy/utils/constants.py
. You may want to submit an issue here. Here are a few things I was able to do that verify that MSCIEF
exists, but again, I am not sure there’s a way to get data regarding this index.
investpy.indices.get_indices_dict(country=None, columns=None, as_json=False)
{'country': 'world', 'name': 'MSCI Emerging Markets', 'full_name': 'MSCI Emerging Markets', 'symbol': 'MSCIEF', 'currency': 'USD', 'class': 'other_indices', 'market': 'global_indices'}
and:
investpy.indices.search_indices(by="name", value="MSCI Emerging Markets")
country name class market
0 world MSCI Emerging Markets other_indices global_indices
[1 rows x 7 columns]