Skip to content

Instantly share code, notes, and snippets.

@pyykkis
Created November 7, 2022 11:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pyykkis/d6f884b6e6f930d7f7a19f871b8f5235 to your computer and use it in GitHub Desktop.
Save pyykkis/d6f884b6e6f930d7f7a19f871b8f5235 to your computer and use it in GitHub Desktop.
Sierra Chart Intraday Data File parser
import numpy as np
import pandas as pd
from struct import unpack, calcsize
from collections import namedtuple
def parse_scid_file(filename):
SIERRA_CHART_EPOCH = pd.to_datetime('1899-12-30')
header_record = '<4sLLHHL36s'
header_size = calcsize(header_record)
Header = namedtuple('Header', 'FileTypeUniqueHeaderID HeaderSize RecordSize Version Unused1 UTCStartIndex Reserve')
intraday_record = np.dtype([
('DateTime', 'timedelta64[us]'),
('Open', np.float32),
('High', np.float32),
('Low', np.float32),
('Close', np.float32),
('NumTrades', np.uint32),
('TotalVolume', np.uint32),
('BidVolume', np.uint32),
('AskVolume', np.uint32),
])
arr = None
with open(filename, 'rb') as file:
header = file.read(header_size)
header = Header._make(unpack(header_record, header))
arr = np.fromfile(file, dtype=intraday_record)
df = pd.DataFrame(arr)
df['DateTime'] = SIERRA_CHART_EPOCH + df['DateTime']
return df
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment