Python(Wind)による株式市場の定量化

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)))


おすすめ

転載: blog.csdn.net/tianxiefenxiang/article/details/110941105
おすすめ