吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5510|回复: 22
收起左侧

[Python 转载] 同花顺日线某天数据输出到文本文件Python源码

  [复制链接]
pubh 发表于 2022-3-29 19:01
本帖最后由 pubh 于 2022-3-29 19:31 编辑

在学习Python,花了些时间写了个把同花顺日线某天数据输出到文本文件的小程序,在此分享下,运行可带日期参数(lastday2txt.py 20220328),不带则默认为当天

[Python] 纯文本查看 复制代码
import os
import sys
import time
import winreg
import struct

key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\HexinSoft")
hexinpath, type = winreg.QueryValueEx(key, "FilePath")  # 同花顺安装路径
installdate, type = winreg.QueryValueEx(key, "InstallDate") # 安装日期
print("同花顺安装路径:", hexinpath, "安装日期:", installdate)
winreg.CloseKey(key)
daylines = []   # 股市列表
textpath = r"F:\Documents\StockData"    #文本文件存储目录
shaseday = r"history\shase\day"     # 沪市日线路径
sznseday = r"history\sznse\day"     # 深市日线路径
stbday = r"history\stb\day"         # 北京日线路径
daylines.append(shaseday)
daylines.append(sznseday)
daylines.append(stbday)
# print(daylines)

if len(sys.argv)>1:
    today = str(sys.argv[1])    # 运行参数 (样式为YYYYMMDD,如20220301)
else:
    loctime=time.localtime(time.time())
    today = time.strftime("%Y%m%d",loctime) # 无运行参数,则默认为当天(样式为YYYYMMDD,如20220301)
txtfile = os.path.join(textpath, today+".txt")  # 输出文本文件名
if os.path.exists(txtfile):
    os.remove(txtfile)      # 若文本文件存在则先删除
# print(txtfile, today)
for market in daylines:
    dayfilepath = os.path.join(hexinpath, market)   # 日线文件存储完整路径
    daylinefiles = os.listdir(dayfilepath)  # 日线文件名列表
    # print(txtfilepath, hexinpath)
    if len(daylinefiles) > 0:
        # print(len(daylinefiles))
        for dfn in daylinefiles:
            if ".day" in dfn:
                stkday = os.path.join(dayfilepath, dfn)
                (shotname, extension) = os.path.splitext(dfn)
                # txtfile = os.path.join(txtfilepath, shotname+".txt")
                # print(stkday,txtfile)
                binfile = open(stkday, 'rb')
                binfile.seek(6)
                recnums = struct.unpack('i', binfile.read(4))[0]    # 记录数
                recbgn = struct.unpack('h', binfile.read(2))[0]     # 记录开始地址
                reclen = struct.unpack('h', binfile.read(2))[0]     # 记录长度
                tf = open(txtfile,"a+")
                for i in range(recnums):
                    binfile.seek(recbgn + reclen * i)
                    stkdate = struct.unpack('I', binfile.read(4))[0]        # 日期
                    if stkdate == int(today):
                        stkopen = (struct.unpack('I', binfile.read(4))[0] & 0xFFFFFF) / 1000    # 开盘价
                        stkhigh = (struct.unpack('I', binfile.read(4))[0] & 0xFFFFFF) / 1000    # 最高价
                        stklow = (struct.unpack('I', binfile.read(4))[0] & 0xFFFFFF) / 1000     # 最低价
                        stkclose = (struct.unpack('I', binfile.read(4))[0] & 0xFFFFFF) / 1000   # 收盘价
                        amount = (struct.unpack('I', binfile.read(4))[0] & 0xFFFFFFF) * 10      # 成交金额
                        money = struct.unpack('I', binfile.read(4))[0]      # 成交量
                        # print(shotname, stkopen, stkhigh, stklow, stkclose, amount, money)
                        print(shotname, stkopen, stkhigh, stklow, stkclose, amount, money, file=tf)     # 写入本文文件
                binfile.close()

tf.close()
print("文件输出完毕!")


Python源码文件: lastday2txt.zip (1.35 KB, 下载次数: 63)




