赞
踩
目录
1.安装
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()
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" |
参数 | 类型 | 可选 | 默认值 | 说明 |
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常见指标
如果不指定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()
用这个接口获取实时数据的下载量是有限制的,超过一定量就要额外收费
- 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)
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 []
是否连接成功: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 © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。