# -*- coding:utf-8 -*- __author__ = 'weijie' from EmQuantAPI import * from datetime import timedelta, datetime import time import traceback import json from StockRestPojo import StockRestPojo # from dbOperation import dbOperation from dbOperationStock import dbOperationStock from threading import Thread import numpy as np import db_config print("开始了") def mainCallback(quantdata): print ("mainCallback",str(quantdata)) #登录掉线或者 登陆数达到上线(即登录被踢下线) 这时所有的服务都会停止 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 updateStockInfo(code, stockRestPojo): db = dbOperationStock(db_config.db_stock) sql = "update stock set `now` = '" + str(stockRestPojo.now) + "', `change` = '" + str(stockRestPojo.change) + "', `pct_change` = '" + str(stockRestPojo.pctchange) + "' where stock_code = '" + str(code) + "'" db.update(sql) db.close() try: #调用登录函数(激活后使用,不需要用户名密码) loginResult = c.start("ForceLogin=1", '', mainCallback) if(loginResult.ErrorCode != 0): print("login in fail") exit() db = dbOperationStock(db_config.db_stock) stockPojoList = db.query_list("select id, code, name, list_date listDate, seralid from t_stock_base_info where is_rest_add = 0 and id = 1 order by id asc") for stockPojo in stockPojoList: # data = c.cmc(stockPojo['code'], "Date,Time,High,Open,Low,Close,Volume,Amount,Change,PctChange", "20201101090000", "20201108150000", "RowIndex=2,Ispandas=0") data = c.cmc(stockPojo['code'], "Date,Time,High,Open,Low,Close,Volume,Amount,Change,PctChange", (datetime.today() + timedelta(-6)).strftime("%Y-%m-%d"), datetime.today().strftime("%Y-%m-%d"), "RowIndex=2,Ispandas=0") print("cmc输出结果======分隔线======") if(not isinstance(data, c.EmQuantData)): print(data) else: if(data.ErrorCode != 0): print("request cmc Error, ", data.ErrorMsg) else: for i in range(0, len(data.Dates)): stockRestPojo = StockRestPojo() stockRestPojo.date = str(data.Data[0][i]) stockRestPojo.time = str(data.Data[1][i]) stockRestPojo.high = str(data.Data[2][i]) stockRestPojo.open = str(data.Data[3][i]) stockRestPojo.low = str(data.Data[4][i]) stockRestPojo.now = str(data.Data[5][i]) stockRestPojo.volume = str(data.Data[6][i]) stockRestPojo.amount = str(data.Data[7][i]) stockRestPojo.change = str(data.Data[8][i]) stockRestPojo.pctchange = str(data.Data[9][i]) if i != 0: stockRestPojo.preclose = str(data.Data[3][i-1]) else : stockRestPojo.preclose = str(data.Data[3][i]) stockRestPojo.roundlot = "" stockRestPojo.volumeratio = "" stockRestPojo.commissionratio = "" stockRestPojo.commissiondiff = "" stockRestPojo.tradestatus = "" stockRestPojo.outvolume = "" stockRestPojo.involume = "" stockRestPojo.highlimit = "" stockRestPojo.lowlimit = "" stockRestPojo.speed = "" stockRestPojo.averageprice = "" stockRestPojo.buyprice1 = "" stockRestPojo.buyprice2 = "" stockRestPojo.buyprice3 = "" stockRestPojo.buyprice4 = "" stockRestPojo.buyprice5 = "" stockRestPojo.buyvolume1 = "" stockRestPojo.buyvolume2 = "" stockRestPojo.buyvolume3 = "" stockRestPojo.buyvolume4 = "" stockRestPojo.buyvolume5 = "" stockRestPojo.sellprice1 = "" stockRestPojo.sellprice2 = "" stockRestPojo.sellprice3 = "" stockRestPojo.sellprice4 = "" stockRestPojo.sellprice5 = "" stockRestPojo.sellvolume1 = "" stockRestPojo.sellvolume2 = "" stockRestPojo.sellvolume3 = "" stockRestPojo.sellvolume4 = "" stockRestPojo.sellvolume5 = "" stockRestPojo.closedtime = "" stockRestPojo.closedvolume = "" stockRestPojo.closedamount = "" datTime = time.mktime(time.strptime(str(data.Data[0][i]) + str(data.Data[1][i]), "%Y%m%d%H%M%S")) stockRestPojo.realTime = str(int(datTime)) min_ = time.localtime(datTime).tm_min # 获取分钟 sec_ = time.localtime(datTime).tm_sec # 获取秒数 # 1分钟数据 if sec_ != 0: tempDatTime = datTime + 60 - sec_ stockRestPojo.dateOne = str(int(tempDatTime)) else: stockRestPojo.dateOne = str(int(datTime)) # 5分钟数据 if sec_ != 0 or min_%5 != 0: tempDatTime = datTime + (5 * 60) - sec_ - (min_%5 * 60) stockRestPojo.dateFive = str(int(tempDatTime)) else: stockRestPojo.dateFive = str(int(datTime)) # 15分钟数据 if sec_ != 0 or min_%15 != 0: tempDatTime = datTime + (15 * 60) - sec_ - (min_%15 * 60) stockRestPojo.dateFifteen = str(int(tempDatTime)) else: stockRestPojo.dateFifteen = str(int(datTime)) # 30分钟数据 if sec_ != 0 or min_%30 != 0: tempDatTime = datTime + (30 * 60) - sec_ - (min_%30 * 60) stockRestPojo.dateThirty = str(int(tempDatTime)) else: stockRestPojo.dateThirty = str(int(datTime)) # 60分钟数据 if sec_ != 0 or min_%60 != 0: tempDatTime = datTime + (60 * 60) - sec_ - (min_%60 * 60) stockRestPojo.dateSixty = str(int(tempDatTime)) else: stockRestPojo.dateSixty = str(int(datTime)) sql = "insert into data_rt_" + str(stockPojo['code'].replace(".", "_").lower()) + "(`realTime`,`date`,`time`,`now`,`high`,`low`,`open`,`preclose`,`roundlot`,`change`,`pctchange`,`volume`,`amount`,`volumeratio`,`commissionratio`,`commissiondiff`,`tradestatus`,`outvolume`,`involume`,`highlimit`,`lowlimit`,`speed`,`averageprice`,`buyprice1`,`buyprice2`,`buyprice3`,`buyprice4`,`buyprice5`,`buyvolume1`,`buyvolume2`,`buyvolume3`,`buyvolume4`,`buyvolume5`,`sellprice1`,`sellprice2`,`sellprice3`,`sellprice4`,`sellprice5`,`sellvolume1`,`sellvolume2`,`sellvolume3`,`sellvolume4`,`sellvolume5`,`closedtime`,`closedvolume`,`closedamount`,`dateOne`,`dateFive`,`dateFifteen`,`dateThirty`,`dateSixty`,`addTime`) values('" + str(stockRestPojo.realTime) + "','" + str(stockRestPojo.date) + "','" + str(stockRestPojo.time) + "','" + str(stockRestPojo.now) + "','" + str(stockRestPojo.high) + "','" + str(stockRestPojo.low) + "','" + str(stockRestPojo.open) + "','" + str(stockRestPojo.preclose) + "','" + str(stockRestPojo.roundlot) + "','" + str(stockRestPojo.change) + "','" + str(stockRestPojo.pctchange) + "','" + str(stockRestPojo.volume) + "','" + str(stockRestPojo.amount) + "','" + str(stockRestPojo.volumeratio) + "','" + str(stockRestPojo.commissionratio) + "','" + str(stockRestPojo.commissiondiff) + "','" + str(stockRestPojo.tradestatus) + "','" + str(stockRestPojo.outvolume) + "','" + str(stockRestPojo.involume) + "','" + str(stockRestPojo.highlimit) + "','" + str(stockRestPojo.lowlimit) + "','" + str(stockRestPojo.speed) + "','" + str(stockRestPojo.averageprice) + "','" + str(stockRestPojo.buyprice1) + "','" + str(stockRestPojo.buyprice2) + "','" + str(stockRestPojo.buyprice3) + "','" + str(stockRestPojo.buyprice4) + "','" + str(stockRestPojo.buyprice5) + "','" + str(stockRestPojo.buyvolume1) + "','" + str(stockRestPojo.buyvolume2) + "','" + str(stockRestPojo.buyvolume3) + "','" + str(stockRestPojo.buyvolume4) + "','" + str(stockRestPojo.buyvolume5) + "','" + str(stockRestPojo.sellprice1) + "','" + str(stockRestPojo.sellprice2) + "','" + str(stockRestPojo.sellprice3) + "','" + str(stockRestPojo.sellprice4) + "','" + str(stockRestPojo.sellprice5) + "','" + str(stockRestPojo.sellvolume1) + "','" + str(stockRestPojo.sellvolume2) + "','" + str(stockRestPojo.sellvolume3) + "','" + str(stockRestPojo.sellvolume4) + "','" + str(stockRestPojo.sellvolume5) + "','" + str(stockRestPojo.closedtime) + "','" + str(stockRestPojo.closedvolume) + "','" + str(stockRestPojo.closedamount) + "','" + str(stockRestPojo.dateOne) + "','" + str(stockRestPojo.dateFive) + "','" + str(stockRestPojo.dateFifteen) + "','" + str(stockRestPojo.dateThirty) + "','" + str(stockRestPojo.dateSixty) +"', now());" db.insert(sql) if stockRestPojo.now != 0: updateStockInfo(stockPojo['code'], stockRestPojo) #退出 data = logoutResult = c.stop() except Exception as ee: print("error >>>",ee) traceback.print_exc() else: print("demo end")