В пятницу американский индекс широкого рынка S&P500 закрылся выше значения 3397 пунктов, обновив исторический максимум от 19.02.2020. На это ушло ровно 6 месяцев. Это много или мало? Можно сравнить с несколькими громкими кризисами прошлого.
В марте падение было стремительным, фондовый рынок упал на 35% в рекордно короткие сроки, опередив в скорости падения даже «Чёрный понедельник» 1987 года (в совокупности, а не за 1 день). Это было настоящим стресс-тестом в том числе и для меня.
Некоторое время назад прошла волна постов "Где мне взять нахаляву подешевле рыночные данные для тестирования своих торговых роботов?" и была предложена масса вариантов, начиная от "дергать ISS", до «хакнуть Финам» и "да я своего вендора сейчас напишу и буду раздавать данные из Квик".
Немного забавно читать, как матерые трейдеры, зарабатывающие от 100% в месяц, жмутся оплатить подписку на МФД или ещё где-то и занимаются странными телодвижениями по раздобыванию очень странных бесплатных данных непойми кем составленных и непойми какого качества. По результатам анализа которых будут торговать роботы и показывать финрез, мягко говоря, противоположный тестам на истории.
Простой (неправильный) ответ лежит на поверхности: данные удобно брать у своего брокера. По здравым размышлениям крайне странно, что Финам был готов раздавать гигабайты тиков всем желающим со своего сайта без регистрации, но при этом имел ограничение на скачивание истории минутных баров через протокол Транзак (по моим сведениям 1 месяц минуток был доступен).
import requests import datetime import pathlib SECIDs = ["GAZP", "BANEP", "LKOH"] DISK = "E" for SECID in SECIDs: from_date = "2020-05-04" to_date = "2005-01-03" while str(to_date) != from_date: to_date = str(to_date) to_date = to_date.split('-') a = datetime.date(int(to_date[0]), int(to_date[1]), int(to_date[2])) b = datetime.timedelta(days=140) to_date = a + b pathlib.Path("{}:/{}/{}".format(DISK, "Database_MOEX", SECID)).mkdir(parents=True, exist_ok=True) filename = SECID + "_" + str(to_date) + ".csv" with requests.get("http://iss.moex.com/iss/history/engines/stock/markets/shares/boards/tqbr/securities/{}.csv?date={}".format(SECID, to_date)) as response: with open("{}:/Database_MOEX/{}/{}".format(DISK, SECID, filename), 'wb') as f: for chunk in response.iter_content(): f.write(chunk)Для начала пройдемся по его плюсам и минусам. Самый главный минус, что этот парсер качает только определенный период, который уникален для каждой акции, судя по всему для увеличения этого периода надо кинуть бирже на лапу:), и то что информация предоставляется за день, теперь перейдем к плюсам: можно выкачивать историю за определенный период для нескольких инструментов сразу (их количество ограничивается лишь количеством инструментов на мосбиржи), есть возможность назначать диск для сохранения информации, быстрота выгрузки данных.
По самым разным инструментам, самое главное, чтобы было направление торговли, id ордеров агрессора и второй, по идее и всё.
Хочу обкатать одну гипотезу — но без обширной даты — никак.
Всем поспособстовавшим пришлю результаты тестирования, положительные или отрицательные — это уж как получится.