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

python处理通达信 5分钟数据 .lc5文件处理,生成csv文件,期货回测importstructimportdatetimeimportmathimporttime#根据二进制前两段拿到日期分时defget_date_str(H1,H2):year=math.floor(H1/2048)+2004month=math.floor(H1%2048/100)day=H1%2048%100hour=math.floor(H2/60)minute=H2%6.

大家好,又见面了,我是你们的朋友全栈君。

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:  # 如果小时小于两位, 补0
        hour = "0" + str(hour)
    if minute < 10:  # 如果分钟小于两位, 补0
        minute = "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:  # 如果没有数据了,就退出
                break
            data2 = struct.unpack('HHffffllf', li2)  # 解析数据
            date_str = get_date_str(data2[0], data2[1])  # 解析日期和分时

            data2_list = list(data2)  # 将数据转成list
            data2_list[1] = date_str  # 将list二个元素更改为日期 时:分
            del (data2_list[0])  # 删除list第一个元素
            for dl in range(len(data2_list)):  # 将list中的内容都转成字符串str
                data2_list[dl] = str(data2_list[dl])
            data2_str = ",".join(data2_list)  # 将list转换成字符串str
            data2_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("文件转换已完成")


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163995.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月24日 上午7:16
下一篇 2022年7月24日 上午7:16


相关推荐

  • 最简单也最难——怎样获取到Android控件的高度「建议收藏」

    最简单也最难——怎样获取到Android控件的高度

    2022年1月29日
    52
  • Activiti7使用

    Activiti7使用Acitviti7 工作流引擎视频地址 springboot2 Vue shiro 云管理系统项目实战 哔哩哔哩 干杯 bilibili 工作流引擎 流程自动化配置 工作流系统 具有工作流的系统 如何以不变应万变 activiti 就可以实现业务流程变化后 程序代码不需要改变适用行业 使用场景及相关业务 SaaS 人力资源管理系统行政审批 调薪 为什么 activiti 就可以解决业务需求变更时 源代码不需要更新 而是更新业务流程图 原理 activit

    2026年3月26日
    2
  • Druid连接池的意义以及使用

    Druid连接池的意义以及使用建立数据库连接耗时耗费资源,一个数据库服务器能够同时建立的连接数也是有限的,在大型的Web应用中,可能同时会有成百上千的访问数据库的请求,如果Web应用程序为每一个客户请求分配一个数据库连接,将导致性能的急剧下降。数据库连接池的意义在于,能够重复利用数据库连接(有点类似线程池的部分意义),提高对请求的响应时间和服务器的性能。连接池中提前预先建立了多个数据库连接对象,然后将连接对象保存到连接池中…

    2022年7月23日
    8
  • pycharm如何安装python环境_pycharm怎么安装「建议收藏」

    pycharm如何安装python环境_pycharm怎么安装「建议收藏」安装方法:1、安装配置好Python环境;2、从官网下载pycharm安装程序;3、直接双击下载好的exe文件,进入安装向导界面,按照指示一步步操作;4、点击Install进行安装,等待安装完成后,点击Finish结束安装即可。本教程操作环境:windows7系统、Python3.5.2版本、DellG3电脑。首先我们来安装python1、首先进入网站下载:点击打开链接(或自己输入网址http…

    2022年8月27日
    12
  • 使用虚拟环境virtualenv/Virtualenvwrapper隔离多个python

    使用虚拟环境virtualenv/Virtualenvwrapper隔离多个python

    2021年11月21日
    49
  • ldap 统一认证 java_如何在你的系统里集成LDAP统一认证「建议收藏」

    一、为什么需要统一认证日常办公经常会有多套系统,如果各个系统各自维护一套用户认证,用户需要记住多个用户名密码。系统各自管理用户认证的方式,不但会有重复建设的问题,用户体验也会差,经常会有用户忘记密码的情况。二、LDAP统一认证是什么LDAP是LightweightDirectoryAccessProtocol(轻量级目录访问协议)的缩写,它是基于X.500标准的轻量组播目录访问协议。目录…

    2022年4月17日
    75

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号