python处理通达信 5分钟数据 .lc5文件处理,生成csv文件,期货回测

import os
import struct
import math# 根据二进制前两段拿到日期分时
def get_date_str(h1, h2) -> str:  # H1->0,1字节; H2->2,3字节;year = math.floor(h1 / 2048) + 2004  # 解析出年month = math.floor(h1 % 2048 / 100)  # 月day = h1 % 2048 % 100  # 日hour = math.floor(h2 / 60)  # 小时minute = h2 % 60  # 分钟if hour < 10:  # 如果小时小于两位, 补0hour = "0" + str(hour)if minute < 10:  # 如果分钟小于两位, 补0minute = "0" + str(minute)return str(year) + "-" + str(month) + "-" + str(day) + " " + str(hour) + ":" + str(minute)# 根据通达信.lc5文件,生成对应名称的csv文件
def stock_lc5(filepath, name, targetdir) -> None:# (通达信.lc5文件路径, 通达信.lc5文件名称, 处理后要保存到的文件夹)with open(filepath, 'rb') as f:  # 读取通达信.lc5文件,并处理file_object_path = targetdir + name + '.csv'  # 设置处理后保存文件的路径和名称file_object = open(file_object_path, 'w+')  # 打开新建的csv文件,开始写入数据title_list = "Date,Open,High,Low,Close,Open_interest,Volume,settlement_price\n"  # 定义csv文件标题file_object.writelines(title_list)  # 将文件标题写入到csv中while True:li2 = f.read(32)  # 读取一个5分钟数据if not li2:  # 如果没有数据了,就退出breakdata2 = struct.unpack('HHffffllf', li2)  # 解析数据date_str = get_date_str(data2[0], data2[1])  # 解析日期和分时data2_list = list(data2)  # 将数据转成listdata2_list[1] = date_str  # 将list二个元素更改为日期 时:分del (data2_list[0])  # 删除list第一个元素for dl in range(len(data2_list)):  # 将list中的内容都转成字符串strdata2_list[dl] = str(data2_list[dl])data2_str = ",".join(data2_list)  # 将list转换成字符串strdata2_str += "\n"  # 添加换行file_object.writelines(data2_str)  # 写入一行数据file_object.close()  # 完成数据写入# 设置通达信.day文件所在的文件夹
path_dir = 'C:\\new_tdxqh\\vipdoc\\ds\\fzline\\'
# 设置数据处理好后,要将csv文件保存的文件夹
target_dir = '../lc5/'
# 读取文件夹下的通达信.day文件
listfile = os.listdir(path_dir)
# 逐个处理文件夹下的通达信.day文件,并生成对应的csv文件,保存到../day/文件夹下
for fname in listfile:stock_lc5(path_dir + fname, fname, target_dir)
else:print('The for ' + path_dir + ' to ' + target_dir + '  loop is over')print("文件转换已完成")

                        


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部