【金融数据接口】wind数据python使用教程

您所在的位置:网站首页 wind数据库怎么下载 【金融数据接口】wind数据python使用教程

【金融数据接口】wind数据python使用教程

2024-06-17 07:45| 来源: 网络整理| 查看: 265

目录

(1)接口手册

(2)包安装与接口调用

(3)常用接口

A.获取k线数据(wsd)

参数说明

集成在options中的参数

传参细节说明

返回说明

示例说明

B.获取实时行情数据(wsq)

C.获证券代码(wset)

代码获取方法

获取期货品种代码

获取股票、债券和期权代码

(4)判断wind是否在运行以及获取数据是否正常

(1)接口手册 wind客户端接口手册获取 旧版:登录wind → 量化 → API接口 → Python → 接口手册新版:登录wind → 发现 → Client API → Python → 接口手册代码生成器:登录wind → 发现 → 代码生成器C接口文档:3. 获取日时间序列函数w.wsd · Wind C#接口 · 看云

(2)包安装与接口启动

1.安装

安装python打开wind,点击“我的/插件修复”选项,出现下方的界面,点击“修复Python接口”,会弹出接口的相关说明

2.调用

首先,用户必须加载WindPy,然后执行w.start()启动API接口

from WindPy import w #w.start() # 默认命令超时时间为120秒 w.start(waitTime = 60) # 如需设置超时时间可以加入waitTime参数,例如waitTime=60,即设置命令超时时间为60秒 result = w.isconnected() # 判断WindPy是否已经登录成功 print(result) # True w.stop() # 当需要停止WindPy时,可以使用该命令 # w.start不重复启动,若需要改变参数,如超时时间,用户可以使用w.stop命令先停止后再启动。 # 退出时,会自动执行w.stop(),一般用户并不需要执行w.stop # 需要注意的是,程序退出时会自动执行w.stop(),因此一般用户并不需要执行w.stop()

(3)常用接口 A.获取k线数据(wsd)

w.wsd(codes, fields, beginTime, endTime, options)

支持股票、债券、基金、期货、指数等多种证券的基本资料、股东信息、市场行情、证券分析、预测评级、财务数据等各种数据。wsd可以支持取 多品种单指标 或者 单品种多指标 的时间序列数据。

参数说明

参数

类型

可选

默认值

说明

codes

str或list

证券代码,支持获取单品种或多品种,如“600030.SH”或[“600010.SH”,“000001.SZ”]

fields

str或list

指标列表,支持获取单指标或多指标,,如“CLOSE,HIGH,LOW,OPEN”

beginTime

str或datetime

endTime

起始日期,为空默认为截止日期,如: "2016-01-01"、“20160101”、“2016/01/01”、"-5D"(当前日期前推5个交易日)、datetime/date类型

endTime

str或datetime

系统当前日期

如: "2016-01-05"、“20160105”、“2016/01/05”、"-2D"(当前日期前推2个交易日) 、datetime/date类型

options

str

“”

options以字符串的形式集成多个参数,具体见代码生成器。如无相关参数设置,可以不给option赋值或者使用options=""

以分号分割,比如"returnType=1;PriceAdj=CP"

集成在options中的参数

参数

类型

可选

默认值

说明

Days

str

'Trading'

日期选项,参数值含义如下:

Weekdays: 工作日,

Alldays: 日历日,

Trading: 交易日

Fill

str

'Blank'

空值填充方式。参数值含义如下:

Previous:沿用前值,

Blank:返回空值

如需选择自设数值填充,在options添加“ShowBlank=X", 其中X为自设数。

Order

str

'A'

日期排序,“A”:升序,“D”:降序

Period

str

'D'

取值周期。参数值含义如下:

D:天,

W:周,

M:月,

Q:季度,

S:半年,

Y:年

TradingCalendar

str

'SSE'

交易日对应的交易所。参数值含义如下:

SSE :上海证券交易所,

SZSE:深圳证券交易所,

CFFE:中金所,

TWSE:台湾证券交易所,

DCE:大商所,

NYSE:纽约证券交易所,

CZCE:郑商所,

COMEX:纽约金属交易所,

SHFE:上期所,

NYBOT:纽约期货交易所,

HKEX:香港交易所,

CME:芝加哥商业交易所,

Nasdaq:纳斯达克证券交易所,

NYMEX:纽约商品交易所,

CBOT:芝加哥商品交易所,

LME:伦敦金属交易所,

IPE:伦敦国际石油交易所

Currency

str

'Original'

输入币种。参数值含义如下:

Original:“原始货币”,

HKD:“港币”,

