用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,本站将立刻清除。