1.本文取某交易月最后5个交易日的数据
2.取5次全部A股一天的数据还是取全部A股数5天:
a.领导要求每只股票存成一个文件,这样比较方便;
b.通过time库在本机测得,取数据和写文件时间比大约1:3,耗时更多在写文件;
c.本机程序运行大约25分钟,如果取5次全部A股一天的数据,会造成内存长时间占用较大,且还存在将取得的数据合并、分组、排序的时间开销
import datetime
import math
import os
import pandas as pd
import xlsxwriter as xlsx
from click import progressbar # 进度条
from WindPy import *
folder_target = "C:\\stocks\\"
def check_result(data):
if data.ErrorCode != 0:
print("Error[" + str(data.ErrorCode) + "]\n")
sys.exit()
if os.path.exists(folder_target) == False:
os.mkdir(folder_target)
w.start()
today = ""
print("\n请输入要导出的数据的下一交易月第一天,如需导出2020年11月最后5天,则输入 2020-12-01")
today = input("\n请输入:")
# 简单验证
while today[-2:] != "01":
today = input("\n输入格式错误,请从新输入:")
today = today + "T00:00:00"
endTime = w.tdaysoffset(-1, today, "Period=D;Days=Trading").Times[0]
beginTime = w.tdaysoffset(-5, today, "Period=D;Days=Trading").Times[0]
res = w.wset(
"sectorconstituent", "date=%s;sectorid=a001010100000000" % (str(beginTime))
)
check_result(res)
fields = ["pre_close", "open", "high", "low", "close", "vwap"]
with progressbar(length=len(res.Data[1])) as pbar:
print("\n导出进度:")
for i, code in enumerate(res.Data[1]):
stock = w.wsd(
codes=code,
fields=fields,
beginTime=beginTime,
endTime=endTime,
options="Fill=Previous",
)
excel = xlsx.Workbook("%s.xlsx" % (folder_target + code))
sheet = excel.add_worksheet(code)
sheet.write(0, 0, "代码")
sheet.write(0, 1, "简称")
sheet.write(0, 2, "日期")
sheet.write(0, 3, "前收盘价(元)")
sheet.write(0, 4, "开盘价(元)")
sheet.write(0, 5, "最高价(元)")
sheet.write(0, 6, "最低价(元)")
sheet.write(0, 7, "收盘价(元)")
sheet.write(0, 8, "均价(元)")
for dateN in range(1, 6):
sheet.write(dateN, 0, code)
sheet.write(dateN, 1, res.Data[2][i])
sheet.write(dateN, 2, str(stock.Times[dateN - 1]))
for fieldsN in range(0, len(fields)):
sheet.write(
dateN,
3 + fieldsN,
"--"
if math.isnan(stock.Data[fieldsN][dateN - 1])
else stock.Data[fieldsN][dateN - 1],
)
excel.close()
pbar.update(1)
input("\n%s-%s五个交易日行情导出完成!" % (str(beginTime), str(endTime)))