USD:“美元”,

CNY:“人民币”

PriceAdj

str

不复权

股票和基金(复权方式)。参数值含义如下:

F:前复权,

B:后复权,

T:定点复权;债券(价格类型)

CP:净价,

DP:全价,

MP:市价,

YTM:收益率

传参细节说明 Fields和Parameter也可以传入list,比如可以用[“CLOSE”,“HIGH”,“LOW”,“OPEN”]替代“CLOSE,HIGH,LOW,OPEN”;获取多个证券数据时,Fields只能选择一个。日期支持相对日期宏表达方式,日期宏具体使用方式参考'日期宏’部分内容options为可选参数,可选参数多个,在参数说明详细罗列。wsd函数支持输出DataFrame数据格式,需要函数添加参数usedf=True,可以使用usedfdt=True来填充DataFrame输出NaT的日期。

fields常见指标

open:开盘价high:当日最高价low:当日最低价close:当日收盘价pre_close:昨日收盘价volume:当日成交量amt:即amount,成交金额dealnum:下单量chg:涨跌额pct_chg:涨跌幅vwap:成交量加权平均价trade_status:交易状态turn:换手率free_turn:自由股换手率rel_ipo_chg:相较于首次公开发行时的涨跌额rel_ipo_pct_chg:相较于首次公开发行时的涨跌幅度pe_ttm:Price earnings ratio,市盈率。TTM:Trailing Twelve Months,即消除季节等时序因素的影响pe_lyr:LYR:Last Year Ratio。即以当前总市值,除以去年一年的总净润,表示静态市盈率pb_lf:Price-to-Book Ratio,市净率。表示每股股价除以每股净资产;LF:Last File,表示每股净资产应该使用最新公告中的数据ps_lyr:Price-to-Sales Ratio,市销率。ev:Enterprise Value,即总市值pcf_ocf_ttm:Price Cash Flow Ratio 市现率; Operating Cash Flow,经营现金流trade_status:交易状态

返回说明

如果不指定usedf=True,该函数将返回一个WindData对象,包含以下成员:

返回码

解释

说明

ErrorCode

错误ID

返回代码运行错误码,.ErrorCode =0表示代码运行正常。

若为其他则需查找错误原因.

Data

数据列表

返回函数获取的数据

比如读取000592.SZ的close指标从'2017-05-08'到'2017-05-18'区间的数据

返回值为.Data=[[5.12,5.16,5.02,4.9,4.91,5.13,5.35,5.42,5.32],[5.3,5.12,5.17,4.98,4.94,4.93,5.1,5.4,5.4]]

Codes

证券代码列表

返回获取数据的证券代码列表.Codes=[000592.SZ]

Field

指标列表

返回获取数据的指标列表.Fields=[CLOSE]

Times

时间列表

返回获取数据的日期序列.Times=[20170508,20170509,20170510,20170511,20170512,20170515,20170516, 20170517,20170518]

注:以DataFrame 展示数据时,如果取单个标的数据,以指标为维度进行数据展示, 如果取多个标的数据,只能取单个指标,以标的为维度进行数据展示

示例说明 # 任取一只国债010107.SH六月份以来的净值历史行情数据 column_names = "sec_name,ytm_b,volume,duration,convexity,open,high,low,close,vwap" history_data = w.wsd("010107.SH", column_names, "2018-06-01", "2018-06-11", "returnType=1;PriceAdj=CP", usedf=True) # returnType表示到期收益率计算方法,PriceAdj表示债券价格类型‘ history_data[1].head()

B.获取实时行情数据(wsq)

用这个接口获取实时数据的下载量是有限制的,超过一定量就要额外收费

from WindPy import w w.start() data = w.wsq("000920.SZ, 002573.SZ", "rt_last, rt_open, rt_low, rt_last_vol, rt_high, rt_pre_close", func="DemoWSQCallback") ''' rt_last: 最新实时价格 rt_open: 今日开盘价 rt_low: 开盘到当前时间之间的最低价 rt_last_vol: 开盘到当前时间之间的成交量 rt_high: 开盘到当前时间之间的最高价 rt_pre_close: 前一日收盘价 ''' print(data) ''' .ErrorCode=0 .Codes=[000920.SZ,002573.SZ] .Fields=[RT_LAST,RT_OPEN,RT_LOW,RT_LAST_VOL,RT_HIGH,RT_PRE_CLOSE] .Times=[20221107 14:01:42] .Data=[ [10.15,6.390000000000001], [10.15,5.92], [10.15,5.86], [1200.0,200.0], [10.15,6.390000000000001], [9.23,5.8100000000000005] ] ''' print(data.Data)

