# -*- coding:utf-8 -*- __author__ = 'weijie' from EmQuantAPI import * from datetime import timedelta, datetime import time as _time import traceback print("开始了") def mainCallback(quantdata): """ mainCallback 是主回调函数,可捕捉如下错误 在start函数第三个参数位传入,该函数只有一个为c.EmQuantData类型的参数quantdata :param quantdata:c.EmQuantData :return: """ print ("mainCallback",str(quantdata)) print("开始了2222") #登录掉线或者 登陆数达到上线(即登录被踢下线) 这时所有的服务都会停止 if str(quantdata.ErrorCode) == "10001011" or str(quantdata.ErrorCode) == "10001009": print ("Your account is disconnect. You can force login automatically here if you need.") #行情登录验证失败(每次连接行情服务器时需要登录验证)或者行情流量验证失败时,会取消所有订阅,用户需根据具体情况处理 elif str(quantdata.ErrorCode) == "10001021" or str(quantdata.ErrorCode) == "10001022": print ("Your all csq subscribe have stopped.") #行情服务器断线自动重连连续6次失败(1分钟左右)不过重连尝试还会继续进行直到成功为止,遇到这种情况需要确认两边的网络状况 elif str(quantdata.ErrorCode) == "10002009": print ("Your all csq subscribe have stopped, reconnect 6 times fail.") # 行情订阅遇到一些错误(这些错误会导致重连,错误原因通过日志输出,统一转换成EQERR_QUOTE_RECONNECT在这里通知),正自动重连并重新订阅,可以做个监控 elif str(quantdata.ErrorCode) == "10002012": print ("csq subscribe break on some error, reconnect and request automatically.") # 资讯服务器断线自动重连连续6次失败(1分钟左右)不过重连尝试还会继续进行直到成功为止,遇到这种情况需要确认两边的网络状况 elif str(quantdata.ErrorCode) == "10002014": print ("Your all cnq subscribe have stopped, reconnect 6 times fail.") # 资讯订阅遇到一些错误(这些错误会导致重连,错误原因通过日志输出,统一转换成EQERR_INFO_RECONNECT在这里通知),正自动重连并重新订阅,可以做个监控 elif str(quantdata.ErrorCode) == "10002013": print ("cnq subscribe break on some error, reconnect and request automatically.") # 资讯登录验证失败(每次连接资讯服务器时需要登录验证)或者资讯流量验证失败时,会取消所有订阅,用户需根据具体情况处理 elif str(quantdata.ErrorCode) == "10001024" or str(quantdata.ErrorCode) == "10001025": print("Your all cnq subscribe have stopped.") else: pass def startCallback(message): print("[EmQuantAPI Python]", message) return 1 def csqCallback(quantdata): """ csqCallback 是csq订阅时提供的回调函数模板。该函数只有一个为c.EmQuantData类型的参数quantdata :param quantdata:c.EmQuantData :return: """ print ("csqCallback,", str(quantdata)) def cstCallBack(quantdata): ''' cstCallBack 是日内跳价服务提供的回调函数模板 ''' for i in range(0, len(quantdata.Codes)): length = len(quantdata.Dates) for it in quantdata.Data.keys(): print(it) for k in range(0, length): for j in range(0, len(quantdata.Indicators)): print(quantdata.Data[it][j * length + k], " ",end = "") print() def cnqCallback(quantdata): """ csqCallback 是cnq订阅时提供的回调函数模板。该函数只有一个为c.EmQuantData类型的参数quantdata :param quantdata:c.EmQuantData :return: """ # print ("cnqCallback,", str(quantdata)) print("cnqCallback,") for code in quantdata.Data: total = len(quantdata.Data[code]) for k in range(0, len(quantdata.Data[code])): print(quantdata.Data[code][k]) try: #调用登录函数(激活后使用,不需要用户名密码) loginResult = c.start("ForceLogin=1", '', mainCallback) if(loginResult.ErrorCode != 0): print("login in fail") exit() # csd使用范例 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") print("csd输出结果======分隔线======") if not isinstance(data, c.EmQuantData): print(data) else: if(data.ErrorCode != 0): print("request csd Error, ", data.ErrorMsg) else: for code in data.Codes: for i in range(0, len(data.Indicators)): for j in range(0, len(data.Dates)): print(data.Data[code][i][j]) # css使用范例 data = c.css("300059.SZ,000002.SZ", "open,close", "TradeDate=20170308, Ispandas=0") print("css输出结果======分隔线======") if not isinstance(data, c.EmQuantData): print(data) else: if(data.ErrorCode != 0): print("request css Error, ", data.ErrorMsg) else: for code in data.Codes: for i in range(0, len(data.Indicators)): print(data.Data[code][i]) #退出 data = logoutResult = c.stop() except Exception as ee: print("error >>>",ee) traceback.print_exc() else: print("demo end")