用python读取文华财经WH6的k线数据

不得不说文华财经确实好用,但不同于通达信,它的K线数据无法直接导出。(舍得花钱的…

不得不说文华财经确实好用,但不同于通达信,它的K线数据无法直接导出。(舍得花钱的朋友可以绕道了)

一直以来我是在别的平台下数据,用文华财经看图。很难受的是一些加权指数数据不太一样好多信号对不上,一直很苦恼。同时还有一些外盘数据别的平台还没有,于是就深入探究了一下如何从文华财经上直接导出数据。全网搜索居然没找到直接可以用的方法。索性经过研究有些收获,便在此分享一下。

第一步,在软件中下载数据(如下图)。同时在软件目录下的Data文件夹中寻找到下载的对应的.dat文件。

用python读取文华财经WH6的k线数据

第二步,分析数据。重点在这里

import struct
file = r'D:\wh6瑞达期货x64\Data\IMM\day\00062800.dat'
f = open(file,'rb')
data = f.read(320)   #一次读这么多也是试过几次后的,目的是发现数据的规律
#很容易确定的是前4个字节是时间戳,那么只要发现连续的时间戳数据就可以很容易的断开。
#这里和通达信不同的是每一天的数据并不是4个字节的倍数,所以把别人读通达信数据的代码拿来会发现头大了。
data1 = struct.unpack('lfffffffllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll',data)
用python读取文华财经WH6的k线数据

可以看出第一个int类型的值是个时间戳(即K线数据对应的日期),后面依此分别是开盘价,收盘价,最高价,最低价,成交量,持仓量,结算价。但是再往后好长一段时间的数据完全看不出是啥,找不到时间戳。知道index是37的数,如下图。

用python读取文华财经WH6的k线数据

序号37的这个数又是个时间戳,但经过对比发现两个时间戳之间间隔了3个交易日,即前37个单元是4天的K线数据。也就是说每天的数据应该是9个单元外加四分之一个单元,即37个字节。到这我们的问题基本已经解决。

第三步,数据转换。把读到的数据按照37个字节进行切片,就可以解析出所有的数据了。

#时间戳转换为熟悉的日期格式
def transdate(tikpoint):
    timeArray = time.localtime(tikpoint)
    #checkpoint = time.strftime("%Y-%m-%d %H:%M:%S",timeArray)
    checkpoint = time.strftime("%Y-%m-%d",timeArray)
    return checkpoint
#解析数据
def trans_data(file):
    f = open(file,'rb')
    data= f.read()
    n = 37
    i = 0
    data1 = []
    while i*n < len(data):
        list1 = data[i*n:(i+1)*n]
        list11 = struct.unpack('lffffffffb',list1)
        data1.append(list11)
        i+=1
    df = pd.DataFrame(data1,columns=['date','open','close','high','low','vol','holding','Settlement','xxx','xx'])
    df.date = df.date.map(lambda x: transdate(x))
    return df[['date','open','close','high','low','vol','holding','Settlement']]
用python读取文华财经WH6的k线数据

完。

研究数据花了半天时间,敲下回车键的时候就1s不到,二进制数据读取确实快。

本文来源于网络,不代表国际期货立场,转载请注明出处:https://www.jslongxin.com/post/8098.html

为您推荐

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

联系我们

联系我们

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部