Фон:

Аз съм софтуерен инженер с интерес към изграждането на мой собствен бот за алгоритмична търговия заедно с техники за подсилващо обучение и машинно обучение. Този блог включва моите актуализации за най-новите ми открития и знания.

Нашата крайна цел не е машина за печатане на пари, а безрискова стратегия за инвестиране на пари, докато инфлацията расте. Моля, вижте https://mlalgotrading.com/ за допълнително съдържание в wiki за машинно обучение и алгоритмична търговия.

Безплатни набори от данни/API за фондовия пазар, които тествах наскоро

Да започнем с това, че наистина има много източници на данни за намиране в мрежата и бях удивен колко много компании просто правят пари, като продават данни. Почти съм сигурен, че съм чел, че този пазар струва около 3 милиарда и се увеличава всяка година.
Както и да е, за изследователски цели си поиграх с безплатни източници на данни като Alpaca, AlphaVantage, YahooFinance, IEXFinance, Investing, Quandl(Nasdaq) и MarketStack.

Отказ от отговорност: Тази публикация не използва никакъв партньорски маркетинг.

1) Пазари на алпака

Първо започнах с Alpaca, тъй като вече имах опит с техния API.
За целите на търговията с хартия това наистина е страхотна услуга, тъй като тяхната документация е добре написана и е напълно безплатна.
TL/DR: Данните могат да се използват в минути, часове и дневни тикери, НО могат да се използват само от 2015 г. И трябва да се извърши почистване на данните, тъй като разделянето на акции не се взема предвид :(

Започнете със следния код, след като създадете своя безплатен акаунт.

def AlpacaData(Symbols=['AAPL']):
    BASE_URL = "https://paper-api.alpaca.markets"
    KEY_ID = "YOUR-ID"
    # Instantiate REST API Connection
    SECRET_KEY = "YOUR-KEY"
    api = tradeapi.REST(key_id=KEY_ID,secret_key=SECRET_KEY,base_url="https://paper-api.alpaca.markets")
    barTimeframe = "1D"  # 1Min, 5Min, 15Min, 1H, 1D

    # Fetch Account
    account = api.get_account()
    # Print Account Details
    print(account.id, account.equity, account.status)

    iteratorPos = 0  # Tracks position in list of symbols to download

    for Symbol in Symbols:
        # Fetch Apple data from last 100 days
        Alpaca_DataFrame = api.get_bars(Symbol, barTimeframe, start="2010-01-01", adjustment='raw').df
        Alpaca_DataFrame['Symbol'] = Symbol
        # Preview Data
        #Alpaca_DataFrame.to_csv('Alpaca_Data.csv', mode='a', index=False, header=False) #Appending mode
        Alpaca_DataFrame.to_csv('01_Alpaca_Data.csv')

2) Yahoo! Финанси (YFinance)

Докато използвах Google Spreadsheets, често попадах на Google Finance, който интересно получава данни от Yahoo! Финанси. YFinance е сред най-добрите източници на данни, които можете да намерите, и е много популярен в общността. Разделянето на акции се взема предвид, но за съжаление има само данни в края на деня за OHLCV (Open-High-Low-Close-Volume)

Мога само да ви кажа, ако YFinance разполагаше с данни за минути или часове, това щеше да стане стандарт на целия пазар.

Проверете го със следния код, дори не е нужно да създавате акаунт:

def YfinanceData(Symbols):
    # Interval required 5 minutes
    start = datetime.datetime(2015, 12, 1)
    for Symbol in Symbols:
        Yfinance_DataFrame = yf.download(tickers=Symbol, interval='1d', start= start)
        Yfinance_DataFrame['Symbol'] = Symbol
        Yfinance_DataFrame.to_csv('02_Yfinance_Data.csv')

3) QUANDL/NASDAQ

Quandl беше придобит от Nasdaq, тъй като предлага алтернативни данни, с които Nasdaq не разполагаше преди. Има доста стари данни, които могат да започнат от 2000 г., но за съжаление разделянето на акции също не е взето под внимание. Без предварителна обработка на тези набори от данни нашият модел на машинно обучение ще ни даде лоши резултати, на които не можем да разчитаме. Освен това имената на символите не са същите като използваните в Yahoo Finance или други, но имат някои интересни имена като „WIKI/AAPL.4“…

def QuandlData(Symbols): # Or NasdaqData since it is acquired by nasdaq

    #Unfortunately, it has it's own naming convention for symbols :(
    Symbols = ['WIKI/AAPL.4']
    for Symbol in Symbols:
        Nasdaq_Dataframe = nasdaqdatalink.get(Symbol, start_date="2001-12-31", end_date="2021-12-31")
        Nasdaq_Dataframe['Symbol'] = Symbol
        Nasdaq_Dataframe.to_csv('DataSets/CSVs/03_Nasdaq_Data.csv')


        # df.index = mdates.date2num(df.index)
        # data = df.reset_index().values # Convert dataframe into 2-D list

4) IEXFinance

Данните на IEXCloud също са един от най-популярните набори от данни на пазара. Има данни от максимум 15 години назад, отчита разделянето на запасите и има добре написана API документация. Недостатъците са, че получавате кредитни точки за всеки месец (Freemium акаунт) и докато тествах API, вече ми свършиха кредитните точки… Въпреки това има същите OHLCV данни И в допълнение някои други показатели, като процентни промени на отварянията и т.н. , Налични са дневни, почасови и минутни тикери.
Освен това има и алтернативни данни, които „със сигурност трябва да погледнете.“

След като създадете своя безплатен акаунт, не се колебайте да го тествате със следния код:

def IEXCloudData(Symbols):

    for Symbol in Symbols:
        IEXCloud_Dataframe = get_historical_data(Symbol, output_format='pandas',token="YOUR-KEY",
                                                 start='01/01/2007',
                                                 end='23/06/2022'
                                                 )
        IEXCloud_Dataframe.to_csv('DataSets/CSVs/05_IEXCloud_Data.csv')

5) MarketStack

Тази услуга предлага същите данни като Yahoo! Финанси, но наистина се нуждае от подобрение в документацията и използването на API. Вижте кода и ще разберете какво имам предвид с това.

def MarketStackData(Symbols):
    r = requests.get('http://api.marketstack.com/v1/tickers/AAPL/intraday?access_key=YOURKEY&date_from=2015-01-01&date_to=2022-06-23')
    x = r.json()
    data = r.json()['data']

    MarketStack_Dataframe = pd.DataFrame.from_dict(data['intraday'])
    MarketStack_Dataframe.to_csv('DataSets/CSVs/06_MarketStackData_Data.csv')

Заключение:

Отивам за Yahoo! Финансите като моят ML/RL модел ще се основават само на дневни тикери. Ако имате нужда от данни за акции на базата на час или минута Alpaca Market или IEXCloud, тъй като и двете имат добра ценова политика.

Моля, дръжте ме в течение, ако имате други безплатни набори от данни, използвани за борсова и алгоритмична търговия.

Можете да ме следвате Twitter
разгледайте MLAlgotrading