用python做量化买卖还行,简略,库文件多,不必自己造车轮。可是大周期数据的数据除权十分要害,网上没有“正确的”除权数据,就写了个函数,直接从大智慧读取除权数据,对原始K线数据做清洗加工,这样我的体系中的除权计算成果就和大智慧的数据共同。

黄金配资咨询,黄金配资咨询

运用方法:

迁安在线配资,迁安在线配资

1,在大智慧体系中“接纳除权数据” (在下载数据里边有)

国开开展基金有限公司,国开开展基金有限公司

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

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

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

程序代码:

import structimport timeimport reimport pandas as pddef 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()