Support Board
Date/Time: Sat, 23 Nov 2024 14:51:46 +0000
Post From: Python for Sierra Chart
[2024-02-13 16:44:01] |
User150671 - Posts: 69 |
If you don't need the convenience of a dataframe, you can save the extra overhead by just reading into and writing from a np.array. Example: read a scid file to a np.array: def get_scid_np(scidFile, limitsize=sys.maxsize): # Check Path Exists f = Path(scidFile) assert f.exists(), "SCID file not found" # set the offset from limitsize stat = f.stat() offset = 56 if stat.st_size < limitsize else stat.st_size - ( (limitsize // 40) * 40) ### Setup the SCID dtype sciddtype = np.dtype([ ('Time', '<u8'), ('Open', '<f4'), ('High', '<f4'), ('Low', '<f4'), ('Close', '<f4'), ('Trades','<i4'), ('Volume', '<i4'), ('BidVolume', '<i4'), ('AskVolume', '<i4') ]) scid = np.fromfile(scidFile, dtype=sciddtype, offset=offset) return scid Write a np.array to a scid file: def write_scid(scidarray,outfile,mode = 'w'): ## Write header file in write mode if mode == 'w': with open(outfile, 'wb') as fscid: header = b'SCID8\x00\x00\x00(\x00\x00\x00\x01\x00' fscid.write(header) for i in range(21): fscid.write(b'\x00\x00') fscid.write(scidarray.tobytes()) fscid.close() # Append the scid array else else: with open(outfile, 'ab') as fscid: fscid.write(scidarray.tobytes()) fscid.close() return Also to whoever wrote this piece of code originally which I see is still being used above: BCOLS = ['datetime', 'open', 'high', 'low', 'close', 'volume', 'trades', 'bidVolume', 'askVolume']
rectype = np.dtype([ (BCOLS[0], '<u8'), (BCOLS[1], '<f4'), (BCOLS[2], '<f4'), (BCOLS[3], '<f4'), (BCOLS[4], '<f4'), (BCOLS[6], '<i4'), (BCOLS[5], '<i4'), (BCOLS[7], '<i4'), (BCOLS[8], '<i4') ]) I didn't notice what you had done and just took your bcols and rectype and made it one variable... because why define something in order to then use it to define another variable with? Problem is, the bcols order DOES NOT MATCH THE ORDER THEY ARE DEFINED IN THE DTYPE (volume and trades are switched around). Took me like 40 minutes to figure out how I broke my scid file generation. Well played sir. You can define the np.dtype in one variable as follows: sciddtype = np.dtype([ ('Time', '<u8'), ('Open', '<f4'), ('High', '<f4'), ('Low', '<f4'), ('Close', '<f4'), ('Trades','<i4'), ('Volume', '<i4'), ('BidVolume', '<i4'), ('AskVolume', '<i4') ]) Date Time Of Last Edit: 2024-02-13 16:47:25
|