当前位置:   article > 正文

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

windpy

目录

(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接口

  1. from WindPy import w
  2. #w.start() # 默认命令超时时间为120秒
  3. w.start(waitTime = 60)
  4. # 如需设置超时时间可以加入waitTime参数,例如waitTime=60,即设置命令超时时间为60秒
  5. result = w.isconnected() # 判断WindPy是否已经登录成功
  6. print(result) # True
  7. w.stop()
  8. # 当需要停止WindPy时,可以使用该命令
  9. # w.start不重复启动,若需要改变参数,如超时时间,用户可以使用w.stop命令先停止后再启动。
  10. # 退出时,会自动执行w.stop(),一般用户并不需要执行w.stop
  11. # 需要注意的是,程序退出时会自动执行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:收益率

传参细节说明

  1. Fields和Parameter也可以传入list,比如可以用[“CLOSE”,“HIGH”,“LOW”,“OPEN”]替代“CLOSE,HIGH,LOW,OPEN”;
  2. 获取多个证券数据时,Fields只能选择一个。
  3. 日期支持相对日期宏表达方式,日期宏具体使用方式参考'日期宏’部分内容
  4. options为可选参数,可选参数多个,在参数说明详细罗列。
  5. 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 展示数据时,如果取单个标的数据,以指标为维度进行数据展示, 如果取多个标的数据,只能取单个指标,以标的为维度进行数据展示

示例说明

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

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

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

  1. from WindPy import w
  2. w.start()
  3. data = w.wsq("000920.SZ, 002573.SZ",
  4. "rt_last, rt_open, rt_low, rt_last_vol, rt_high, rt_pre_close",
  5. func="DemoWSQCallback")
  6. '''
  7. rt_last: 最新实时价格
  8. rt_open: 今日开盘价
  9. rt_low: 开盘到当前时间之间的最低价
  10. rt_last_vol: 开盘到当前时间之间的成交量
  11. rt_high: 开盘到当前时间之间的最高价
  12. rt_pre_close: 前一日收盘价
  13. '''
  14. print(data)
  15. '''
  16. .ErrorCode=0
  17. .Codes=[000920.SZ,002573.SZ]
  18. .Fields=[RT_LAST,RT_OPEN,RT_LOW,RT_LAST_VOL,RT_HIGH,RT_PRE_CLOSE]
  19. .Times=[20221107 14:01:42]
  20. .Data=[
  21. [10.15,6.390000000000001],
  22. [10.15,5.92],
  23. [10.15,5.86],
  24. [1200.0,200.0],
  25. [10.15,6.390000000000001],
  26. [9.23,5.8100000000000005]
  27. ]
  28. '''
  29. print(data.Data)

C.获取证券代码(wset)

代码获取方法

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

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

获取期货品种代码

download_future_codeList.py

  1. from WindPy import w
  2. w.start()
  3. import datetime as dt
  4. def main():
  5. today = dt.datetime.now().strftime(("%Y-%m-%d"))
  6. # print(type(today), today)
  7. # 如果当天非交易日,则不下载数据
  8. pass
  9. savepath = "./Instruments.csv"
  10. writefile = open(savepath, "w")
  11. # (1)下载中金所期货合约代码
  12. result = w.wset("sectorconstituent", f"date={today};sectorid=a599010101000000")
  13. # print(result)
  14. data = result.Data
  15. # print(data)
  16. # print(data[1])
  17. for item in data[1]:
  18. code = item.split(".")[0]
  19. writefile.write(code + ",CFFEX\n")
  20. # (2)下载上期所
  21. result = w.wset("sectorconstituent", f"date={today};sectorid=a599010201000000")
  22. data = result.Data
  23. # print(data)
  24. # print(data[1])
  25. for item in data[1]:
  26. code = item.split(".")[0].lower()
  27. writefile.write(code + ",SHFE\n")
  28. # (3)下载上海能源中心
  29. result = w.wset("sectorconstituent", f"date={today};sectorid=1000041395000000")
  30. data = result.Data
  31. # print(data)
  32. for item in data[1]:
  33. code = item.split(".")[0].lower()
  34. writefile.write(code + ",INE\n")
  35. # (4)下载大商所
  36. result = w.wset("sectorconstituent", f"date={today};sectorid=a599010301000000")
  37. data = result.Data
  38. for item in data[1]:
  39. code = item.split(".")[0].lower()
  40. writefile.write(code + ",DCE\n")
  41. # (5)下载郑商所
  42. result = w.wset("sectorconstituent", f"date={today};sectorid=a599010401000000")
  43. data = result.Data
  44. # print(data)
  45. for item in data[1]:
  46. code = item.split(".")[0]
  47. writefile.write(code + ",CZCE\n")
  48. # (6)下载广州所
  49. result = w.wset("sectorconstituent", f"date={today};sectorid=1000046789000000")
  50. data = result.Data
  51. # print(data)
  52. for item in data[1]:
  53. code = item.split(".")[0].lower()
  54. writefile.write(code + ",GFE\n")
  55. writefile.close()
  56. if __name__ == "__main__":
  57. main()

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

  1. import datetime as dt
  2. from WindPy import w
  3. w.start()
  4. def is_connect_wind():
  5. # 检测wind是否在运行
  6. # 返回True或者False
  7. return w.isconnected()
  8. def save_data(data_list, save_path):
  9. """
  10. data_list: 数据,元素为"601669.SSE"这样
  11. save_path: 保存路径
  12. """
  13. if len(data_list) > 0:
  14. writefile = open(save_path, "w")
  15. for code in data_list:
  16. writefile.write(code + "\n")
  17. writefile.close()
  18. def get_stock_code_wind():
  19. """
  20. 获取wind股票代码
  21. """
  22. # 当日日期
  23. today = dt.datetime.now().strftime("%Y-%m-%d")
  24. # 调用wind接口获取全部A股代码
  25. result = w.wset("sectorconstituent", f"date={today};sectorid=a001010100000000")
  26. stock_code_list = []
  27. # 判断代码运行是否正常
  28. if result.ErrorCode == 0:
  29. # print(result)
  30. data = result.Data
  31. # print(data)
  32. # print(data[1])
  33. # 判断数据是否为空
  34. if len(data) > 0:
  35. for item in data[1]:
  36. # print(item)
  37. if item.find("SZ") != -1 or item.find("SH") != -1:
  38. stock_code_list.append(item)
  39. else:
  40. # print("len(result.Data) == 0")
  41. return []
  42. else:
  43. # print("result.ErrorCode != 0, exist error")
  44. return []
  45. # 若未成功获取数据,则返回空列表
  46. if len(stock_code_list) > 0:
  47. return stock_code_list
  48. else:
  49. return []
  50. def get_index_code_wind():
  51. """
  52. 获取wind指数代码
  53. """
  54. # 当日日期
  55. today = dt.datetime.now().strftime("%Y-%m-%d")
  56. # 调用wind接口获取全部指数代码
  57. index_code_list = []
  58. # a.调用wind接口获取上证系列指数代码
  59. result = w.wset("sectorconstituent", f"date={today};sectorid=1000002442000000")
  60. # 判断代码运行是否正常
  61. if result.ErrorCode == 0:
  62. # print(result)
  63. data = result.Data
  64. # print(data)
  65. # print(data[1])
  66. # [3]判断数据是否为空
  67. if len(data) > 0:
  68. for item in data[1]:
  69. # print(item)
  70. if item.find("SZ") != -1 and len(item) == 9:
  71. index_code_list.append(item)
  72. elif item.find("SH") != -1 and len(item) == 9:
  73. index_code_list.append(item)
  74. else:
  75. # print("len(result.Data) == 0")
  76. return []
  77. else:
  78. # print("result.ErrorCode != 0, exist error")
  79. return []
  80. # b.调用wind接口获取中证系列指数代码
  81. result = w.wset("sectorconstituent", f"date={today};sectorid=a399010104000000")
  82. # 判断代码运行是否正常
  83. if result.ErrorCode == 0:
  84. # print(result)
  85. data = result.Data
  86. # print(data)
  87. # print(data[1])
  88. # 判断数据是否为空
  89. if len(data) > 0:
  90. for item in data[1]:
  91. # print(item)
  92. if item.find("SZ") != -1 and len(item) == 9:
  93. index_code_list.append(item)
  94. elif item.find("SH") != -1 and len(item) == 9:
  95. index_code_list.append(item)
  96. else:
  97. # print("len(result.Data) == 0")
  98. return []
  99. else:
  100. # print("result.ErrorCode != 0, exist error")
  101. return []
  102. # c.调用wind接口获取深证系列指数代码
  103. result = w.wset("sectorconstituent", f"date={today};sectorid=1000003626000000")
  104. # [2]判断代码运行是否正常
  105. if result.ErrorCode == 0:
  106. # print(result)
  107. data = result.Data
  108. # print(data)
  109. # print(data[1])
  110. # [3]判断数据是否为空
  111. if len(data) > 0:
  112. for item in data[1]:
  113. # print(item)
  114. if item.find("SZ") != -1and len(item) == 9:
  115. index_code_list.append(item)
  116. elif item.find("SH") != -1 and len(item) == 9:
  117. index_code_list.append(item)
  118. else:
  119. # print("len(result.Data) == 0")
  120. return []
  121. else:
  122. # print("result.ErrorCode != 0, exist error")
  123. return []
  124. # 若未成功获取数据,则返回空列表
  125. if len(index_code_list) > 0:
  126. return index_code_list
  127. else:
  128. return []
  129. def get_bond_code_wind():
  130. """
  131. 获取wind债券代码,含可转债
  132. """
  133. # 当日日期
  134. today = dt.datetime.now().strftime("%Y-%m-%d")
  135. # 调用wind接口获取全部债券代码
  136. bond_code_list = []
  137. # a.调用wind接口获取上交所债券代码
  138. result = w.wset("sectorconstituent", f"date={today};sectorid=a101010200000000")
  139. # 判断代码运行是否正常
  140. if result.ErrorCode == 0:
  141. # print(result)
  142. data = result.Data
  143. # print(data)
  144. # print(data[1])
  145. # [3]判断数据是否为空
  146. if len(data) > 0:
  147. for item in data[1]:
  148. # print(item)
  149. if item.find("SZ") != -1 and len(item) == 9:
  150. bond_code_list.append(item)
  151. elif item.find("SH") != -1 and len(item) == 9:
  152. bond_code_list.append(item)
  153. else:
  154. # print("len(result.Data) == 0")
  155. return []
  156. else:
  157. # print("result.ErrorCode != 0, exist error")
  158. return []
  159. # b.调用wind接口获取深交所债券代码
  160. result = w.wset("sectorconstituent", f"date={today};sectorid=a101010300000000")
  161. # 判断代码运行是否正常
  162. if result.ErrorCode == 0:
  163. # print(result)
  164. data = result.Data
  165. # print(data)
  166. # print(data[1])
  167. # 判断数据是否为空
  168. if len(data) > 0:
  169. for item in data[1]:
  170. # print(item)
  171. if item.find("SZ") != -1 and len(item) == 9:
  172. bond_code_list.append(item)
  173. elif item.find("SH") != -1 and len(item) == 9:
  174. bond_code_list.append(item)
  175. else:
  176. # print("len(result.Data) == 0")
  177. return []
  178. else:
  179. # print("result.ErrorCode != 0, exist error")
  180. return []
  181. # 若未成功获取数据,则返回空列表
  182. if len(bond_code_list) > 0:
  183. return bond_code_list
  184. else:
  185. return []
  186. def get_convert_bond_code_wind():
  187. """
  188. 获取wind可转债代码
  189. """
  190. # 当日日期
  191. today = dt.datetime.now().strftime("%Y-%m-%d")
  192. # 调用wind接口获取全部可转债券代码
  193. convert_bond_code_list = []
  194. # a.调用wind接口获取上交所可转债券代码
  195. result = w.wset("sectorconstituent", f"date={today};sectorid=a101010206000000")
  196. # 判断代码运行是否正常
  197. if result.ErrorCode == 0:
  198. # print(result)
  199. data = result.Data
  200. # print(data)
  201. # print(data[1])
  202. # [3]判断数据是否为空
  203. if len(data) > 0:
  204. for item in data[1]:
  205. # print(item)
  206. if item.find("SZ") != -1 and len(item) == 9:
  207. convert_bond_code_list.append(item)
  208. elif item.find("SH") != -1 and len(item) == 9:
  209. convert_bond_code_list.append(item)
  210. else:
  211. # print("len(result.Data) == 0")
  212. return []
  213. else:
  214. # print("result.ErrorCode != 0, exist error")
  215. return []
  216. # b.调用wind接口获取深交所可转债券代码
  217. result = w.wset("sectorconstituent", f"date={today};sectorid=a101010306000000")
  218. # 判断代码运行是否正常
  219. if result.ErrorCode == 0:
  220. # print(result)
  221. data = result.Data
  222. # print(data)
  223. # print(data[1])
  224. # 判断数据是否为空
  225. if len(data) > 0:
  226. for item in data[1]:
  227. # print(item)
  228. if item.find("SZ") != -1 and len(item) == 9:
  229. convert_bond_code_list.append(item)
  230. elif item.find("SH") != -1 and len(item) == 9:
  231. convert_bond_code_list.append(item)
  232. else:
  233. # print("len(result.Data) == 0")
  234. return []
  235. else:
  236. # print("result.ErrorCode != 0, exist error")
  237. return []
  238. # 若未成功获取数据,则返回空列表
  239. if len(convert_bond_code_list) > 0:
  240. return convert_bond_code_list
  241. else:
  242. return []
  243. def get_stock_option_code_wind():
  244. """
  245. 获取wind股票期权代码
  246. """
  247. # 当日日期
  248. today = dt.datetime.now().strftime("%Y-%m-%d")
  249. # 调用wind接口获取全部期权代码
  250. stock_option_code_list = []
  251. # a.调用wind接口获取上交所期权代码
  252. result = w.wset("sectorconstituent", f"date={today};sectorid=1000018859000000")
  253. # 判断代码运行是否正常
  254. if result.ErrorCode == 0:
  255. # print(result)
  256. data = result.Data
  257. # print(data)
  258. # print(data[1])
  259. # [3]判断数据是否为空
  260. if len(data) > 0:
  261. # print(data)
  262. for item in data[1]:
  263. # print(item)
  264. if item.find("SZ") != -1:
  265. stock_option_code_list.append(item)
  266. elif item.find("SH") != -1:
  267. stock_option_code_list.append(item)
  268. else:
  269. # print("len(result.Data) == 0")
  270. return []
  271. else:
  272. # print("result.ErrorCode != 0, exist error")
  273. return []
  274. # b.调用wind接口获取深交所期权代码
  275. result = w.wset("sectorconstituent", f"date={today};sectorid=1000034419000000")
  276. # 判断代码运行是否正常
  277. if result.ErrorCode == 0:
  278. # print(result)
  279. data = result.Data
  280. # print(data)
  281. # print(data[1])
  282. # 判断数据是否为空
  283. if len(data) > 0:
  284. # print(data)
  285. for item in data[1]:
  286. # print(item)
  287. if item.find("SZ") != -1:
  288. stock_option_code_list.append(item)
  289. elif item.find("SH") != -1:
  290. stock_option_code_list.append(item)
  291. else:
  292. # print("len(result.Data) == 0")
  293. return []
  294. else:
  295. # print("result.ErrorCode != 0, exist error")
  296. return []
  297. # 若未成功获取数据,则返回空列表
  298. if len(stock_option_code_list) > 0:
  299. return stock_option_code_list
  300. else:
  301. return []
  302. def get_future_option_code_wind():
  303. """
  304. 获取wind期货期权代码
  305. """
  306. # 当日日期
  307. today = dt.datetime.now().strftime("%Y-%m-%d")
  308. # 调用wind接口获取全部期权代码
  309. future_option_code_list = []
  310. exchange_list = [
  311. ["1000034440000000", "中金所"],
  312. ["1000021571000000", "上期所"],
  313. ["1000041406000000", "上期能源"],
  314. ["1000033252000000", "大商所"],
  315. ["1000016058000000", "郑商所"],
  316. ["1000046211000000", "广期所"]
  317. ]
  318. # 调用wind接口获取期权代码
  319. for i in range(len(exchange_list)):
  320. sectorid = exchange_list[i][0]
  321. exchange = exchange_list[i][1]
  322. result = w.wset("sectorconstituent", f"date={today};sectorid={sectorid}")
  323. # 判断代码运行是否正常
  324. if result.ErrorCode == 0:
  325. # print(result)
  326. data = result.Data
  327. # print(data)
  328. # print(data[1])
  329. # [3]判断数据是否为空
  330. if len(data) > 0:
  331. # print(data)
  332. for item in data[1]:
  333. # print(item)
  334. temp_list = item.split(".")
  335. suffix = "."
  336. if exchange == "中金所":
  337. suffix += "CFE"
  338. elif exchange == "上期所":
  339. suffix += "SFE"
  340. elif exchange == "上期能源":
  341. suffix += "INE"
  342. elif exchange == "大商所":
  343. suffix += "DCE"
  344. elif exchange == "郑商所":
  345. suffix += "ZCE"
  346. elif exchange == "广期所":
  347. suffix += "GFE"
  348. code = temp_list[0] + suffix
  349. future_option_code_list.append(code)
  350. else:
  351. # print("len(result.Data) == 0")
  352. return []
  353. else:
  354. # print("result.ErrorCode != 0, exist error")
  355. return []
  356. # 若未成功获取数据,则返回空列表
  357. if len(future_option_code_list) > 0:
  358. return future_option_code_list
  359. else:
  360. return []

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

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

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

  1. from WindPy import w
  2. import datetime as dt
  3. import shutil
  4. import os
  5. w.start()
  6. def download_future_code_wind(save_path):
  7. # 当日日期
  8. today = dt.datetime.now().strftime(("%Y-%m-%d"))
  9. # print(type(today), today)
  10. # 如果当天非交易日,则不下载数据
  11. pass
  12. # 备份之前生成的文件
  13. if os.path.exists(save_path):
  14. temp_list = save_path.split(".")
  15. bakeup_path = temp_list[0] + "_bakeup." + temp_list[1]
  16. shutil.copyfile(save_path, bakeup_path)
  17. is_get_wind_data = True # 是否成功获取到wind数据
  18. while True:
  19. writefile = open(save_path, "w")
  20. # 下载中金所期货合约代码
  21. result = w.wset("sectorconstituent",
  22. f"date={today};sectorid=a599010101000000")
  23. # 2.判断代码运行是否正常
  24. if result.ErrorCode == 0:
  25. # print(result)
  26. data = result.Data
  27. # print(data)
  28. # print(data[1])
  29. # 3.判断数据是否为空
  30. if len(data) > 0:
  31. for item in data[1]:
  32. code = item.split(".")[0]
  33. writefile.write(code + ",CFFEX\n")
  34. else:
  35. is_get_wind_data = False
  36. break
  37. else:
  38. is_get_wind_data = False
  39. break
  40. writefile.close()
  41. break
  42. # 若未成功获取数据,则用备份的那个文件替换保存文件
  43. if not is_get_wind_data:
  44. print("无法获取到wind数据")
  45. if os.path.exists(save_path):
  46. os.remove(save_path)
  47. temp_list = save_path.split(".")
  48. bakeup_path = temp_list[0] + "_bakeup." + temp_list[1]
  49. if os.path.exists(bakeup_path):
  50. shutil.copyfile(bakeup_path, save_path)
  51. if __name__ == "__main__":
  52. # 要检测wind是否正在运行,还要检测以及能否获取到数据
  53. # 1.检测wind是否在运行
  54. is_connect_wind = w.isconnected()
  55. print(f"is_connect_wind={is_connect_wind}")
  56. if is_connect_wind:
  57. print("use wind to get future codeList")
  58. savepath = "./Instruments.csv"
  59. download_future_code_wind(savepath)

end

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/736668
推荐阅读
相关标签
  

闽ICP备14008679号