1.この記事は、特定の取引月の過去5取引日の
データを取得します。2。すべてのA株のデータを1日5回、またはすべてのA株のデータを5日間取得する
方が便利です。リーダーは、各株をファイルとして保存する必要があります。これは、より便利です
。b。このマシンのタイムライブラリで測定すると、データのフェッチとファイルの書き込みにかかる時間は約1:3であり、ファイルの書き込みに時間がかかります。
c。マシンプログラムは約25分間実行され、すべてのA共有を1日に5回データをフェッチすると、長時間にわたって大量のメモリが占有されます。また、マージ、グループ化、および並べ替えの時間オーバーヘッドもあります。取得したデータ
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)))