Free or cheap data and tools for Numerai Signals

Please feel free to add any others that you know of. I’m not associate with any of these and I’m also not vouching for the quality of any of them. :slight_smile:


FMP - Free


Alternative data (sentiment)

1 Like
  • Borsdata - Free/Cheap. Focus on Nordic markets. API access requires Pro membership.

I also found a tutorial on how to analyze financial data using the FMP API.


For R users, the tidyquant package has quite a few handy functions to download data from different sources.

1 Like

Sharadar has prices and fundamentals.

1 Like

Anyone have any experience with these?


ISIN codes
Signals ticker mapping challenges have taken a good part of the zoom and twitch sessions recently. Just came across this package, another arrow in our quiver:

# Financial Data Extraction from with Python
!pip install investpy

import investpy
import pandas as pd

        columns=["symbol", "country", "name", "full_name", "isin", "currency"],

voilà, you have name, country, and isin codes for 40,000 stocks

symbol country name full_name isin currency
0 TS argentina Tenaris Tenaris LU0156801721 ARS
1 APBR argentina PETROBRAS ON Petroleo Brasileiro - Petrobras BRPETRACNOR9 ARS
2 GGAL argentina Grupo Financiero Galicia Grupo Financiero Galicia B ARP495251018 ARS
3 TXAR argentina Ternium Argentina Ternium Argentina SA ARSIDE010029 ARS
4 PAMP argentina Pampa Energia Pampa Energia SA ARP432631215 ARS

Hi Degerhan,

That is very helpful as I’m just now approaching Signals and figuring out how to use the bloomberg tickers. Did you go one step further and match them to the investpy list? How did you match them?

1 Like

@sirbradflies, I did not pursue this further.

In real life I only trade commodity futures spreads, where the symbols are exact and data is extremely clean. I was trying to gather a similar quality dataset for Signals until I realized I was trying to boil the data ocean instead of building useful things.

@arbitrage recently advised in rocketchat that he is working only with US stocks for now (and he is getting solid results). If you remove the US suffix from bloomberg_ticker, what remains will be the Yahoo ticker for all except about 10 symbols, and historical data coverage is quite good. I’ve decided to just focus on the US stock universe until I get my act together on the modeling side; and expand the dataset at a later phase.

(actually to speed up iterations, I am only working with the largest cap 900 US stocks for now, list here: SP900 )

hi @degerhan,

Thanks for the tips. I had actually already started focused on US stocks when I realized most of them were easily downloadable (except for Berkshire and a few others :slight_smile: ).

I’ll share an update if I come up with a robust way to match all the bloomberg tickers on Yahoo Finance.

For those who want to get data directly from FINVIZ there is a code implemented which helps to get specific data from each of the companies we want.

Attached code:

# Data that we want to extract from Finviz Table
metric = ['Price', 'EPS next 5Y', 'Beta', 'Shs Outstand']

def fundamental_metric(soup, metric):
    # the table which stores the data in Finviz has html table attribute class of 'snapshot-td2'
    return soup.find(text = metric).find_next(class_='snapshot-td2').text
def get_finviz_data(ticker):
        url = ("" + ticker.lower())
        soup = bs(requests.get(url,headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0'}).content)
        dict_finviz = {}        
        for m in metric:   
            dict_finviz[m] = fundamental_metric(soup,m)
        for key, value in dict_finviz.items():
            # replace percentages
            if (value[-1]=='%'):
                dict_finviz[key] = value[:-1]
                dict_finviz[key] = float(dict_finviz[key])
            # billion
            if (value[-1]=='B'):
                dict_finviz[key] = value[:-1]
                dict_finviz[key] = float(dict_finviz[key])*1000000000  
            # million
            if (value[-1]=='M'):
                dict_finviz[key] = value[:-1]
                dict_finviz[key] = float(dict_finviz[key])*1000000
                dict_finviz[key] = float(dict_finviz[key])
    except Exception as e:
        print (e)
        print ('Not successful parsing ' + ticker + ' data.')        
    return dict_finviz

finviz_data = get_finviz_data(ticker)

1 Like

Any thoughts on Alpaca API v2

curl -X GET -H “APCA-API-KEY-ID: …” -H “APCA-API-SECRET-KEY: …” “ 4T00:57:47.317087Z&end=2021-02-25T00:57:47.317087Z”

Free account max end time seems to be utcnow - 15min

1 Like