ths_wind.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. import hug
  2. from bottle import route, run, NORUN
  3. from WindPy import w
  4. import iFinDPy as THS
  5. import json
  6. import pandas as pd
  7. import time
  8. import os
  9. import logging
  10. import sys
  11. hug.API(__name__).http.output_format = hug.output_format.json
  12. username = ""
  13. password = ""
  14. @hug.get('/hz_server')
  15. def hello():
  16. return 1
  17. # return 'wind true'
  18. # 同花顺登录函数
  19. def thslogin():
  20. # 输入用户的帐号和密码
  21. thsLogin = THS.THS_iFinDLogin(username, password)
  22. print(thsLogin)
  23. if (thsLogin == 0 or thsLogin == -201):
  24. print('ths 登录成功')
  25. logger.info('ths login success')
  26. else:
  27. print('ths 登录失败')
  28. logger.info('ths login fail')
  29. @hug.get('/edbInfo/ths')
  30. def GetEdbDataByThs(EdbCode, StartDate, EndDate):
  31. print("GetEdbDataByThs")
  32. logger.info('GetEdbDataByThs')
  33. thsEDBDataQuery = THS.THS_EDBQuery(EdbCode, StartDate, EndDate, True)
  34. print(thsEDBDataQuery)
  35. logger.info(thsEDBDataQuery)
  36. print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ":start GetEdbDataByThs")
  37. print("thsEDBDataQuery")
  38. print(thsEDBDataQuery)
  39. thsEDBDataQuery = thsEDBDataQuery.decode("unicode_escape")
  40. result = json.loads(thsEDBDataQuery)
  41. print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ":end GetEdbDataByThs")
  42. if result["errorcode"] == -1010:
  43. thsLogin = THS.THS_iFinDLogin(username, password)
  44. print("登录一次")
  45. print(thsLogin)
  46. logger.info("ths login")
  47. if (thsLogin == 0 or thsLogin == -201):
  48. thsEDBDataQuery = THS.THS_EDBQuery(EdbCode, StartDate, EndDate, True)
  49. thsEDBDataQuery = thsEDBDataQuery.decode("unicode_escape")
  50. result = json.loads(thsEDBDataQuery)
  51. logger.info("login success")
  52. else:
  53. print("已登录")
  54. return result
  55. def has_comma(input_string):
  56. return isinstance(input_string, str) and ',' in input_string
  57. def process_single_edb_code(StockCode, SingleEdbCode, StartDate, EndDate):
  58. thsEDBDataQuery = THS.THS_DS(StockCode, SingleEdbCode, '', '', StartDate, EndDate)
  59. print(thsEDBDataQuery)
  60. result = json.dumps(ths_data_to_dict(thsEDBDataQuery))
  61. return result
  62. @hug.get('/edbInfo/ths/ds')
  63. def GetEdbDataByThsDs(StockCode, EdbCode, StartDate, EndDate):
  64. print("THS_DataSequence start")
  65. print(EdbCode)
  66. result_list = []
  67. if isinstance(EdbCode, list):
  68. for SingleEdbCode in EdbCode:
  69. result_list.append(process_single_edb_code(StockCode, SingleEdbCode, StartDate, EndDate))
  70. print("THS_DS end")
  71. print(result_list)
  72. return result_list
  73. else:
  74. # 如果不包含逗号,直接处理
  75. result = process_single_edb_code(StockCode, EdbCode, StartDate, EndDate)
  76. print(result)
  77. return result
  78. @hug.get('/edbInfo/ths/future_good')
  79. def GetFutureGoodEdbDataByThs(EdbCode, StartDate, EndDate):
  80. print("THS_HistoryQuotes start")
  81. thsLogin = THS.THS_iFinDLogin("hzmd150", "689719")
  82. filed = 'lastclose,open,high,low,close,avgprice,change,changeper,volume,amount,hsl,lastsettlement,settlement,zdsettlement,zdfsettlement,ccl,ccbd,zf,zjlx,zjcd'
  83. # filed = 'open,high,low,close,volume,amount,settlement,ccl,zjlx'
  84. params = 'Interval:D,CPS:1,baseDate:1900-01-01,Currency:YSHB,fill:Previous'
  85. # params = 'YSHB;Tradedays'
  86. # print(params)
  87. thsEDBDataQuery = THS.THS_HistoryQuotes(EdbCode, filed, params, StartDate, EndDate, True)
  88. # thsEDBDataQuery = THS.THS_HQ(EdbCode, filed, params, StartDate, EndDate)
  89. # thsEDBDataQuery = THS.THS_EDBQuery(EdbCode, StartDate, EndDate, True)
  90. print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ":start GetFutureGoodEdbDataByThs")
  91. print("THS_HistoryQuotes end")
  92. print(thsEDBDataQuery)
  93. thsEDBDataQuery = thsEDBDataQuery.decode("unicode_escape")
  94. result = json.loads(thsEDBDataQuery)
  95. print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ":end GetFutureGoodEdbDataByThs")
  96. return result
  97. @hug.get('/edbInfo/ths/hf')
  98. def GetEdbDataByThsDs(codes, indicators, function_para, start_time, end_time):
  99. print("codes: {}; indicators: {}; function_para: {}; start_time: {}; end_time: {}".format(codes, indicators,
  100. function_para, start_time,
  101. end_time))
  102. data_query = THS.THS_DF(codes, indicators, function_para, start_time, end_time)
  103. print(data_query)
  104. result = json.dumps(ths_data_to_dict(data_query))
  105. return result
  106. @hug.get('/edbInfo/wind')
  107. def GetEdbDataByWind(EdbCode, StartDate, EndDate):
  108. print("GetEdbDataByWind:", EdbCode)
  109. isConnected = w.isconnected()
  110. print("isconnected")
  111. print(isConnected)
  112. if isConnected == False:
  113. print("re isconnected")
  114. w.start()
  115. isConnected = w.isconnected()
  116. if isConnected == False:
  117. return "{'ErrMsg':'启动Wind接口失败'}"
  118. print("getdata")
  119. option = "Fill=Previous"
  120. data = w.edb(EdbCode, StartDate, EndDate, option)
  121. print("wind data")
  122. df = pd.DataFrame()
  123. if data.ErrorCode == -40521010: # Internet Timeout 超时退出
  124. os._exit(0)
  125. return "a"
  126. df['DT'] = data.Times
  127. df['CLOSE'] = data.Data[0]
  128. df['ErrorCode'] = data.ErrorCode
  129. df = df[['DT', 'CLOSE', 'ErrorCode']]
  130. df = df.dropna()
  131. json_data = df.to_json()
  132. # w.stop()
  133. print("wind data end")
  134. result = json.loads(json_data)
  135. return result
  136. @hug.get('/edbInfo/wind/future_good')
  137. def GetFutureGoodEdbDataByWind(FutureGoodEdbCode, StartDate, EndDate):
  138. print("GetFutureGoodEdbDataByWind:", FutureGoodEdbCode)
  139. isConnected = w.isconnected()
  140. print("isconnected")
  141. print(isConnected)
  142. if isConnected == False:
  143. print("re isconnected")
  144. w.start()
  145. isConnected = w.isconnected()
  146. if isConnected == False:
  147. return "{'ErrMsg':'启动Wind接口失败'}"
  148. print("getdata")
  149. option = "Fill=Previous"
  150. data = w.edb(FutureGoodEdbCode, StartDate, EndDate, option)
  151. data = w.wsd(FutureGoodEdbCode, "trade_code,open,high,low,close,volume,amt,oi,settle", StartDate, EndDate, option)
  152. print("wind data")
  153. print(data)
  154. df = pd.DataFrame()
  155. if data.ErrorCode == -40521010: # Internet Timeout 超时退出
  156. os._exit(0)
  157. return "a"
  158. df['DT'] = data.Times
  159. df['TRADE_CODE'] = data.Data[0]
  160. df['OPEN'] = data.Data[1]
  161. df['HIGH'] = data.Data[2]
  162. df['LOW'] = data.Data[3]
  163. df['CLOSE'] = data.Data[4]
  164. df['VOLUME'] = data.Data[5]
  165. df['AMT'] = data.Data[6]
  166. df['OI'] = data.Data[7]
  167. df['SETTLE'] = data.Data[8]
  168. df['ErrorCode'] = data.ErrorCode
  169. df = df[['DT', 'TRADE_CODE', 'OPEN', 'HIGH', 'LOW', 'CLOSE', 'VOLUME', 'AMT', 'OI', 'SETTLE', 'ErrorCode']]
  170. df = df.dropna()
  171. json_data = df.to_json()
  172. # w.stop()
  173. print("wind data end")
  174. result = json.loads(json_data)
  175. return result
  176. @hug.get('/edbInfo/wind/wsd')
  177. def GetEdbDataWindWsd(StockCode, EdbCode, StartDate, EndDate):
  178. print("GetEdbDataByWind:", EdbCode)
  179. isConnected = w.isconnected()
  180. print("isconnected")
  181. print(isConnected)
  182. if isConnected == False:
  183. print("re isconnected")
  184. w.start()
  185. isConnected = w.isconnected()
  186. if isConnected == False:
  187. return "{'ErrMsg':'启动Wind接口失败'}"
  188. option = "Fill=Previous"
  189. wsd_data = w.wsd(StockCode, EdbCode, StartDate, EndDate, option)
  190. if wsd_data.ErrorCode == -40521010: # Internet Timeout 超时退出
  191. os._exit(0)
  192. return "a"
  193. fm = pd.DataFrame(wsd_data.Data, index=wsd_data.Fields, columns=wsd_data.Times)
  194. json_data = fm.to_json()
  195. result = json.loads(json_data)
  196. return result
  197. if __name__ == "__main__":
  198. # wind 登录
  199. wStart = w.start()
  200. if wStart.ErrorCode != 0:
  201. print("启动万得API接口失败")
  202. print(wStart)
  203. # ths登录函数
  204. thslogin()
  205. app = __hug__.http.server()
  206. run(app=app, reloader=True, port=7000)