C.获取证券代码(wset) 代码获取方法

wind客户端首页→代码生成器→数据集WSET→板块与指数→板块成分

→ 在坐标(sectorID,编辑)处进行板块选择期货 → 选某个交易所 → 选择全部品种

获取期货品种代码

download_future_codeList.py

from WindPy import w w.start() import datetime as dt def main(): today = dt.datetime.now().strftime(("%Y-%m-%d")) # print(type(today), today) # 如果当天非交易日,则不下载数据 pass savepath = "./Instruments.csv" writefile = open(savepath, "w") # (1)下载中金所期货合约代码 result = w.wset("sectorconstituent", f"date={today};sectorid=a599010101000000") # print(result) data = result.Data # print(data) # print(data[1]) for item in data[1]: code = item.split(".")[0] writefile.write(code + ",CFFEX\n") # (2)下载上期所 result = w.wset("sectorconstituent", f"date={today};sectorid=a599010201000000") data = result.Data # print(data) # print(data[1]) for item in data[1]: code = item.split(".")[0].lower() writefile.write(code + ",SHFE\n") # (3)下载上海能源中心 result = w.wset("sectorconstituent", f"date={today};sectorid=1000041395000000") data = result.Data # print(data) for item in data[1]: code = item.split(".")[0].lower() writefile.write(code + ",INE\n") # (4)下载大商所 result = w.wset("sectorconstituent", f"date={today};sectorid=a599010301000000") data = result.Data for item in data[1]: code = item.split(".")[0].lower() writefile.write(code + ",DCE\n") # (5)下载郑商所 result = w.wset("sectorconstituent", f"date={today};sectorid=a599010401000000") data = result.Data # print(data) for item in data[1]: code = item.split(".")[0] writefile.write(code + ",CZCE\n") # (6)下载广州所 result = w.wset("sectorconstituent", f"date={today};sectorid=1000046789000000") data = result.Data # print(data) for item in data[1]: code = item.split(".")[0].lower() writefile.write(code + ",GFE\n") writefile.close() if __name__ == "__main__": main() 获取股票、债券和期权代码 import datetime as dt from WindPy import w w.start() def is_connect_wind(): # 检测wind是否在运行 # 返回True或者False return w.isconnected() def save_data(data_list, save_path): """ data_list: 数据,元素为"601669.SSE"这样 save_path: 保存路径 """ if len(data_list) > 0: writefile = open(save_path, "w") for code in data_list: writefile.write(code + "\n") writefile.close() def get_stock_code_wind(): """ 获取wind股票代码 """ # 当日日期 today = dt.datetime.now().strftime("%Y-%m-%d") # 调用wind接口获取全部A股代码 result = w.wset("sectorconstituent", f"date={today};sectorid=a001010100000000") stock_code_list = [] # 判断代码运行是否正常 if result.ErrorCode == 0: # print(result) data = result.Data # print(data) # print(data[1]) # 判断数据是否为空 if len(data) > 0: for item in data[1]: # print(item) if item.find("SZ") != -1 or item.find("SH") != -1: stock_code_list.append(item) else: # print("len(result.Data) == 0") return [] else: # print("result.ErrorCode != 0, exist error") return [] # 若未成功获取数据,则返回空列表 if len(stock_code_list) > 0: return stock_code_list else: return [] def get_index_code_wind(): """ 获取wind指数代码 """ # 当日日期 today = dt.datetime.now().strftime("%Y-%m-%d") # 调用wind接口获取全部指数代码 index_code_list = [] # a.调用wind接口获取上证系列指数代码 result = w.wset("sectorconstituent", f"date={today};sectorid=1000002442000000") # 判断代码运行是否正常 if result.ErrorCode == 0: # print(result) data = result.Data # print(data) # print(data[1]) # [3]判断数据是否为空 if len(data) > 0: for item in data[1]: # print(item) if item.find("SZ") != -1 and len(item) == 9: index_code_list.append(item) elif item.find("SH") != -1 and len(item) == 9: index_code_list.append(item) else: # print("len(result.Data) == 0") return [] else: # print("result.ErrorCode != 0, exist error") return [] # b.调用wind接口获取中证系列指数代码 result = w.wset("sectorconstituent", f"date={today};sectorid=a399010104000000") # 判断代码运行是否正常 if result.ErrorCode == 0: # print(result) data = result.Data # print(data) # print(data[1]) # 判断数据是否为空 if len(data) > 0: for item in data[1]: # print(item) if item.find("SZ") != -1 and len(item) == 9: index_code_list.append(item) elif item.find("SH") != -1 and len(item) == 9: index_code_list.append(item) else: # print("len(result.Data) == 0") return [] else: # print("result.ErrorCode != 0, exist error") return [] # c.调用wind接口获取深证系列指数代码 result = w.wset("sectorconstituent", f"date={today};sectorid=1000003626000000") # [2]判断代码运行是否正常 if result.ErrorCode == 0: # print(result) data = result.Data # print(data) # print(data[1]) # [3]判断数据是否为空 if len(data) > 0: for item in data[1]: # print(item) if item.find("SZ") != -1and len(item) == 9: index_code_list.append(item) elif item.find("SH") != -1 and len(item) == 9: index_code_list.append(item) else: # print("len(result.Data) == 0") return [] else: # print("result.ErrorCode != 0, exist error") return [] # 若未成功获取数据,则返回空列表 if len(index_code_list) > 0: return index_code_list else: return [] def get_bond_code_wind(): """ 获取wind债券代码,含可转债 """ # 当日日期 today = dt.datetime.now().strftime("%Y-%m-%d") # 调用wind接口获取全部债券代码 bond_code_list = [] # a.调用wind接口获取上交所债券代码 result = w.wset("sectorconstituent", f"date={today};sectorid=a101010200000000") # 判断代码运行是否正常 if result.ErrorCode == 0: # print(result) data = result.Data # print(data) # print(data[1]) # [3]判断数据是否为空 if len(data) > 0: for item in data[1]: # print(item) if item.find("SZ") != -1 and len(item) == 9: bond_code_list.append(item) elif item.find("SH") != -1 and len(item) == 9: bond_code_list.append(item) else: # print("len(result.Data) == 0") return [] else: # print("result.ErrorCode != 0, exist error") return [] # b.调用wind接口获取深交所债券代码 result = w.wset("sectorconstituent", f"date={today};sectorid=a101010300000000") # 判断代码运行是否正常 if result.ErrorCode == 0: # print(result) data = result.Data # print(data) # print(data[1]) # 判断数据是否为空 if len(data) > 0: for item in data[1]: # print(item) if item.find("SZ") != -1 and len(item) == 9: bond_code_list.append(item) elif item.find("SH") != -1 and len(item) == 9: bond_code_list.append(item) else: # print("len(result.Data) == 0") return [] else: # print("result.ErrorCode != 0, exist error") return [] # 若未成功获取数据,则返回空列表 if len(bond_code_list) > 0: return bond_code_list else: return [] def get_convert_bond_code_wind(): """ 获取wind可转债代码 """ # 当日日期 today = dt.datetime.now().strftime("%Y-%m-%d") # 调用wind接口获取全部可转债券代码 convert_bond_code_list = [] # a.调用wind接口获取上交所可转债券代码 result = w.wset("sectorconstituent", f"date={today};sectorid=a101010206000000") # 判断代码运行是否正常 if result.ErrorCode == 0: # print(result) data = result.Data # print(data) # print(data[1]) # [3]判断数据是否为空 if len(data) > 0: for item in data[1]: # print(item) if item.find("SZ") != -1 and len(item) == 9: convert_bond_code_list.append(item) elif item.find("SH") != -1 and len(item) == 9: convert_bond_code_list.append(item) else: # print("len(result.Data) == 0") return [] else: # print("result.ErrorCode != 0, exist error") return [] # b.调用wind接口获取深交所可转债券代码 result = w.wset("sectorconstituent", f"date={today};sectorid=a101010306000000") # 判断代码运行是否正常 if result.ErrorCode == 0: # print(result) data = result.Data # print(data) # print(data[1]) # 判断数据是否为空 if len(data) > 0: for item in data[1]: # print(item) if item.find("SZ") != -1 and len(item) == 9: convert_bond_code_list.append(item) elif item.find("SH") != -1 and len(item) == 9: convert_bond_code_list.append(item) else: # print("len(result.Data) == 0") return [] else: # print("result.ErrorCode != 0, exist error") return [] # 若未成功获取数据,则返回空列表 if len(convert_bond_code_list) > 0: return convert_bond_code_list else: return [] def get_stock_option_code_wind(): """ 获取wind股票期权代码 """ # 当日日期 today = dt.datetime.now().strftime("%Y-%m-%d") # 调用wind接口获取全部期权代码 stock_option_code_list = [] # a.调用wind接口获取上交所期权代码 result = w.wset("sectorconstituent", f"date={today};sectorid=1000018859000000") # 判断代码运行是否正常 if result.ErrorCode == 0: # print(result) data = result.Data # print(data) # print(data[1]) # [3]判断数据是否为空 if len(data) > 0: # print(data) for item in data[1]: # print(item) if item.find("SZ") != -1: stock_option_code_list.append(item) elif item.find("SH") != -1: stock_option_code_list.append(item) else: # print("len(result.Data) == 0") return [] else: # print("result.ErrorCode != 0, exist error") return [] # b.调用wind接口获取深交所期权代码 result = w.wset("sectorconstituent", f"date={today};sectorid=1000034419000000") # 判断代码运行是否正常 if result.ErrorCode == 0: # print(result) data = result.Data # print(data) # print(data[1]) # 判断数据是否为空 if len(data) > 0: # print(data) for item in data[1]: # print(item) if item.find("SZ") != -1: stock_option_code_list.append(item) elif item.find("SH") != -1: stock_option_code_list.append(item) else: # print("len(result.Data) == 0") return [] else: # print("result.ErrorCode != 0, exist error") return [] # 若未成功获取数据,则返回空列表 if len(stock_option_code_list) > 0: return stock_option_code_list else: return [] def get_future_option_code_wind(): """ 获取wind期货期权代码 """ # 当日日期 today = dt.datetime.now().strftime("%Y-%m-%d") # 调用wind接口获取全部期权代码 future_option_code_list = [] exchange_list = [ ["1000034440000000", "中金所"], ["1000021571000000", "上期所"], ["1000041406000000", "上期能源"], ["1000033252000000", "大商所"], ["1000016058000000", "郑商所"], ["1000046211000000", "广期所"] ] # 调用wind接口获取期权代码 for i in range(len(exchange_list)): sectorid = exchange_list[i][0] exchange = exchange_list[i][1] result = w.wset("sectorconstituent", f"date={today};sectorid={sectorid}") # 判断代码运行是否正常 if result.ErrorCode == 0: # print(result) data = result.Data # print(data) # print(data[1]) # [3]判断数据是否为空 if len(data) > 0: # print(data) for item in data[1]: # print(item) temp_list = item.split(".") suffix = "." if exchange == "中金所": suffix += "CFE" elif exchange == "上期所": suffix += "SFE" elif exchange == "上期能源": suffix += "INE" elif exchange == "大商所": suffix += "DCE" elif exchange == "郑商所": suffix += "ZCE" elif exchange == "广期所": suffix += "GFE" code = temp_list[0] + suffix future_option_code_list.append(code) else: # print("len(result.Data) == 0") return [] else: # print("result.ErrorCode != 0, exist error") return [] # 若未成功获取数据,则返回空列表 if len(future_option_code_list) > 0: return future_option_code_list else: return [] (4)判断wind是否在运行以及获取数据是否正常

