def _log(self, id_Target, lon, lat, height, Q, deltaXY, deltaX, deltaY): if (self.hasLog == False): return #保存数据 strDir, strName = myIO.getPath_ByFile(__file__) strPath = strDir + "/static/Log" headStr = "" if (os.path.exists(strPath) == False): myIO.mkdir(strPath) strPath = strPath + "/" + myData_Trans.Tran_ToDatetime_str( None, "%Y-%m-%d") + ".csv" if (os.path.exists(strPath) == False): headStr = "id_Target, concentration, height, tag, longitude_Leak, latitude_Leak, height_Leak, massrate_Leak, speed, direction, windH, temperature, cloudy_is, chimney_diameter, chimney_temperature_outlet, chimney_temperature_outlet, chimney_wind_speed_outlet, dtTimestr, lon, lat, deltaXY, deltaX, deltaY" #文件追加数据内容 with open(strPath, 'a+') as f: if (headStr != ""): f.write(headStr) dtTimestr = myData_Trans.Tran_ToDatetime_str(self.dtLeak) if (self.hasChimney): infoChimney = F'{self.chimney_diameter},{self.chimney_temperature_outlet},{self.chimney_temperature_outlet},{self.chimney_wind_speed_outlet}' else: infoChimney = F',,,' strLine = F'{id_Target},{Q},{height},{self.tag},{self.longitude_Leak},{self.latitude_Leak},{self.height_Leak},{self.massrate_Leak},{self.wind.wind_Speed},{self.wind.wind_Direction_Alias},{self.wind.wind_Height},{self.air.temperature},{self.sun.numCloud},{infoChimney},{dtTimestr},{lon},{lat},{deltaXY},{deltaX},{deltaY}' f.write("\n" + strLine) return True
def ToString(self, nSpace=0, isSimple=False, usrBillType="", tradeTarget="", tradeType="", tradeTypeTarget=""): if (isSimple == False): strSpace = " " * nSpace strBill = strSpace + "编号: " + str(self.tradeID) + "\n" strBill += strSpace + "账单人: " + self.usrID + "\n" strBill += strSpace + "账单类型: " + self.usrBillType + "\n" strBill += strSpace + "交易方: " + self.tradeParty + "\n" strBill += strSpace + "交易金额: " + str(round(self.tradeMoney, 2)) + "元 \n" strBill += strSpace + "交易物: " + self.tradeTarget + "\n" if (self.tradeType != ""): strBill += strSpace + "交易分类: " + self.tradeType + "\n" if (self.tradeTypeTarget != ""): strBill += strSpace + "交易子类: " + self.tradeTypeTarget + "\n" strBill += strSpace + "账单时间: " + myData_Trans.Tran_ToDatetime_str( self.tradeTime, "%Y-%m-%d") + "\n" strBill += strSpace + "备注: " + self.remark else: strBill = self.tradeParty strBill += "," + str(round(self.tradeMoney, 2)) + "元" if (usrBillType == ""): strBill += "," + self.usrBillType if (tradeTarget == ""): strBill += "," + self.tradeTarget if (tradeType == ""): strBill += "," + self.tradeType if (tradeTypeTarget == ""): strBill += "," + self.tradeTypeTarget strBill += "," + str(self.tradeID) strBill += "," + myData_Trans.Tran_ToDatetime_str( self.tradeTime, "%Y-%m-%d") return strBill
def Trans_ToDict(self, dictSets=None, useTimestr=False): if (dictSets == None): dictSets = self.dictSets dictSets['ID'] = self.ID dictSets['用户名'] = self.usrID dictSets['用户标签'] = self.usrTag dictSets['标的编号'] = self.stockID dictSets['标的名称'] = self.stockName dictSets['标的类型'] = self.stockType dictSets['标的均价'] = round(self.stockAvg, 4) dictSets['标的数量'] = self.stockNum dictSets['标的仓位'] = round(self.stockPosition, 4) dictSets['手续费率'] = round(self.stockFee, 4) dictSets['定量监测'] = self.fixHit dictSets['边界限制'] = self.limitHit dictSets['监测间隔'] = self.deltaProfit dictSets['止盈线'] = self.stopProfit dictSets['止损线'] = self.stopLoss dictSets['动态止盈'] = self.stopProfit_Dynamic dictSets['动态止损'] = self.stopLoss_Dynamic dictSets['止盈回撤'] = self.stopProfit_Retreat dictSets['止损回撤'] = self.stopLoss_Retreat dictSets['止盈比例'] = self.stopProfit_Trade dictSets['止损比例'] = self.stopLoss_Trade dictSets['最高价格'] = round(self.priceMax, 4) dictSets['成本价格'] = round(self.priceCost, 4) dictSets['卖出均价'] = round(self.priceAvg_sell, 4) dictSets['当前价格'] = round(self.priceNow, 4) dictSets['阶段止盈'] = round(self.profitMax_Stage, 4) dictSets['阶段止损'] = round(self.profitMin_Stage, 4) dictSets['最高浮盈'] = round(self.profitMax, 4) dictSets['当前浮盈'] = round(self.profitNow, 4) dictSets['止盈状态'] = self.stopProfit_goon dictSets['止损状态'] = self.stopLoss_goon self.date = self.date.replace("'", "") dictSets['建仓日期'] = myData.iif( self.date != "", self.date, myData_Trans.Tran_ToDatetime_str(self.logDatetime, "%Y-%m-%d")) dictSets['isDel'] = not self.valid dictSets['备注'] = self.remark dictSets['操作日志'] = self.logOperates dictSets['操作统计数'] = self.sumOperates dictSets['操作时间'] = self.logDatetime if (useTimestr): if (type(dictSets['操作时间']) == datetime.datetime): dictSets['操作时间_str'] = myData_Trans.Tran_ToDatetime_str( self.logDatetime, "%Y-%m-%d %H:%M:%S") else: dictSets['操作时间_str'] = dictSets['操作时间'] return self.dictSets
def OnUpdataSet(self, quoteDatas): #设置有效检查 if (self.IsEnable(quoteDatas) == False): return #买入交易记录 lstBill = quoteDatas.queryTrade(self.usrName) #生成所有定点监测配置 self._removeMonitor(quoteDatas.name) for x in lstBill: if (x.tradeNum_Stock < 100): continue #忽略剩余量较少的 tradePrice = x.tradePrice tradeNum = x.tradeNum_Stock #交易数量 tradeTime = x.tradeTime if (type(tradeTime) == datetime.datetime): tradeTime = myData_Trans.Tran_ToDatetime_str( tradeTime, "%Y-%m-%d") #生成配置 self._addMonitor( quoteDatas.name, myListener_Fixed(tradePrice, 0.04, tradeNum, tradeTime)) self._addMonitor( quoteDatas.name, myListener_Fixed(tradePrice, -0.02, tradeNum, tradeTime)) return True
def getOptInfo(self, optPrice=2500, dateTime="", month_Delta=0): # 同步参数 if (dateTime == ""): dateTime = myData_Trans.Tran_ToDatetime_str(None, "%Y-%m-%d") dtFliter = myData_Trans.Tran_ToDatetime(dateTime, "%Y-%m-%d") strFliter = "50ETF" + myData.iif( optPrice > 0, "购", "沽") + str(dtFliter.month + month_Delta) + "月" + str(abs(optPrice)) # 查询 optInfos = opt.run_query( query(opt.OPT_DAILY_PREOPEN).filter( opt.OPT_DAILY_PREOPEN.date == dateTime, opt.OPT_DAILY_PREOPEN.name == strFliter).limit(10)) if (optInfos.shape[0] != 1): return None # 查询最新的期权基本资料数据 code = optInfos['code'][0] optInfo = query( opt.OPT_CONTRACT_INFO).filter(opt.OPT_CONTRACT_INFO.code == code) value = opt.run_query(optInfo) if (len(value) != 1): return None return { 'id': value['id'][0], 'code': value['code'][0], 'trading_code': value['trading_code'][0], 'name': value['name'][0] }
def thrd_Moniter_API_Quote(): time.sleep(10) #延时等待 pSource = init_Quote() while (pSource.isClosed == False): myDebug.Debug(myData_Trans.Tran_ToDatetime_str()) time.sleep(120) #延时等待 myQuote_Source.mainStart() #检查启动行情进程
def get(self): pMsg = copy.deepcopy(gol._Get_Setting('Return_strFormat', {})) usrID = request.args.get('usrID', '') usrTag = request.args.get('usrTag', '') code_id = request.args.get('code_id', "") code_name = request.args.get('code_name', "") #初始返回组 lstDate_Tag = [] lstInfos = {} #查询及组装 pRisks = gol._Get_Value('zxcRisk_Control', None) dictRisks = pRisks.getRisks(usrID, usrTag, code_id, code_name, bCheck=True) if (dictRisks != None): for x in dictRisks: pRisk = dictRisks[x] if (pRisk.setRisk.valid): lstDate_Tag.append(x) dictSet = pRisk.setRisk.Trans_ToDict().copy() dictSet['操作时间'] = myData_Trans.Tran_ToDatetime_str( dictSet['操作时间'], "%Y-%m-%d %H:%M:%S") lstInfos[x] = dictSet jsonSetinfo = {} jsonSetinfo["dataTags"] = lstDate_Tag jsonSetinfo["setInfos"] = lstInfos pMsg['result'] = len(lstDate_Tag) > 0 pMsg['text'] = jsonSetinfo return pMsg
def getPrice(self, security, start_date="", end_date="", frequency='daily', fields=None, skip_paused=True, count=None): # 同步参数 dateTime = myData_Trans.Tran_ToDatetime_str(None, "%Y-%m-%d") start_date = myData.iif(start_date == "", dateTime + " 09:00:00", start_date) end_date = myData.iif(end_date == "", dateTime + " 13:00:00", end_date) # 查询数据 host = "http://hq.sinajs.cn/list=" url = host + security req = urllib.request.Request(url) res_data = urllib.request.urlopen(req) res = res_data.read().decode(encoding="gbk") values = res.split('=') stkid = values[0][11:] info = values[1][1:len(values[1]) - 4] vargs = info.split(',') # 区分股票与期权 if (stkid.count('CON_OP') == 1): value = float(vargs[2]) else: value = float(vargs[3]) return value
def __init__(self, pData, interval = 1): self.name = pData.name self.interval_M = interval #分钟级间隔 self.datas = {} #原始数据 self.datasS = [] #统计数据集--天 self.datasS_M = None #统计数据对象--分钟级 self.data = pData #当前数据对象 self.setting = myQuote_Setting._Find(pData.name, pData.idTag) #配置项,以标识为准,避免名称不统一 self.autoSave = True self.stoped = False self.tagTime = datetime.datetime.now() self.manageTrades = gol._Get_Setting('manageBills_Stock', None) #使用交易管理器 gol._Set_Value('datas_Stics_D_' + pData.id, self.datasS) #全局统计信息 #保存基础数据 strDir, strName = myIO.getPath_ByFile(__file__) Dir_Base = os.path.abspath(os.path.join(strDir, "..")) self.dir = Dir_Base + "/Data/" + self.name + "/" self.fileName = myData_Trans.Tran_ToDatetime_str(pData.getTime(), "%Y-%m-%d") myIO.mkdir(self.dir) if(self.loadData()): #加载已存数据 self.setData(pData)
def OnRecvQuote(self, quoteDatas): #设置有效检查 if(self.IsEnable(quoteDatas)== False): return #提取值--时间 strMsg = "" dtNow = quoteDatas.data.getTime() if(dtNow.minute == 0 or dtNow.minute == 30): #提取值 dValue_N = quoteDatas.datasS_M.dataS_Min_Now.dataS.getRise_Fall(0) #当前涨跌幅 key = quoteDatas.name #判断是否已经记录 lstValue = self.values.get(key, None) if(lstValue == None): lstValue = {} self.values[key] = lstValue strTime = myData_Trans.Tran_ToDatetime_str(dtNow, "%H:%M") + ":00" if(lstValue.get(strTime, None) == None): lstValue[strTime] = dValue_N #记录值 #组装返回结果 strMsg = quoteDatas.data.getMsg_str(quoteDatas.setting) strMsg += "\n整点播报:" + strTime + "." #通知处理 self.OnHandleMsg(quoteDatas, strMsg)
def _Trans_Time_moth(self, dtTime = '', nMonth = 1): if(type(dtTime) != datetime.datetime): dtTime = datetime.datetime.now() dtTime = dtTime - datetime.timedelta(days=(dtTime.day - 1)) while(nMonth > 1): dtTime = self._Trans_Time_moth(dtTime - datetime.timedelta(days=1)) nMonth -= 1 strTime = myData_Trans.Tran_ToDatetime_str(dtTime, "%Y-%m-%d") return myData_Trans.Tran_ToDatetime(strTime, "%Y-%m-%d")
def _Trans_Value_str(self, value, bSave_AsStr = True): #特殊类型转换 type = bSave_AsStr strVaulue = str(value) if(type == 'datetime'): strVaulue = myData_Trans.Tran_ToDatetime_str(value) elif(type in ["char","varchar"]): strVaulue = "'" + strVaulue + "'" return strVaulue
def upload_company(companyID=""): form = myCompanyForm() #生成form实例,给render_template渲染使用 needRefresh = True editSucess = False if form.validate_on_submit( ): #调用form实例里面的validate_on_submit()功能,验证数据是否安全,如是返回True,默认返回False if form.save.data: # 保存按钮被单击 # 组装row信息 pValues = [] if (True): pValues.append("-1") pValues.append(form.companyID.data) pValues.append(form.companyName.data) pValues.append(form.companyInStreet.data) pValues.append(form.companyInVillage.data) pValues.append(form.companyAdrr.data) pValues.append(form.companyScale.data) pValues.append(form.companyContacts.data) pValues.append(form.companyPhone.data) companyHasProcess = myData.iif( form.companyHasProcess.data == "是", True, False) pValues.append(companyHasProcess) pValues.append(form.companyNumProcess.data) pValues.append(form.companyRecycle.data) pValues.append(form.companyVolumeTotal.data) pValues.append( myData_Trans.Tran_ToDatetime_str( form.companyRedate.data)) pValues.append(form.companyRevolume.data) pValues.append(form.companyTransferredvolume.data) pValues.append(form.companyNoTransferredvolume.data) pValues.append(form.imgName_1.data) pValues.append(form.imgName_2.data) pValues.append(form.imgName_3.data) pValues.append(form.imgName_4.data) pValues.append(form.imgName_5.data) pValues.append(form.imgName_6.data) # 添加并保存信息 rowInfo = myData_Trans.Tran_ToStr(pValues, ',') dbCompany = gol._Get_Value('dbCompany') if (dbCompany.Add_Row_BySimply(rowInfo, True, True) != ""): editSucess = True else: # 保存时,验证失败,不需要刷新 if form.save.data: needRefresh = False return render_template('company_active carbon.html', title='company upload', form=form, companyID=companyID, needRefresh=needRefresh, editSucess=editSucess)
def query(self, checkTime=True, nReturn=0, parms=None): #组装参数 lstSets = self.paramsSet[self.type] time_s = int(myData_Trans.Tran_ToDatetime_str(None, "%S")) dtNow = myData_Trans.Tran_ToDatetime_str(None, "%Y-%m-%d %H:%M") #dtNow = "2020-06-29 14:00" #返回组 nNum = nReturn nResult = 0 lstReturn = [] #聚宽Stock接口查询 dtStart = dtNow + myData.iif(time_s < 10, F":0{time_s}", F":{time_s}") for x in lstSets: _values = self.pSource.getPrice(security=x.stockInfo.source_code, frequency='1m', start_date=dtStart, end_date=dtNow + ":59") if (len(_values) < 1): continue #转换数据 dataInfo = {'setInfo': x, "values": _values, "time": dtStart} qd = self.newData_ByInfo(dataInfo, checkTime) if (qd == None): continue #数据处理 try: if (nReturn <= 0): pDatas = self.setData(qd) if (pDatas != None): nResult += 1 else: if (nNum > 0): lstReturn.append(qd) nNum = nNum - 1 except Exception as e: myDebug.Error(str(e)) pass if (nReturn > 0): return lstReturn if (nResult > 0): print("") return True
def run_WebAPI(isPrint=True): #strUrl = "http://127.0.0.1:8686/zxcAPI/Model/Leak" strUrl = "http://120.197.152.99:18686/zxcAPI/Model/Leak" strPath = '{"tag": "东莞铭晋家具有限公司", "infoLeak": {"longitude": 113.8, "latitude": 23.0478, "height_leak": 5, "massrate_leak": 4407.661085743278, "timestart_leak": "2020-08-04 16:05:57"}, "infoTarget": [{"id": "441900403", "longitude": 113.7819, "latitude": 23.0536, "height": 15}], "infoEnvironment": {"wind_speed": 1.1, "wind_direction": "ESE", "wind_height": 15, "temperature": 27.6, "cloudy_is": true}}' #设置查询接口执行 pWeb = myWeb_urlLib.myWeb(strUrl, bPrint=False) strReturn = pWeb.Do_API_get(strPath, "zxcAPI-py") if (isPrint): print(myData_Trans.Tran_ToDatetime_str(), "查询结果:\n", strUrl, "--\n", strReturn, "\n")
def ToString2(self, nSpace=0): strSpace = " " * nSpace strBill = strSpace + "编号: " + str(self.tradeID) + "\n" strBill += strSpace + "红包归属: " + self.usrID + "\n" strBill += strSpace + "红包金额: " + str(self.tradeMoney) + "元 \n" strBill += strSpace + "红包来源: " + self.tradeParty + "\n" strBill += strSpace + "红包事由: " + self.usrBillType + "\n" strBill += strSpace + "红包时间: " + myData_Trans.Tran_ToDatetime_str( self.tradeTime, "%Y-%m-%d") + "\n" strBill += strSpace + "备注: " + self.remark return strBill
def Trans_Value_str(self, value, bSave_AsStr=True): if (bSave_AsStr): strVaulue = str(value) else: strVaulue = value #特殊类型转换 if (type(value) == bool): strVaulue = myData.iif(value, "TRUE", "FALSE") elif (type(value) == datetime.datetime): strVaulue = myData_Trans.Tran_ToDatetime_str(value) return strVaulue
def _Add(self, rowInfo={}, tableName=""): # 提取组装字段及数据 fields = "" values = "" hasDel = False hasDate = False # 默认字段修正 keys = rowInfo.keys() # keys = [item.lower() for item in keys] if ('isDel' not in keys): rowInfo['isDel'] = False if ('editTime' not in keys): rowInfo['editTime'] = myData_Trans.Tran_ToDatetime_str() # 提取组装字段及数据 keys = rowInfo.keys() for x in keys: if (x.lower() == 'id'): x = 'ID' fields += "," + x if (type(rowInfo[x]) == str): values += ",'" + rowInfo[x] + "'" elif (type(rowInfo[x]) == datetime.datetime): values += ",'" + myData_Trans.Tran_ToDatetime_str( rowInfo[x]) + "'" else: values += "," + str(rowInfo[x]) if (x == 'isDel'): hasDel = True if (x == 'editTime'): hasDate = True # 调用插入数据 fields = myData.iif(len(fields) > 1, fields[1:], fields) values = myData.iif(len(values) > 1, values[1:], values) rs = self.execute( self._dbName, f"INSERT INTO {tableName}({fields}) VALUES ({values});") return not rs == None
def output(self, lstReturn): pMsg = copy.deepcopy(gol._Get_Setting('Return_strFormat', {})) if (lstReturn != None and len(lstReturn) > 1): datas = [] for x in lstReturn: datas.append(x.toDict()) pMsg['datas'] = datas pMsg['result'] = True strJson = myData_Json.Trans_ToJson_str(pMsg) path = self.Dir_Swaps + "/Quote_" + myData_Trans.Tran_ToDatetime_str( None, "%Y-%m-%d-%H-%M-%S") + ".json" myIO.Save_File(path, strJson, isUtf=True, isNoBoom=True) return True return False
def toCSVString(self): return '\n' + myData_Trans.Tran_ToDatetime_str(self.dtTime) \ + ',' + str(self.seconds) \ + ',' + str(self.base) \ + ',' + str(self.start) \ + ',' + str(self.last) \ + ',' + str(self.high) \ + ',' + str(self.low) \ + ',' + str(self.average) \ + ',' + str(self.tradeVolume) \ + ',' + str(self.tradeTurnover) \ + ',' + str(self.tradeVolume_Start) \ + ',' + str(self.tradeVolume_End) \ + ',' + str(self.tradeTurnover_Start) \ + ',' + str(self.tradeTurnover_End)
def ToTitlestr(self, nSpace=0, isSimple=False, usrOrderType="", tradeTarget="", tradeType="", tradeTypeTarget=""): if (isSimple == False): strSpace = " " * nSpace strTrade = strSpace + "编号:" + str(self.infoID) + "\n" strTrade += strSpace + "用户名:" + self.usrID + "\n" strTrade += strSpace + "交易类型:" + self.usrOrderType + "\n" strTrade += strSpace + "标的信息:" + self.targetID + " " + self.targetName + "\n" if (self.usrOrderType not in myTradeAppetite): strTrade += strSpace + "交易金额:" + str(round(self.tradeMoney, 2)) + "元 \n" strTrade += strSpace + "交易价格:" + str(round( self.targetPrice, 2)) + "元 \n" else: strTrade += strSpace + "预期价格:" + str(round( self.targetPrice, 2)) + "元 \n" strTrade += strSpace + "账单时间:" + myData_Trans.Tran_ToDatetime_str( self.tradeTime, "%Y-%m-%d") + "\n" strTrade += strSpace + "备注:" + self.remark else: strTrade = self.tradeParty if (trade.usrOrderType not in myTradeAppetite): strTrade += "," + str(round(self.tradeMoney, 2)) + "元" if (usrTradeType == ""): strTrade += "," + self.usrTradeType if (tradeTarget == ""): strTrade += "," + self.tradeTarget if (tradeType == ""): strTrade += "," + self.tradeType if (tradeTypeTarget == ""): strTrade += "," + self.tradeTypeTarget strTrade += "," + str(self.infoID) strTrade += "," + myData_Trans.Tran_ToDatetime_str( self.tradeTime, "%Y-%m-%d") return strTrade
def SwapData_OutFile(self, tagName="", dirDest=""): dataOut = copy.copy(self.dataOut) self.dataOut = [] if (len(dataOut) < 1): return False jsonData = myData_Json.Json_Object(dataOut) dirOut = myData.iif(dirDest != "", dirDest, self.dirSwap_out) + "/" if (tagName == ""): tagName = self.tagName if (tagName == "" and dirOut == ""): return False fileName = tagName + myData_Trans.Tran_ToDatetime_str( None, "_%Y_%m_%d_%H_%M_%S") + ".json" content = jsonData.ToString(autoFormat=False).replace("\\", "/") myIO.Save_File(dirOut + fileName, content, True, False) #myDebug.Print("DataSwap Out IOFiles::" + dirOut + fileName) myDebug.Print("DataSwap Out IOFiles::" + fileName) return True
def addRiskSet(self, usrID, stockID, stockName, stockPrice, stockNum, time = "", dictSet = {}): dictSet['用户名'] = usrID #解析正确股票信息 if(True): stocks = self.stockSet._Find(stockID, stockName, "****") if(len(stocks) == 1): pStock = stocks[0] stockID = pStock.code_id + "." + pStock.extype2 stockName = pStock.code_name dictSet['标的编号'] = stockID dictSet['标的名称'] = stockName dictSet['标的均价'] = stockPrice dictSet['标的数量'] = stockNum dictSet['日期'] = myData.iif(time != "", time, myData_Trans.Tran_ToDatetime_str(None, "%Y-%m-%d %H:%M:%S")) #添加 strR = self.riskDB.Add_Row(dictSet, True) myDebug.Debug(strR)
def companyQuery(): #载入配置 company_id = request.args.get('company_id', "") company_name = request.args.get('company_name', "") print(company_id, company_name) dbCompany = gol._Get_Value('dbCompany') pCompany = dbCompany.getCompany(company_id, company_name).copy() if (pCompany == None): pCompany = dbCompany.OnCreat_RowInfo() pCompany['companyID'] = company_id pCompany['companyName'] = company_name #修正部分信息 pCompany['companyHasProcess'] = myData.iif( pCompany['companyHasProcess'], "是", "否") if (type(pCompany['companyRedate']) == datetime.datetime): pCompany['companyRedate'] = myData_Trans.Tran_ToDatetime_str( pCompany['companyRedate'], "%Y-%m-%d") jsonCompany = myData_Json.Json_Object(pCompany) return jsonCompany.ToString()
def getPrice(self, security, start_date="", end_date="", frequency='daily', fields=None, skip_paused=True, count=None): # 同步参数 dateTime = myData_Trans.Tran_ToDatetime_str(None, "%Y-%m-%d") start_date = myData.iif(start_date == "", dateTime + " 09:00:00", start_date) end_date = myData.iif(end_date == "", dateTime + " 13:00:00", end_date) # 查询数据 values = jqdatasdk.get_price(security=security, frequency=frequency, start_date=start_date, end_date=end_date, skip_paused=skip_paused) return values
def _Update(self, id, rowInfo={}, tableName="", idField='id'): # 提取组装字段及数据 editInfo = "" keys = rowInfo.keys() for x in keys: if (x.lower() == 'id'): continue if (type(rowInfo[x]) == str): editInfo += f",{x}='{rowInfo[x]}'" elif (type(rowInfo[x]) == datetime.datetime): values += ",'" + myData_Trans.Tran_ToDatetime_str( rowInfo[x]) + "'" else: editInfo += f",{x}={rowInfo[x]}" # 调用修改数据 editInfo = myData.iif(len(editInfo) > 1, editInfo[1:], editInfo) idInfo = myData.iif(type(id) == str, f"'{id}'", str(id)) rs = self.execute( self._dbName, f"UPDATE {tableName} SET {editInfo} WHERE {idField} = {idInfo};") return not rs == None
def Trans_FromDict(self, dictSets, canLog = True): #交易信息必须存在 if(dictSets == None): return False bExsit = False; index = -1 strTime = dictSets.get('日期', "") if(type(strTime) != str): strTime = myData_Trans.Tran_ToDatetime_str(dictSets['日期'], "%Y-%m-%d %H:%M:%S") #解析信息 self.ID = dictSets.get('ID',-1) self.usrID = dictSets['用户名'] self.usrTag = dictSets.get('用户标签',"") self.stockID = dictSets.get('标的编号',"") self.formName = dictSets.get('窗体名称',"") self.formType = dictSets.get('窗体类型',"") self.formRange = dictSets.get('窗体区域',[]) self.formPos = dictSets.get('窗体位置',[]) self.formRePos = dictSets.get('自动复位',False) self.datetime = dictSets.get("日期", self.datetime) self.remark = dictSets.get("备注", self.remark) self.isDel = dictSets.get('isDel', not self.valid) return True
def addRiskSet(self, usrID, usrTag, stockID, stockName, stockPrice, stockNum, time = "", dictSet = {}): dictSet['用户名'] = usrID dictSet['用户标签'] = usrTag #解析正确股票信息 if(True): stocks = self.stockSet._Find(stockID, stockName, "****") if(len(stocks) == 1): pStock = stocks[0] stockID = pStock.code_id + "." + pStock.extype2 stockName = pStock.code_name dictSet['标的编号'] = stockID dictSet['标的名称'] = stockName dictSet['标的均价'] = stockPrice dictSet['标的数量'] = stockNum dictSet['日期'] = myData.iif(time != "", time, myData_Trans.Tran_ToDatetime_str(None, "%Y-%m-%d %H:%M:%S")) #添加-区分买入卖出 pRisk = self.getRisk(usrID, usrTag, stockID, stockName, False) if(stockNum > 0): strR = self.riskDB.Add_Row(dictSet, True) myDebug.Debug(strR) if(pRisk == None): #添加记录信息 pRisk = self.initRiskSet(dictSet['用户名'], dictSet['用户标签'], dictSet['标的编号'], dictSet['标的名称'], False) #缓存 dictRisk = self.dictRisk.get(dictSet['标的编号'], {}) dictRisk[dictSet['用户名'] + "_" + dictSet['用户标签']] = pRisk if(len(dictRisk) == 1): self.dictRisk[dictSet['标的编号']] = dictRisk else: setRisk = self.riskDB.getSet(usrID, usrTag, stockID, isDel = False, setDB = pRisk.setDB) pSet = mySet_StockRisk(dictSet) pRisk.initSet(pSet, pRisk.setDB) elif(stockNum < 0): if(pRisk != None): pRisk.updataTrade(stockPrice, stockNum, dictSet['日期'])
def _Done_Image(self, Text, msgID="", usrInfo={}): #图片判别,只处理手机截图(图片行列比) #提取图片内容,ORC通用识别 #Text = "E:\\myCode\\zxcProj\\src\\Zxc.Python\\zxcPy.All.Base\\Temps\\Images\\Test.png" txtInfo = myAI_Baidu.ORC(Text, "", out_debug=False) myDebug.Debug(str(txtInfo)) #按文字内容组合定义图片类型 dictInfos = {'收益率': "", '日期': ""} num = txtInfo['wordText'].count('资产分析') if (num >= 1): # 使用文字匹配方式解析 year = myData_Trans.Tran_ToTime_str(None, "%Y") if (txtInfo['wordText'].count('同花顺-资产分析') == 1): #同花顺截图 #'u中国联通令\n下午3:10\n64%\n同花顺-资产分析\n2019-01-01~2019-08-27\n分享\n本月\n近三月\n近半年\n今年\n近两年\n30.0%\n10.0%\n0.0%\n-10.0%\n01-01\n04-01\n07-01\n我上证○深证○创业板○上证50\nC沪深30中证500收益走势\n今年跑嬴上证指数\n23.03%\n我\n3940%\n上证\n16.37%\n深证\n30.43%\n创业板\n30.19%' ind = txtInfo['words'].index('我') if (ind > 0): txt = txtInfo['words'][ind + 1] dictInfos['收益率'] = float(txt.replace('%', "")) / 100 if (txt.count('.') == 0): dictInfos['收益率'] = dictInfos['收益率'] / 100 #小数点未正确识别修正 # 提取日期 lst = [n for n in txtInfo['words'] if n.count(year) == 2] if (len(lst) == 1): times = lst[0].split('~') if (times[0][0:10] == year + "-01-01"): #日期校检,必须当年开始 dictInfos['日期'] = myData_Trans.Tran_ToDatetime( times[1], '%Y-%m-%d') pass else: #君弘截图 #'10:09:1l\n(80\n资产分析\n20190101~20190828\n今年收益率17.48%\n今日本月近三个月近半年今年2018\n30%\n20%\n2019.01.31\n我:-0.11\n10%\n上证:3.64%\n10%\n01.31\n03.29\n05.31\n07.31\n●我○上证深证○创业\n1.46%\n跑赢上证\n1.46%\n跑输深证\n-12.56%\n跑输创业\n-12.47%\n资产分析\n证券分析\n月度分析\n账单' # 提取今年收益率 lst = [n for n in txtInfo['words'] if n.count('今年收益率') == 1] if (len(lst) == 1): txt = lst[0] dictInfos['收益率'] = float( txt.replace('今年收益率', "").replace('%', "")) / 100 if (txt.count('.') == 0): dictInfos['收益率'] = dictInfos['收益率'] / 100 #小数点未正确识别修正 # 提取日期 lst = [n for n in txtInfo['words'] if n.count(year) == 2] if (len(lst) == 1): times = lst[0].split('~') if (times[0][0:8] == year + "0101"): #日期校检,必须当年开始 dictInfos['日期'] = myData_Trans.Tran_ToDatetime( times[1], '%Y%m%d') pass if (dictInfos['收益率'] == 0): return "" # 修正日期为字符串、收益率格式等 usrName = usrInfo.get('usrNameNick', "") usrProfit = dictInfos['收益率'] if (dictInfos.get('日期', "") != ""): dictInfos['日期-前'] = myData_Trans.Tran_ToDatetime_str( dictInfos['日期'] + datetime.timedelta(days=1), '%Y-%m-%d') dictInfos['日期'] = myData_Trans.Tran_ToDatetime_str( dictInfos['日期'], '%Y-%m-%d') if (dictInfos.get('收益率', "") != ""): dictInfos['收益率'] = str( Decimal((usrProfit * 100)).quantize(Decimal('0.00'))) + "%" #记录信息 pDB = gol._Get_Setting('zxcdbStockReturns') lstQuery = pDB.Query("isDel==False && 日期>=" + dictInfos['日期-前'], "日期", True) if (len(lstQuery) > 0): return "" #必须比已有日期大 myDebug.Debug( pDB.Add_Row( { '用户名': usrName, '收益': usrProfit, '日期': dictInfos['日期'] }, True)) #组装返回 lstR = pDB.Get_Ranks(usrName, True) if (len(lstR) < 1): return "@" + usrName + " 收益信息记录失败!当前收益率:" + dictInfos[ '收益率'] + "." dicRand = lstR[0] strRank = " 您的收益排名:第 " + dicRand['ranking'] + ", 收益率:" + dicRand[ 'profit'] + " " return "@" + usrName + " " + strRank return ""
def toCSVString(self): strCSV = "\n" + myData_Trans.Tran_ToDatetime_str(self.msgTime) strCSV += "," + self.usrFrom strCSV += "," + self.msg strCSV += "," + self.msgType return strCSV