欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

通过Python进行股票行情量化(Wind)

程序员文章站 2022-03-15 15:02:14
1.本文取某交易月最后5个交易日的数据2.取5次全部A股一天的数据还是取全部A股数5天:a.领导要求每只股票存成一个文件,这样比较方便;b.通过time库在本机测得,取数据和写文件时间比大约1:3,耗时更多在写文件;c.本机程序运行大约25分钟,如果取5次全部A股一天的数据,会造成内存长时间占用较大,且还存在将取得的数据合并、分组、排序的时间开销import datetimeimport mathimport osimport pandas as pdimport xlsxwriter...

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


本文地址:https://blog.csdn.net/tianxiefenxiang/article/details/110941105