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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ubuntu安装进入EFI Shell「建议收藏」

    ubuntu安装进入EFI Shell「建议收藏」背景:用VirtualBox安装Ubuntu14:第一次,无法进入LiveCD界面.第二次,勾选EFI界面后成功进入安装流程,成功安装。但是安装完成之后重启,进入了EFIShell界面,如下:解决方案:输入:fs:0cdEFI/ubuntugrubx64.efi引自ServerFault:IfyouaregettingtotheEFIshellyou

    2022年7月24日
    16
  • java连接redis集群方式_redis java

    java连接redis集群方式_redis javapackageorg.rx.util;importorg.redisson.Redisson;importorg.redisson.api.RedissonClient;importorg.redisson.config.Config;importorg.springframework.beans.factory.annotation.Autowired;im…

    2022年10月12日
    0
  • JavaScript阶乘算法[通俗易懂]

    JavaScript阶乘算法[通俗易懂]题目:计算所提供整数的阶乘。如果使用字母n代表一个整数,则阶乘是所有小于或等于n的整数的乘积。阶乘通常简写成n!例如:5!=1*2*3*4*5=120使用递归实现:functionfactorialize(num){varresult=1;for(vari=1;i<=num;i++){…

    2022年7月24日
    10
  • tf.placeholder() is not compatible with eager execution的解决方法「建议收藏」

    tf.placeholder() is not compatible with eager execution的解决方法「建议收藏」最近安装了TensoFlow2.0及以上的版本都发现啊出现这个问题:RuntimeError:tf.placeholder()isnotcompatiblewitheagerexecution.这是因为在运行**tf.compat.v1.placeholder(dtype,shape=None,name=None)**的时候急切执行了这条语句,但是我们一般都是在一…

    2022年7月13日
    9
  • docker 镜像构建_如何更新docker镜像内的文件

    docker 镜像构建_如何更新docker镜像内的文件前言如果我们已经安装了一个python3的环境,如果另一台机器也需要安装同样的环境又要敲一遍,很麻烦,这里可以配置Dockerfile文件,让其自动安装,类似shell脚本Dockerfile编写

    2022年7月31日
    7
  • vscode配置javaweb环境_vscode electron

    vscode配置javaweb环境_vscode electronVScode配置Java环境1、下载VSCodeVSCode下载官网2、配置中文环境如果懂英语,或者想在编程上有更好的进步,可以跳过这一步,毕竟以后工作,很多软件并非中文,但像我这样的英语困难户,还是下载了该插件,毕竟香啊(〃 ̄︶ ̄)在VSCode的左侧点击小方块,搜索Chinese(Simplified)LanguagePackforVisualStudioCode插件,点击安装。(这是安装后的界面)3、配置相关插件和Java的JDK1、新建文件(快捷键Ctrl

    2022年10月3日
    0

发表回复

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

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