1. 首页 > 知识问答

大智慧使用方法(读取大智慧除权数据方法)

用python做量化交易还行,简单,库文件多,不用自己造车轮。但是大周期数据的数据除权非常关键,网上没有“正确的”除权数据,就写了个函数,直接从大智慧读取除权数据,对原始K线数据做清洗加工,这样我的系统中的除权计算结果就和大智慧的数据一致。

使用方法:

1,在大智慧系统中“接收除权数据” (在下载数据里面有)

2,大智慧系统中选 “常用“ - ”数据管理中心“ - ”财务数据“ - ”除权输出“ (输出到c:\txt文件夹)

3,运行下面的这个python程序,就可以把除权结果输出到 c:\txt\csv\divdata.csv (当然你也可以在你的python程序中直接使用这个函数就行)

备注:如果觉得每次这样下载-导出数据麻烦,就用pyautogui库写一个自动化脚本做这些事,几行代码的事。

程序代码:

import  struct
import time
import re
import pandas as pd

def readDivDataandSavetoCSV():
    name = ['SPLIT.PWR']
    data = []
    for i in name:
        try:
            exFile = open('c:\\txt\/' + i, 'rb')
            print("get div data from PWR/")
        except:
            print("can not get Div data")

        exFile.seek(8)
        while True:
            exContent = exFile.read(120)
            if not exContent:
                break
            if exContent[:4] == b'\xff\xff\xff\xff':
                code = exContent[4:12].decode('gbk')
            elif len(exContent) > 0:
                date = struct.unpack("I", exContent[:4])[0]
                date = time.localtime(date)
                newdate = str(date.tm_year) + "-" + str(date.tm_mon) + "-" + str(date.tm_mday)
                exlist = exContent[20:].decode('gbk').split('\x00')[0][2:].split()
                present = 0
                bonus = 0
                rationed = 0
                price = 0
                for i in exlist:
                    if '送' in i:
                        present += float(re.findall(r"\d+\.?\d*", i)[0])
                    if '增' in i:
                        present += float(re.findall(r"\d+\.?\d*", i)[0])
                    if '派' in i:
                        bonus += float(re.findall(r"\d+\.?\d*", i)[0])
                    if '价' in i:
                        price += float(re.findall(r"\d+\.?\d*", i)[0])
                    if '配' in i:
                        rationed += float(re.findall(r"\d+\.?\d*", i)[0]) - price
                if code[2:3] == '0' or code[2:3] == '3' or code[2:3] == '6':
                    newcode = code[2:] + "." + code[0:2]
                    data.append({'code': newcode, 'date': newdate, 'present': present, 'bonus': bonus, 'price': price,
                                 'rationed': rationed})
    pddata = pd.DataFrame()
    pddata = pd.DataFrame.from_dict(data)

    marketlist = ['SH', 'SZ']
    markets = '|'.join(marketlist)
    pddata = pddata[pddata['code'].str.contains(markets)]

    pddata['date'] = pd.to_datetime(pddata['date'])
    pddata = pddata.set_index('date')
    pddata = pddata.sort_index(ascending=False)
    pddata.to_csv(r"c:\txt\csv\divdata.csv", index=True, encoding="utf_8_sig")
    print("pddata:",pddata[:10])

if __name__=='__main__':
    readDivDataandSavetoCSV()

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ15101117,本站将立刻清除。

联系我们

在线咨询:点击这里给我发消息

微信号:666666