免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
蜡笔小心 + 1 + 1 谢谢兄弟前段时间的影片资源

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| pubh 发表于 2022-3-29 21:44
最新同花顺日线数据格式 v202203

日线文件位于history\XXX\day目录下,XXX为证交所名称(上海证券交易所的目录为shase、深圳证券交易所的目录为sznse)。
数据文件通过文件名称识别交易标的(包括股票、期货等等)。每个数据文件分别由: 文件头,固定为16个字节,包括:
byte [6],6 字节长度,固定为 [0x68,0x64,0x31,0x2E, 0x30,0x00],用于识别数据文件类型;
dword,4 字节长度,记录“内容”区域的记录条数;
word,2 字节长度,记录“内容”区域的开始位置;(第192个字节开始,文件头16+列定义176=192)
word,2 字节长度,记录“内容”区域每条记录的字节长度;(176个字节,44 x 4 = 176字节)
word, 2 字节长度,记录“内容”区域的字段数:(44列)
列定义:固定为4 个字节一组,标示一个列,第4 个字节为列内容长度。(44个列字段,每列4个字节,一共176字节)
内容:每天176个字节,44列,前7个依次为日期、开盘、最高、最低、收盘、成交额、成交量、后37个还未使用,全部填充为0xFF。
注意:
1、开盘、最高、最低、收盘四个数据都是4字节的无符号整数,但是最后一个字节为“B0”,如“CA A0 A4 B0”,只需要将最后的“B0”改为“00”,就能得到这个无符号整数,再除以1000,就是实际的数值;
2、成交额也是用4字节的无符号整数表示,但最后一个字节为“1X”,如“5B 67 E9 15”,只需将“1”改为“0”,即“5B 67 E9 05“就可得到这个无符号整数,再乘以10,就是成交额;
3、成交量也是用4字节的无符号整数表示,就是成交量(手数)。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
lizy169 + 1 + 1 谢谢@Thanks!

查看全部评分

lizy169 发表于 2022-3-30 07:57
pubh 发表于 2022-3-29 21:44
最新同花顺日线数据格式 v202203

日线文件位于history\XXX\day目录下,XXX为证交所名称(上海证券交易所 ...

请问这些你是怎么识别出来的?能不能教我?
每个数据文件分别由: 文件头,固定为16个字节,包括:
byte [6],6 字节长度,固定为 [0x68,0x64,0x31,0x2E, 0x30,0x00],用于识别数据文件类型;
dword,4 字节长度,记录“内容”区域的记录条数;
word,2 字节长度,记录“内容”区域的开始位置;(第192个字节开始,文件头16+列定义176=192)
word,2 字节长度,记录“内容”区域每条记录的字节长度;(176个字节,44 x 4 = 176字节)
word, 2 字节长度,记录“内容”区域的字段数:(44列)
xiayusammr 发表于 2022-3-29 21:52
pubh 发表于 2022-3-29 21:44
最新同花顺日线数据格式 v202203

日线文件位于history\XXX\day目录下,XXX为证交所名称(上海证券交易所 ...

我就想问一下有何用意
ddistupid 发表于 2022-3-29 23:00
用来复盘吗? 还是来监测资金异动 要是能带上 账户ID 估计就发了
twapj 发表于 2022-3-30 06:24
保留学习
 楼主| pubh 发表于 2022-3-30 08:49
lizy169 发表于 2022-3-30 07:57
请问这些你是怎么识别出来的?能不能教我?
每个数据文件分别由: 文件头,固定为16个字节,包括:
byte  ...

这个文档网上有,我只是局部更新了块长信息。
信息识别一是文档比较,再就是观察规律,然后对照实际数据去尝试。
paulz2018 发表于 2022-4-17 11:06
这个可以有。。。。。
warfid 发表于 2022-5-2 09:47
拿到的应该是不复权的数据,拿来算指标? 通达信可以复权数据
麻木不忍 发表于 2022-5-8 23:33
大神你好运行到报错了,是什么原因  key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\HexinSoft")       key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\HexinSoft")
FileNotFoundError: [WinError 2] 系统找不到指定的文件。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 20:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表