是否连接成功:w.isconnected(),值为True则正常

获取数据是否正常:result.ErrorCode,值为0则正常

from WindPy import w import datetime as dt import shutil import os w.start() def download_future_code_wind(save_path): # 当日日期 today = dt.datetime.now().strftime(("%Y-%m-%d")) # print(type(today), today) # 如果当天非交易日,则不下载数据 pass # 备份之前生成的文件 if os.path.exists(save_path): temp_list = save_path.split(".") bakeup_path = temp_list[0] + "_bakeup." + temp_list[1] shutil.copyfile(save_path, bakeup_path) is_get_wind_data = True # 是否成功获取到wind数据 while True: writefile = open(save_path, "w") # 下载中金所期货合约代码 result = w.wset("sectorconstituent", f"date={today};sectorid=a599010101000000") # 2.判断代码运行是否正常 if result.ErrorCode == 0: # print(result) data = result.Data # print(data) # print(data[1]) # 3.判断数据是否为空 if len(data) > 0: for item in data[1]: code = item.split(".")[0] writefile.write(code + ",CFFEX\n") else: is_get_wind_data = False break else: is_get_wind_data = False break writefile.close() break # 若未成功获取数据,则用备份的那个文件替换保存文件 if not is_get_wind_data: print("无法获取到wind数据") if os.path.exists(save_path): os.remove(save_path) temp_list = save_path.split(".") bakeup_path = temp_list[0] + "_bakeup." + temp_list[1] if os.path.exists(bakeup_path): shutil.copyfile(bakeup_path, save_path) if __name__ == "__main__": # 要检测wind是否正在运行,还要检测以及能否获取到数据 # 1.检测wind是否在运行 is_connect_wind = w.isconnected() print(f"is_connect_wind={is_connect_wind}") if is_connect_wind: print("use wind to get future codeList") savepath = "./Instruments.csv" download_future_code_wind(savepath)

end



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3