getpg_data.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. # -*- coding:utf-8 -*-
  2. __author__ = 'weijie'
  3. from EmQuantAPI import *
  4. from datetime import timedelta, datetime
  5. import time as _time
  6. import traceback
  7. print("开始了")
  8. def mainCallback(quantdata):
  9. """
  10. mainCallback 是主回调函数,可捕捉如下错误
  11. 在start函数第三个参数位传入,该函数只有一个为c.EmQuantData类型的参数quantdata
  12. :param quantdata:c.EmQuantData
  13. :return:
  14. """
  15. print ("mainCallback",str(quantdata))
  16. print("开始了2222")
  17. #登录掉线或者 登陆数达到上线(即登录被踢下线) 这时所有的服务都会停止
  18. if str(quantdata.ErrorCode) == "10001011" or str(quantdata.ErrorCode) == "10001009":
  19. print ("Your account is disconnect. You can force login automatically here if you need.")
  20. #行情登录验证失败(每次连接行情服务器时需要登录验证)或者行情流量验证失败时,会取消所有订阅,用户需根据具体情况处理
  21. elif str(quantdata.ErrorCode) == "10001021" or str(quantdata.ErrorCode) == "10001022":
  22. print ("Your all csq subscribe have stopped.")
  23. #行情服务器断线自动重连连续6次失败(1分钟左右)不过重连尝试还会继续进行直到成功为止,遇到这种情况需要确认两边的网络状况
  24. elif str(quantdata.ErrorCode) == "10002009":
  25. print ("Your all csq subscribe have stopped, reconnect 6 times fail.")
  26. # 行情订阅遇到一些错误(这些错误会导致重连,错误原因通过日志输出,统一转换成EQERR_QUOTE_RECONNECT在这里通知),正自动重连并重新订阅,可以做个监控
  27. elif str(quantdata.ErrorCode) == "10002012":
  28. print ("csq subscribe break on some error, reconnect and request automatically.")
  29. # 资讯服务器断线自动重连连续6次失败(1分钟左右)不过重连尝试还会继续进行直到成功为止,遇到这种情况需要确认两边的网络状况
  30. elif str(quantdata.ErrorCode) == "10002014":
  31. print ("Your all cnq subscribe have stopped, reconnect 6 times fail.")
  32. # 资讯订阅遇到一些错误(这些错误会导致重连,错误原因通过日志输出,统一转换成EQERR_INFO_RECONNECT在这里通知),正自动重连并重新订阅,可以做个监控
  33. elif str(quantdata.ErrorCode) == "10002013":
  34. print ("cnq subscribe break on some error, reconnect and request automatically.")
  35. # 资讯登录验证失败(每次连接资讯服务器时需要登录验证)或者资讯流量验证失败时,会取消所有订阅,用户需根据具体情况处理
  36. elif str(quantdata.ErrorCode) == "10001024" or str(quantdata.ErrorCode) == "10001025":
  37. print("Your all cnq subscribe have stopped.")
  38. else:
  39. pass
  40. def startCallback(message):
  41. print("[EmQuantAPI Python]", message)
  42. return 1
  43. def csqCallback(quantdata):
  44. """
  45. csqCallback 是csq订阅时提供的回调函数模板。该函数只有一个为c.EmQuantData类型的参数quantdata
  46. :param quantdata:c.EmQuantData
  47. :return:
  48. """
  49. print ("csqCallback,", str(quantdata))
  50. def cstCallBack(quantdata):
  51. '''
  52. cstCallBack 是日内跳价服务提供的回调函数模板
  53. '''
  54. for i in range(0, len(quantdata.Codes)):
  55. length = len(quantdata.Dates)
  56. for it in quantdata.Data.keys():
  57. print(it)
  58. for k in range(0, length):
  59. for j in range(0, len(quantdata.Indicators)):
  60. print(quantdata.Data[it][j * length + k], " ",end = "")
  61. print()
  62. def cnqCallback(quantdata):
  63. """
  64. csqCallback 是cnq订阅时提供的回调函数模板。该函数只有一个为c.EmQuantData类型的参数quantdata
  65. :param quantdata:c.EmQuantData
  66. :return:
  67. """
  68. # print ("cnqCallback,", str(quantdata))
  69. print("cnqCallback,")
  70. for code in quantdata.Data:
  71. total = len(quantdata.Data[code])
  72. for k in range(0, len(quantdata.Data[code])):
  73. print(quantdata.Data[code][k])
  74. try:
  75. #调用登录函数(激活后使用,不需要用户名密码)
  76. loginResult = c.start("ForceLogin=1", '', mainCallback)
  77. if(loginResult.ErrorCode != 0):
  78. print("login in fail")
  79. exit()
  80. # csd使用范例
  81. data = c.csd("300059.SZ,600425.SH", "open,close", "2016-07-01", "2016-07-06", "RowIndex=1,period=1,adjustflag=1,curtype=1,pricetype=1,year=2016,Ispandas=0")
  82. print("csd输出结果======分隔线======")
  83. if not isinstance(data, c.EmQuantData):
  84. print(data)
  85. else:
  86. if(data.ErrorCode != 0):
  87. print("request csd Error, ", data.ErrorMsg)
  88. else:
  89. for code in data.Codes:
  90. for i in range(0, len(data.Indicators)):
  91. for j in range(0, len(data.Dates)):
  92. print(data.Data[code][i][j])
  93. # css使用范例
  94. data = c.css("300059.SZ,000002.SZ", "open,close", "TradeDate=20170308, Ispandas=0")
  95. print("css输出结果======分隔线======")
  96. if not isinstance(data, c.EmQuantData):
  97. print(data)
  98. else:
  99. if(data.ErrorCode != 0):
  100. print("request css Error, ", data.ErrorMsg)
  101. else:
  102. for code in data.Codes:
  103. for i in range(0, len(data.Indicators)):
  104. print(data.Data[code][i])
  105. #退出
  106. data = logoutResult = c.stop()
  107. except Exception as ee:
  108. print("error >>>",ee)
  109. traceback.print_exc()
  110. else:
  111. print("demo end")