ftp://emi.nasdaq.com/ITCH/
Спецификации этих файлов сводится к следующему:
- Два байта с прямым порядком байтов, указывающая длину остальной части пакета.
- Однобайтовый заголовок ASCII, указывающий тип
- Полезная нагрузка переменной длины (размер: длина-1)
bin_data = gzip.open('01302020.NASDAQ_ITCH50.gz', 'rb')
message_size_bytes = bin_data.read(2)
message_size = int.from_bytes(message_size_bytes, byteorder='big', signed=False)
message_type = bin_data.read(1).decode('ascii')
record = bin_data.read(message_size - 1)
print("size: " + str(message_size) + " type: " + message_type)
# >>> size: 12 type: S
message_size в этом конкретном случае печатает 12, что является правильным значением. Следующий символ S также является правильным.
Однако мои собственные попытки воспроизвести правильное поведение синтаксического анализа Python с использованием std::ifstream не увенчались успехом. Я не могу правильно прочитать даже первые 2 байта (которые должны указывать общий размер оставшейся полезной нагрузки 12). Вот мои попытки, некоторые из которых на данный момент являются просто выстрелами в темноту:
#include
#include
int main() {
std::string filepath = "/Users/estebanlanter/Documents/Finance/HFT/01302020.NASDAQ_ITCH50.gz";
std::ifstream ifs;
ifs.open(filepath, std::ifstream::in);
std::cout
Подробнее здесь: https://stackoverflow.com/questions/673 ... c-ifstream