def _Get_QueryParam(self, cmds): nLen = len(cmds) if (nLen > 1): tradeParty = self._Get_Param(cmds, nLen, 2, self.billTradeParty) tradeTarget = self._Get_Param(cmds, nLen, 3, self.billTradeTarget) typeBill = self._Get_Param(cmds, nLen, 4, self.billType) tradeType = self._Get_Param(cmds, nLen, 5, self.billTradeType) tradeTargetType = self._Get_Param(cmds, nLen, 6, self.billTradeTargetType) startTime = self._Get_Param(cmds, nLen, 7, "") endTime = self._Get_Param(cmds, nLen, 8, "") if (startTime != ""): startTime = myData_Trans.Tran_ToDatetime(startTime, "%Y-%m-%d") if (endTime != ""): endTime = myData_Trans.Tran_ToDatetime(endTime, "%Y-%m-%d") #时间修正, 区分年月 nMonth = 0 nYear = 0 if (cmds[1].count("年") == 1): if (type(startTime) != datetime.datetime): nYear = int(cmds[1].replace("年", "").strip()) startTime = self.bills._Trans_Time_year("", nYear) else: nMonth = int(cmds[1].replace("月", "").strip()) return tradeParty, typeBill, tradeTarget, tradeType, tradeTargetType, startTime, endTime, nMonth
def _Init(self): #提取字段信息 #dtUser = myIO_xlsx.loadDataTable(self.Path_SetUser, 0, 1) #用户信息 dtUser = myIO_xlsx.DtTable() dtUser.Load_csv(self.Path_SetUser, 1, 0, isUtf=True) if (len(dtUser.dataMat) < 1 or len(dtUser.dataField) < 1): return lstFields_ind = dtUser.Get_Index_Fields(self.lstFields) #转换为功能权限对象集 for dtRow in dtUser.dataMat: pUser = myRoot_Usr("", dtRow[lstFields_ind["用户名"]]) pUser.usrID_sys = dtRow[lstFields_ind["ID"]] pUser.usrRelationID_sys = dtRow[ lstFields_ind["RelationIDs"]].split('、') pUser.usrName_Nick = dtRow[lstFields_ind["用户昵称"]] pUser.usrID = dtRow[lstFields_ind["用户ID"]] pUser.usrName_Full = dtRow[lstFields_ind["用户姓名"]] if (pUser.usrName_Full != ""): pUser.usrRelations.append(pUser.usrName_Full) pUser.usrPlat = dtRow[lstFields_ind["来源平台"]] pUser.usrPhones = dtRow[lstFields_ind["电话"]].split('、') pUser.usrTags = dtRow[lstFields_ind["标签"]].split('、') pUser.usrAddresss = dtRow[lstFields_ind["地址"]].split('、') pUser.usrRamak = dtRow[lstFields_ind["备注"]] pUser.usrNotes = dtRow[lstFields_ind["描述"]] pUser.usrTime_Regist = myData_Trans.Tran_ToDatetime( dtRow[lstFields_ind["注册时间"]]) pUser.usrTime_Logined_Last = myData_Trans.Tran_ToDatetime( dtRow[lstFields_ind["最后登录时间"]]) pUser.usrLoaded = True self._Index(pUser) #索引用户信息
def _Init_DB(self, path): #提取字段信息 dtDB = myIO_xlsx.DtTable() dtDB.Load_csv(path, 1, 0, True, 0, ',', isUtf=True) lstFields = [ "编号", "用户名", "操作类型", "标的代码", "标的名称", "标的所属市场", "标的所属市场板块", "标的价格", "标的价格-期望", "标的仓位", "标的所属行业", "标的所属概念", "交易类型", "交易子类型", "交易数量", "交易金额", "交易量仓位占比", "交易收益", "交易收益-总计", "交易时间", "是否删除", "记录人", "记录时间", "备注" ] if (dtDB.sheet == None): dtDB.dataField = lstFields lstFields_ind = dtDB.Get_Index_Fields(lstFields) self.lstFields = lstFields self.pathData = path #装载账单记录 self.usrDB = {} self.indLst = [] for dtRow in dtDB.dataMat: trade = myObj_Trade() if (dtRow[lstFields_ind["记录时间"]] == ""): continue trade.recordTime = myData_Trans.Tran_ToDatetime( dtRow[lstFields_ind["记录时间"]]) trade.recorder = dtRow[lstFields_ind["记录人"]] trade.usrID = dtRow[lstFields_ind["用户名"]] trade.usrOrderType = dtRow[lstFields_ind["操作类型"]] trade.targetID = dtRow[lstFields_ind["标的代码"]] trade.targetName = dtRow[lstFields_ind["标的名称"]] trade.targetMarket = dtRow[lstFields_ind["标的所属市场"]] trade.targetMarketBoard = dtRow[lstFields_ind["标的所属市场板块"]] trade.targetIndustries = dtRow[lstFields_ind["标的所属行业"]].split("、") trade.targetConcepts = dtRow[lstFields_ind["标的所属概念"]].split("、") trade.targetPrice = float(dtRow[lstFields_ind["标的价格"]]) trade.targetPrice_Ex = float(dtRow[lstFields_ind["标的价格-期望"]]) trade.targetPosition = float(dtRow[lstFields_ind["标的仓位"]]) trade.infoID = int(dtRow[lstFields_ind["编号"]]) trade.tradeType = dtRow[lstFields_ind["交易类型"]] trade.tradeType_sub = dtRow[lstFields_ind["交易子类型"]] trade.tradeNum = float(dtRow[lstFields_ind["交易数量"]]) trade.tradeMoney = float(dtRow[lstFields_ind["交易金额"]]) trade.tradePosition = float(dtRow[lstFields_ind["交易量仓位占比"]]) trade.tradeProfit = float(dtRow[lstFields_ind["交易收益"]]) trade.tradeProfit_total = float(dtRow[lstFields_ind["交易收益-总计"]]) trade.tradeTime = myData_Trans.Tran_ToDatetime( dtRow[lstFields_ind["交易时间"]]) trade.isDel = myData.iif(dtRow[lstFields_ind["是否删除"]] == "TRUE", True, False) trade.remark = dtRow[lstFields_ind["备注"]] self.usrDB[trade.infoID] = trade self.indLst.append(trade.infoID) # 顺序记录索引 self.dtDB = dtDB
def getTime(self, bMinute = False): if(not bMinute): if(self.datetime == None): self.datetime = myData_Trans.Tran_ToDatetime(self.date + " " + self.time) #print(self.datetime) return self.datetime else: times = self.time.split(":") datetime = myData_Trans.Tran_ToDatetime(self.date + " " + times[0] + ":" + times[1], "%Y-%m-%d %H:%M") myDebug.Debug(datetime , "-- New Minutes") return datetime
def _Init_DB(self, path): #提取字段信息 dtDB = myIO_xlsx.DtTable() dtDB.Load_csv(path, 1, 0, True, 0, ',', isUtf=True) lstFields = [ "编号", "账单类型", "交易方", "交易类型", "交易子类", "交易内容", "交易单价", "交易数量", "剩余数量", "交易金额", "手续费", "交易收益", "交易时间", "关联编号", "是否删除", "记录人", "记录时间", "备注" ] if (dtDB.sheet == None): dtDB.dataField = lstFields lstFields_ind = dtDB.Get_Index_Fields(lstFields) self.lstFields = lstFields self.pathData = path #装载账单记录 self.usrDB = {} self.indLst = [] for dtRow in dtDB.dataMat: bill = myObj_Bill() bill.usrID = self.usrID if (dtRow[lstFields_ind["记录时间"]] == ""): continue bill.recordTime = myData_Trans.Tran_ToDatetime( dtRow[lstFields_ind["记录时间"]]) bill.recorder = dtRow[lstFields_ind["记录人"]] bill.usrBillType = dtRow[lstFields_ind["账单类型"]] bill.tradeID = int(dtRow[lstFields_ind["编号"]]) bill.tradeParty = dtRow[lstFields_ind["交易方"]] bill.tradeType = dtRow[lstFields_ind["交易类型"]] bill.tradeTypeTarget = dtRow[lstFields_ind["交易子类"]] bill.tradeTarget = dtRow[lstFields_ind["交易内容"]] bill.tradePrice = float(dtRow[lstFields_ind["交易单价"]]) bill.tradeNum = float(dtRow[lstFields_ind["交易数量"]]) bill.tradeNum_Stock = float(dtRow[lstFields_ind["剩余数量"]]) bill.tradeMoney = float(dtRow[lstFields_ind["交易金额"]]) bill.tradePoundage = float(dtRow[lstFields_ind["手续费"]]) bill.tradeProfit = float(dtRow[lstFields_ind["交易收益"]]) bill.tradeTime = myData_Trans.Tran_ToDatetime( dtRow[lstFields_ind["交易时间"]]) bill.tradeID_Relation = dtRow[lstFields_ind["关联编号"]] if (bill.tradeID_Relation == "0"): bill.tradeID_Relation = "" bill.isDel = myData.iif(dtRow[lstFields_ind["是否删除"]] == "TRUE", True, False) bill.remark = dtRow[lstFields_ind["备注"]] self.usrDB[bill.tradeID] = bill self.indLst.append(bill.tradeID) # 顺序记录索引 self.dtDB = dtDB
def setTime(self): self.dtDay = myData_Trans.Tran_ToTime_str(None, "%Y-%m-%d") #当前天 self.startTime = myData_Trans.Tran_ToDatetime(self.dtDay + " 9:26:30") #起始时间 self.endTime = myData_Trans.Tran_ToDatetime(self.dtDay + " 11:30:30") #结束时间 self.endTime2 = myData_Trans.Tran_ToDatetime(self.dtDay + " 15:16:00") #结束时间--收盘 self.timeIntervals = 0 #时间段监测 tNow = datetime.datetime.now() if (tNow.hour > 15): self.timeIntervals = 1 return (self.startTime < tNow and tNow < self.endTime2)
def OnHandleMsg_ByThread(self): try: #线程循环 while self.isRuning: try: #循环所有缓存进行处理 for x in self.usrMsgs_Buffer: bNeedSend = False time = x.get("timeLimit", "") if (time == "" and myData_Trans.Is_Numberic(time)): bNeedSend = True else: if (type(time) != datetime.datetime): time = myData_Trans.Tran_ToDatetime(time) time_N = datetime.datetime.now() if (time_N >= time): bNeedSend = True #消息发送 if (bNeedSend == False): continue x['timeLimit'] = "" self.OnHandleMsg(x, "") self.usrMsgs_Buffer.remove(x) # 延时 self.OnHandleMsg_ByThread_sleep(0.5) except: myDebug.Error("Err:: Run_OnHandleMsg_ByThread... ") except: myDebug.Error("Err:: Run_OnHandleMsg_ByThread... Restart...") myDebug.Print('Thread Run_OnHandleMsg_ByThread is exiting...')
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 __init__(self): self.wind_Speed = 0 self.wind_Direction = 0 self.wind_Direction2 = 0 self.wind_Direction_Alias = "" self.wind_Height = 0 self.wind_Tiem_start = myData_Trans.Tran_ToDatetime("") self.wind_Tiem_duration = 0
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 initWind(self, direction, speed, higth=0, startTime="", duration=-1): self.wind_Speed = myData_Trans.To_Float(str(speed)) self.wind_Direction = self.initWind_Direction(direction) self.wind_Direction2 = 90 - self.wind_Direction if (self.wind_Direction2 < 0): self.wind_Direction2 += 360 self.wind_Height = myData_Trans.To_Float(str(higth)) self.wind_Tiem_start = startTime if (type(self.wind_Tiem_start) == str): self.wind_Tiem_start = myData_Trans.Tran_ToDatetime(startTime) self.wind_Tiem_duration = duration
def checkTime(self, data=None): if (data == None): tNow = datetime.datetime.now() if (self.startTime < tNow and tNow < self.endTime): return True else: if (tNow > self.endTime): self.startTime = myData_Trans.Tran_ToDatetime( self.dtDay + " 13:00:00") #起始时间 self.endTime = self.endTime2 #结束时间 if (self.startTime < tNow and tNow < self.endTime): return True return False #时间判断 tNow = data.datetime_queryed if (self.startTime < tNow and tNow < self.endTime): if (self.timeIntervals > 0): self.timeIntervals += 1 return True elif (self.timeIntervals == 0 and self.endTime < tNow): self.startTime = myData_Trans.Tran_ToDatetime( self.dtDay + " 13:00:00") #起始时间 self.endTime = self.endTime2 #结束时间 self.timeIntervals += 1 if (self.datasNow != None): self.datasNow.saveData() #保存数据(第一时段结束) return self.checkTime(data) elif (self.endTime < tNow): if (self.datas.get(data.name, None) == None): #初始数据(当天结束时段后,只有一条数据) self.timeIntervals += 1 return True elif (self.timeIntervals > 1): #设置数据监听停止 if (self.datasNow.name != data.name): self.datasNow = self.datas.get(data.name, None) if (self.datasNow.stoped == False): self.datasNow.saveData() #保存数据(第二时段结束) self.datasNow.stoped = True myDebug.Print("... stoped data(" + data.name + ")...") return False
def _Init(self): #提取字段信息 #dtGroup = myIO_xlsx.loadDataTable(self.Path_SetUser, 0, 1) #用户信息 dtGroup = myIO_xlsx.DtTable() dtGroup.Load_csv(self.Path_SetUser, 1, 0, isUtf=True) if (len(dtGroup.dataMat) < 1 or len(dtGroup.dataField) < 1): return lstFields_ind = dtGroup.Get_Index_Fields(self.lstFields) #转换为功能权限对象集 for dtRow in dtGroup.dataMat: pGroup = myRoot_GroupInfo("", dtRow[lstFields_ind["群组名"]]) pGroup.groupID = dtRow[lstFields_ind["ID"]] pGroup.typeName = dtRow[lstFields_ind["来源平台"]].split('、') pGroup.groupDesc = dtRow[lstFields_ind["描述"]] pGroup.groupTime_Regist = myData_Trans.Tran_ToDatetime( dtRow[lstFields_ind["注册时间"]]) pGroup.groupTime_Logined_Last = myData_Trans.Tran_ToDatetime( dtRow[lstFields_ind["最后登录时间"]]) self._Index(pGroup) #索引用户信息
def Init_ByDict(self, tradeInfo={}): self.usrID = tradeInfo.get("usrID", "") self.usrOrderType = tradeInfo.get("usrOrderType", "") self.recordTime = tradeInfo.get("recordTime", datetime.datetime.now()) if (self.recordTime == None): self.recordTime = datetime.datetime.now() self.recorder = tradeInfo.get("recorder", "zxcRobot") if (self.recorder == ''): self.recorder = 'zxcRobot' self.targetID = tradeInfo.get("targetID", 0) self.targetName = tradeInfo.get("targetName", "") self.targetMarket = tradeInfo.get("targetMarket", "") self.targetMarketBoard = tradeInfo.get("targetMarketBoard", "") self.targetIndustries = tradeInfo.get("targetIndustries", []) self.targetConcepts = tradeInfo.get("targetConcepts", []) self.targetPrice = tradeInfo.get("targetPrice", 0) self.targetPrice_Ex = tradeInfo.get("targetPrice_Ex", 0) self.targetPosition = tradeInfo.get("targetPosition", 0) self.infoID = tradeInfo.get("infoID", 0) self.tradeType = tradeInfo.get("tradeType", "") self.tradeType_sub = tradeInfo.get("tradeType_sub", "") self.tradeNum = tradeInfo.get("tradeNum", 0) self.tradeMoney = tradeInfo.get("tradeMoney", 0) self.tradePosition = tradeInfo.get("tradePosition", 0) self.tradeProfit = tradeInfo.get("tradeProfit", 0) self.tradeProfit_total = tradeInfo.get("tradeProfit_total", 0) dateTime = tradeInfo.get("tradeTime", "") self.tradeTime = myData.iif(dateTime == "", datetime.datetime.now(), dateTime) if (type(self.tradeTime) == str): if (self.tradeTime.count(":") == 2): self.tradeTime = myData_Trans.Tran_ToDatetime(dateTime) else: self.tradeTime = myData_Trans.Tran_ToDatetime( dateTime, "%Y-%m-%d") self.isDel = tradeInfo.get("isDel", False) self.remark = tradeInfo.get("remark", "") return self.Init_CheckInfo(self.usrOrderType, self.tradeType, self.tradeType_sub)
def SwapData_In(self, nStepSwaps=1): nums = 0 lstDatas = [] nStepSwaps = myData.iif(nStepSwaps <= 0, sys.maxsize, nStepSwaps) lstFiles = myIO.getFiles(self.dirSwap, wildcard=".json", iswalk=False) if (len(lstFiles) < 1): return lstDatas myDebug.Print("DataSwap IOFiles::") myDebug.Print("\t" + self.dirSwap) myDebug.Print("\tSwap IOFiles(" + str(len(lstFiles)) + ")") for file in lstFiles: fileName = myIO.getFileName(file, True) if (fileName[0:len(self.tagName)] != self.tagName): continue if (self.checkNeedAck(fileName)): continue # 超时校检 if (self.delayedTime > 0): #解析时间并校检 timeTag = fileName[len(self.tagName) + 1:] timeData = myData_Trans.Tran_ToDatetime( timeTag, "%Y-%m-%d-%H-%M-%S") dtNow = datetime.datetime.now() if ((dtNow - timeData).seconds > self.delayedTime): self.SwapData_BackUp(file) continue #读取文件内容 myDebug.Print("\tnew file swap:: " + myIO.getFileName(file, False)) strJson = myIO.getContent(file, noBOM=True) pJson = myData_Json.Json_Object() pJson.Trans_FromStr(strJson) #组装交换信息 data = {"path": file, "fileInfo": pJson._dict_} lstDatas.append({"tagAck": fileName, "data": data}) #记录Ackinfo if (self.useAck): ackInfo = { "isAcked": False, "time": datetime.datetime.now(), "retrys": 0, "path": file } self.ackDict[fileName] = ackInfo else: self.SwapData_BackUp(file) nums += 1 if (nums >= nStepSwaps): break myDebug.Print("DataSwap IOFiles End." + "\tMargin Swap IOFiles(" + str(len(lstFiles) - len(lstDatas)) + ")\n") return lstDatas
def loadDt_Row(self, ind_row, col_start=0, isField=False, csvLines=None): pTypes = self.dataFieldType nFields = len(pTypes) pValues = [] if (csvLines == None): rows = self.sheet.row_values( ind_row) # 获取整行内容,列内容: pSheet.col_values(i) cols = self.sheet.ncols else: rows = csvLines # csv行数据 cols = len(self.dataField) # 转换数据类型 cols_row = len(rows) for j in range(col_start, cols): if (nFields > j and cols_row > j and isField == False): if (pTypes[j] == myFiledype.float): pValues.append(float(rows[j])) continue elif (pTypes[j] == myFiledype.int): pValues.append(int(rows[j])) continue elif (pTypes[j] == myFiledype.datetime): nCount = rows[j].count(":") if (nCount == 0): pValues.append( myData_Trans.Tran_ToDatetime(rows[j], "%Y-%m-%d")) elif (nCount == 1): pValues.append( myData_Trans.Tran_ToDatetime( rows[j], "%Y-%m-%d %H:%M")) else: pValues.append(myData_Trans.Tran_ToDatetime(rows[j])) continue elif (pTypes[j] == myFiledype.bool): pValues.append(myData_Trans.To_Bool(rows[j])) continue #其他全部为默认类型 pValues.append(rows[j]) return pValues
def Init_ByDict(self, tradeInfo={}): self.usrID = tradeInfo.get("usrID", "") usrBillType = tradeInfo.get("usrBillType", "") self.recordTime = tradeInfo.get("recordTime", datetime.datetime.now()) if (self.recordTime == None): self.recordTime = datetime.datetime.now() self.recorder = tradeInfo.get("recorder", "zxcRobot") if (self.recorder == ''): self.recorder = 'zxcRobot' self.tradeID = tradeInfo.get("tradeID", 0) self.tradeID_Relation = tradeInfo.get("tradeID_Relation", "") self.tradeParty = tradeInfo.get("tradeParty", "") tradeType = tradeInfo.get("tradeType", "") tradeTypeTarget = tradeInfo.get("tradeTypeTarget", "") tradeTarget = tradeInfo.get("tradeTarget", "") self.tradePrice = tradeInfo.get("tradePrice", 0) self.tradeNum = tradeInfo.get("tradeNum", 0) self.tradeNum_Stock = tradeInfo.get("tradeNum_Stock", 0) if (usrBillType == '买入'): self.tradeNum_Stock = self.tradeNum self.tradeMoney = tradeInfo.get("tradeMoney", 0) self.tradePoundage = tradeInfo.get("tradePoundage", 0) self.tradeProfit = tradeInfo.get("tradeProfit", 0) dateTime = tradeInfo.get("tradeTime", "") self.tradeTime = myData.iif(dateTime == "", datetime.datetime.now(), dateTime) if (type(self.tradeTime) == str): if (self.tradeTime.count(":") == 2): self.tradeTime = myData_Trans.Tran_ToDatetime(dateTime) else: self.tradeTime = myData_Trans.Tran_ToDatetime( dateTime, "%Y-%m-%d") self.isDel = tradeInfo.get("isDel", False) self.remark = tradeInfo.get("remark", "") self.Init_TypeInfo(usrBillType, tradeTarget, tradeType, tradeTypeTarget)
def fromValueList(self, lstValue): self.dtTime = lstValue[0] if(type(self.dtTime) != datetime.datetime): self.dtTime = myData_Trans.Tran_ToDatetime(str(self.dtTime)) self.seconds = lstValue[1] self.base = lstValue[2] self.start = lstValue[3] self.last = lstValue[4] self.high = lstValue[5] self.low = lstValue[6] self.average = lstValue[7] self.tradeVolume = lstValue[8] self.tradeTurnover = lstValue[9] self.tradeVolume_Start = lstValue[10] self.tradeVolume_End = lstValue[11] self.tradeTurnover_Start = lstValue[12] self.tradeTurnover_End = lstValue[13]
def __init__(self): super().__init__() self.modelName = "Atmospheric_Diffusion" self.modelName_Alias = "大气扩散模型" self.modelType = "webAPI" self.modelResult = "" self.modeRunning = False self.wind = myModel_Object.myObj_Wind() self.air = myModel_Object.myObj_Air() self.sun = myModel_Object.myObj_Sun() self.longitude_Leak = 0 self.latitude_Leak = 0 self.height_Leak = 0 self.massrate_Leak = 0 self.infoTargets = [] self.dtLeak = myData_Trans.Tran_ToDatetime("") self.hasChimney = False
def fromValueList(self, lstValue): self.dataList = lstValue dtNow = lstValue[0] if(type(dtNow) == str): dtNow = myData_Trans.Tran_ToDatetime(dtNow) self.date = str(dtNow.year) + "-" + str(dtNow.month) + "-" + str(dtNow.day) self.time = str(dtNow.hour) + ":" + str(dtNow.minute) + ":" + str(dtNow.second) self.lastPrice = str(lstValue[1]) self.highPrice = str(lstValue[2]) self.lowPrice = str(lstValue[3]) self.buyPrice = str(lstValue[4]) self.sellPrice = str(lstValue[5]) self.tradeValume = str(lstValue[6]) self.tradeTurnover = str(lstValue[7]) self.buy1Volume = str(lstValue[8]) #买1-5量 self.buy2Volume = str(lstValue[9]) self.buy3Volume = str(lstValue[10]) self.buy4Volume = str(lstValue[11]) self.buy5Volume = str(lstValue[12]) self.buy1Price = str(lstValue[13]) #买1-5价格 self.buy2Price = str(lstValue[14]) self.buy3Price = str(lstValue[15]) self.buy4Price = str(lstValue[16]) self.buy5Price = str(lstValue[17]) self.sell1Volume = str(lstValue[18]) #卖1-5量 self.sell2Volume = str(lstValue[19]) self.sell3Volume = str(lstValue[20]) self.sell4Volume = str(lstValue[21]) self.sell5Volume = str(lstValue[22]) self.sell1Price = str(lstValue[23]) self.sell2Price = str(lstValue[24]) self.sell3Price = str(lstValue[25]) self.sell4Price = str(lstValue[26]) self.sell5Price = str(lstValue[27]) self.priceOpen = myData_Trans.To_Float(self.openPrice) #开盘价格 self.priceBase = myData_Trans.To_Float(self.preClose) #前一收盘价格 return True
# 期权交易测试-实时模拟 if(1 == 2): #初始风险对象 pRisk_300033 = pRisk.getRiskSet('茶叶一主号', '300033', "", True) pRisk_3000 = pRisk.getRiskSet('茶叶一主号', '10001965.XSHG', "", True) pRisk_3100 = pRisk.getRiskSet('茶叶一主号', '10001966.XSHG', "", True) #消息初始 pMMsg = gol._Get_Setting('manageMsgs') msg = pMMsg.OnCreatMsg() msg["usrName"] = "@*股票风控监测群" msg["msgType"] = "TEXT" msg["usrPlat"] = "wx" #循环 dtTime = myData_Trans.Tran_ToDatetime("2019-10-23 09:30:00", "%Y-%m-%d %H:%M:%S") num = 1 while(True): #时间参数 dtTime += datetime.timedelta(minutes=1) dtNow = myData_Trans.Tran_ToDatetime_str(dtTime, "%Y-%m-%d %H:%M") dtStart = myData_Trans.Tran_ToDatetime(dtNow + ":00", "%Y-%m-%d %H:%M:%S") dtNext = myData_Trans.Tran_ToDatetime(dtNow + ":59", "%Y-%m-%d %H:%M:%S") #提取当前期权价格 sources_300033 = pSource.getPrice(security='300033.XSHE',frequency='1m',start_date=dtStart,end_date=dtNext) sources_3000 = pSource.getPrice(security='10001965.XSHG',frequency='1m',start_date=dtStart,end_date=dtNext) sources_3100 = pSource.getPrice(security='10001966.XSHG',frequency='1m',start_date=dtStart,end_date=dtNext) if(len(sources_3100) < 1): continue priceAvg_300033 = sources_300033['money'][0] / sources_300033['volume'][0]
def Trans_FromDict(self, dictSets, canLog=True): #验证股票信息 #pStocks = gol._Get_Value('setsStock', None) #lstStock = pStocks._Find(dictSets.get('标的编号',""), dictSets.get('标的名称',""), exType="") #if(len(lstStock) != 1): return{} #pStock = lstStock[0] #self.stockID = pStock.code_id #self.stockName = pStock.code_name #交易信息必须存在 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") for x in self.logOperates: index += 1 if (x['时间'] == strTime): bExsit = True break #解析信息 self.ID = dictSets.get('ID', self.ID) self.usrID = dictSets.get('用户名', self.usrID) self.usrTag = dictSets.get('用户标签', self.usrTag) self.stockID = dictSets.get('标的编号', self.stockID) self.stockName = dictSets.get('标的名称', self.stockName) self.stockType = dictSets.get('标的类型', self.stockType) stockNum_temp = myData_Trans.To_Float(str(dictSets.get("标的数量", 0))) stockAvg_temp = myData_Trans.To_Float(str(dictSets.get("标的均价", 0))) stockPosition_temp = myData_Trans.To_Float(str(dictSets.get("标的仓位", 1))) if (stockNum_temp == 0 or stockNum_temp == 0): return False self.logDatetime = dictSets.get("操作时间", self.logDatetime) if (type(self.logDatetime) == str): self.logDatetime = myData_Trans.Tran_ToDatetime( self.logDatetime, "%Y-%m-%d %H:%M:%S") self.remark = dictSets.get("备注", self.remark) self.isDel = dictSets.get('isDel', not self.valid) if (canLog): #提取时间 strTime = self.logDatetime if (type(strTime) != str): strTime = myData_Trans.Tran_ToDatetime_str( strTime, "%Y-%m-%d %H:%M:%S") #存在则更新 if (bExsit == False): self.logOperates.append({ "股数": stockNum_temp, "股价": stockAvg_temp, "时间": strTime }) #仓位变化记录 else: self.logOperates[index] = { "股数": stockNum_temp, "股价": stockAvg_temp, "时间": strTime } else: self.logOperates = dictSets.get('操作日志', self.logOperates) self.sumOperates = dictSets.get('操作统计数', 0) #计算仓位变化 if (bExsit == False): stockNum = self.stockNum if (stockNum_temp > 0): #买入时更新成本 stockNum += abs(stockNum_temp) stockMoney = self.stockAvg * self.stockNum + stockNum_temp * stockAvg_temp self.stockPosition = ( stockNum_temp * stockPosition_temp + self.stockNum * self.stockPosition) / stockNum self.stockAvg = stockMoney / stockNum self.stockNum = int(stockNum) else: #卖出更新仓位 if (stockNum == 0): stockNum = stockNum_temp self.stockNum = int(stockNum) self.stockAvg = stockAvg_temp self.stockPosition = ( stockNum_temp * stockPosition_temp + self.stockNum * self.stockPosition) / stockNum if (self.stockPosition <= 0): self.stockPosition = 0 self.valid = False self.stockFee = dictSets.get("手续费率", self.stockFee) self.limitHit = dictSets.get("边界限制", self.limitHit) self.fixHit = dictSets.get("定量监测", self.fixHit) self.deltaProfit = dictSets.get("监测间隔", self.deltaProfit) self.stopProfit = dictSets.get("止盈线", self.stopProfit) self.stopLoss = dictSets.get("止损线", self.stopLoss) self.stopProfit_Dynamic = dictSets.get("动态止盈", self.stopProfit_Dynamic) self.stopLoss_Dynamic = dictSets.get("动态止损", self.stopLoss_Dynamic) self.stopProfit_Retreat = dictSets.get("止盈回撤", self.stopProfit_Retreat) self.stopLoss_Retreat = dictSets.get("止损回撤", self.stopLoss_Retreat) self.stopProfit_Trade = dictSets.get("止盈比例", self.stopProfit_Trade) self.stopLoss_Trade = dictSets.get("止损比例", self.stopLoss_Trade) self.priceMax = dictSets.get("最高价格", self.priceMax) self.priceCost = dictSets.get("成本价格", self.stockAvg) self.priceAvg_sell = dictSets.get("卖出均价", stockAvg_temp) self.priceNow = dictSets.get("当前价格", stockAvg_temp) self.profitMax_Stage = dictSets.get("阶段止盈", self.profitMax_Stage) self.profitMin_Stage = dictSets.get("阶段止损", self.profitMin_Stage) self.profitNow = dictSets.get("当前浮盈", self.profitNow) self.stopProfit_goon = dictSets.get("止盈状态", self.stopProfit_goon) self.stopLoss_goon = dictSets.get("止损状态", self.stopLoss_goon) self.date = dictSets.get("建仓日期", self.date).replace("'", "") if (self.date == ""): self.date = myData_Trans.Tran_ToDatetime_str( self.logDatetime, "%Y-%m-%d") #操盘记录数不一致,更新统计判断 if (self.sumOperates != len(self.logOperates)): self.Static_Profit(self.priceNow) return True
def _Trans_Value_Datetime(self, value): return myData_Trans.Tran_ToDatetime(value, "%Y-%m-%d %H:%M:%S")
def Static(self, startTime='', endTime='', nMonth=1, tradeParty='', usrBillType="", tradeTarget="", tradeType="", tradeTypeTarget=""): if (tradeType != ""): if (type(startTime) == str and startTime != ""): startTime = myData_Trans.Tran_ToDatetime(startTime, "%Y-%m-%d") if (type(endTime) == str and endTime != ""): endTime = myData_Trans.Tran_ToDatetime(endTime, "%Y-%m-%d") lstBill, startTime, endTime = self.Query(startTime, endTime, nMonth, tradeParty, usrBillType, tradeTarget, tradeType, tradeTypeTarget) else: #单独查询投资所有 startTime2 = startTime if (len(self.indLst) > 0): startTime2 = self._Trans_Time_year( self._Find(self.indLst[0]).tradeTime) lstBill2, startTime2, endTime2 = self.Query( startTime2, endTime, nMonth, tradeParty, usrBillType, tradeTarget, myTradeType.投资, tradeTypeTarget) lstBill, startTime, endTime = self.Query(startTime, endTime, nMonth, tradeParty, usrBillType, tradeTarget, tradeType, tradeTypeTarget, False, [], [myTradeType.投资]) lstBill = lstBill + lstBill2 #统计项目初始 lstCount = {} for x in myBileType: lstCount_Type = {} lstCount[x] = lstCount_Type for xx in myTradeType: lstCount_Type[xx] = {} #统计 dSum_收益 = 0 for x in lstBill: lstCount_Bill = lstCount[x.usrBillType] lstCount_Type = lstCount_Bill[x.tradeType] lstCount_TypeTarget = lstCount_Type.get(x.tradeTypeTarget, None) if (lstCount_TypeTarget == None): lstCount_TypeTarget = {} lstCount_Type[x.tradeTypeTarget] = lstCount_TypeTarget dSum = lstCount_TypeTarget.get(x.tradeTarget, 0) + x.tradeMoney #按名称累加 lstCount_TypeTarget[x.tradeTarget] = dSum #子类累加 lstCount_Type["SUM"] = lstCount_Type.get("SUM", 0) + x.tradeMoney #金额累加 lstCount_Bill["SUM"] = lstCount_Bill.get( "SUM", 0) + x.tradeMoney #金额累加-账单类型 lstCount_Type["SUM_Poundage"] = lstCount_Type.get( "SUM_Poundage", 0) + x.tradePoundage #金额累加-手续费 lstCount_Bill["SUM_Poundage"] = lstCount_Bill.get( "SUM_Poundage", 0) + x.tradePoundage #金额累加-手续费-账单类型 #投资卖出,需找到买入 if (x.usrBillType == myBileType.卖出 and x.tradeType == myTradeType.投资): lstCount_Type["SUM_Profit"] = lstCount_Type.get( "SUM_Profit", 0) + x.tradeProfit #收益累加 lstCount_Bill["SUM_Profit"] = lstCount_Bill.get( "SUM_Profit", 0) + x.tradeProfit #收益累加-账单类型 #查询买入源 if (x.tradeID_Relation != ""): bill = self._Find(int(x.tradeID_Relation)) if (bill != None): #lstCount_Bill["SUM_投资回笼"] = lstCount_Bill.get("SUM_投资回笼", 0) + x.tradeNum * bill.tradePrice #收益原始投资-账单类型 bExist = False for xx in lstBill: if (xx.tradeID == bill.tradeID): bExist = True break if (bExist == False): lstBill.append(bill) #转账 dSum_转入 = 0 dSum_转出 = 0 if (lstCount[myBileType.转账][myTradeType.投资].get("转入", None) != None): dSum_转入 = lstCount[myBileType.转账][myTradeType.投资]["转入"].get( "现金", 0) if (lstCount[myBileType.转账][myTradeType.投资].get("转出", None) != None): dSum_转出 = lstCount[myBileType.转账][myTradeType.投资]["转出"].get( "现金", 0) dSum_转帐 = dSum_转入 - dSum_转出 #累加(自下向上) dSum_In_投资总计 = 0 dSum_In_投资 = lstCount[myBileType.买入][myTradeType.投资].get("SUM", 0) dSum_Out_投资 = lstCount[myBileType.卖出][myTradeType.投资].get("SUM", 0) dSum_手续费 = lstCount[myBileType.买入].get( "SUM_Poundage", 0) + lstCount[myBileType.卖出].get( "SUM_Poundage", 0) dSum_分红 = lstCount[myBileType.分红].get("SUM", 0) dSum_收益 = lstCount[myBileType.卖出].get("SUM_Profit", 0) #已去除手续费 dSum_红包 = lstCount[myBileType.受赠][myTradeType.人际].get("SUM", 0) dSum_消费 = lstCount[myBileType.买入].get("SUM", 0) - dSum_In_投资 dSum_收入 = lstCount[myBileType.卖出].get("SUM", 0) - dSum_Out_投资 dSum_In = dSum_收入 + lstCount[myBileType.受赠].get("SUM", 0) + dSum_收益 dSum_Out = dSum_消费 + lstCount[myBileType.赠予].get("SUM", 0) dSum_ALL = dSum_In - dSum_Out + dSum_转帐 + dSum_分红 #输出信息 strPerfix = "\n" + " " * 4 strOut = "账单统计(" + self.usrID + "):" strOut += "\n" + "总资产:" + str(round(dSum_ALL, 2)) + "元" if (dSum_红包 > 0): strOut += strPerfix + "红包收入:" + str(round(dSum_红包, 2)) + "元" if (dSum_Out_投资 > 0): dSum_In_投资总计 = dSum_Out_投资 - dSum_In_投资 + dSum_收益 + dSum_分红 #加入分红的钱,收益股价未除权 strOut += strPerfix + "投资收益:" + str(round(dSum_收益, 2)) + "元" strOut += strPerfix + " " + "手续费:" + str(round(dSum_手续费, 2)) + "元" strOut += strPerfix + " " + "分红累计:" + str(round(dSum_分红, 2)) + "元" strOut += strPerfix + " " + "投资累计:" + str(round(dSum_In_投资, 2)) + "元" strOut += strPerfix + " " + "回笼累计:" + str( round(dSum_Out_投资 - myData.iif(dSum_收益 < 0, 0, dSum_收益), 2)) + "元" strOut += strPerfix + " " + "投资总计:" + str(round( dSum_In_投资总计, 0)) + "元" if (dSum_Out > 0): strOut += strPerfix + "消费总计:" + str(round(dSum_Out, 2)) + "元" #消费细分: lst消费 = lstCount[myBileType.买入] for x in lst消费.keys(): if (x == "投资" or x == "SUM"): continue dSum = lst消费[x].get("SUM", 0) if (dSum > 0): strOut += strPerfix + " " + x + ":" + str(round( dSum, 2)) + "元" #子类型细分 lst消费类型 = lst消费[x] for x in lst消费类型.keys(): if (x == "投资" or x == "SUM"): continue dSum_C = lst消费类型[x].get("SUM", 0) if (dSum_C > 0): strOut += strPerfix + " " * 2 + x + ":" + str( round(dSum_C, 2)) + "元" #特殊指定类型处理 if (usrBillType != "" and tradeType != ""): pLst = lstCount[usrBillType][tradeType] strOut += strPerfix + "总计:" + str(round(pLst['SUM'], 2)) + "元" strOut += strPerfix + " " + "手续费" + ":" + str( round(pLst['SUM_Poundage'], 2)) + "元" for x in pLst.keys(): if (x.count("SUM") == 1): continue #循环组装所有 keys = pLst[x].keys() for xx in keys: strOut += strPerfix + " " + x + xx + ":" + str( round(pLst[x][xx], 2)) + "元" else: if (dSum_转帐 > 0): strOut += strPerfix + "转账累计:" + str(round(dSum_转帐, 2)) + "元" strOut += strPerfix + " " + "手续费:" + str( round(lstCount[myBileType.转账]["SUM_Poundage"], 2)) + "元" strOut += strPerfix + " " + "转入累计:" + str(round(dSum_转入, 2)) + "元" strOut += strPerfix + " " + "转出累计:" + str(round(dSum_转出, 2)) + "元" strOut += strPerfix + " " + "净投资额:" + str(round(dSum_转帐, 2)) + "元" #当前账目余额 strOut += strPerfix + "现金总计:" + str( round(dSum_ALL - dSum_In_投资总计, 2)) + "元" if (usrBillType != ""): strOut += "\n账单类型:" + usrBillType if (tradeTarget != ""): strOut += "\n交易品名:" + tradeTarget if (tradeParty != ""): strOut += "\n交易方:" + tradeParty if (tradeType != ""): strOut += "\n交易品类:" + tradeType if (tradeTypeTarget != ""): strOut += "\n交易品子类:" + tradeTypeTarget strOut += "\n账单时间:" + strPerfix + myData_Trans.Tran_ToDatetime_str( startTime, "%Y-%m-%d") + " 至 " + myData_Trans.Tran_ToDatetime_str( endTime, "%Y-%m-%d") return strOut
#消息初始 pMMsg = gol._Get_Setting('manageMsgs') msg = pMMsg.OnCreatMsg() msg["usrName"] = "@*股票风控监测群" msg["msgType"] = "TEXT" msg["usrPlat"] = "wx" #循环 #dtTime = myData_Trans.Tran_ToDatetime("2019-10-23 09:30:00", "%Y-%m-%d %H:%M:%S") num = 1 while(True): #时间参数 #dtTime += datetime.timedelta(minutes=1) dtNow = myData_Trans.Tran_ToDatetime_str(None, "%Y-%m-%d %H:%M") dtStart = myData_Trans.Tran_ToDatetime(dtNow + ":00", "%Y-%m-%d %H:%M:%S") dtNext = myData_Trans.Tran_ToDatetime(dtNow + ":59", "%Y-%m-%d %H:%M:%S") #提取当前期权价格 sources_300033 = pSource.getPrice(security='300033.XSHE',frequency='1m',start_date=dtStart,end_date=dtNext) sources_3000 = pSource.getPrice(security='10001832.XSHG',frequency='1m',start_date=dtStart,end_date=dtNext) sources_3100 = pSource.getPrice(security='10002033.XSHG',frequency='1m',start_date=dtStart,end_date=dtNext) if(len(sources_3100) < 1): continue priceAvg_300033 = sources_300033['money'][0] / sources_300033['volume'][0] priceAvg_3000 = sources_3000['money'][0] / sources_3000['volume'][0] priceAvg_3100 = sources_3100['money'][0] / sources_3100['volume'][0] print(priceAvg_300033, priceAvg_3000, priceAvg_3100, "---", dtStart) #风险调用 bSave = myData.iif(num % 5 == 0, True, False)
def _Init_TradeDB(self, path): #提取字段信息 dtDB = myIO_xlsx.DtTable() dtDB.Load_csv(path, 5, 0, True, 4, ',', isUtf=False) lstFields = [ "交收日期", "合同号", "资金账号", "股东代码", "证券代码", "证券名称", "交易类别", "成交价格", "成交数量", "证券余额", "成交金额", "资金发生数", "资金余额", "费用合计", "净佣金", "规费", "印花税", "过户费", "经手费", "清算费", "前台费用", "交易规费", "证管费", "币种", "交易市场" ] if (dtDB.sheet == None): dtDB.dataField = lstFields lstFields_ind = dtDB.Get_Index_Fields(lstFields) #提取交易记录 pBills = self.billManager._Find("Stock_" + self.usrID, True) #装载账单记录 nInd = 0 for nTimes in range(0, 1): for dtRow in dtDB.dataMat: #解析有效数据内容 bill = myManager_Bill.myObj_Bill() bill.usrID = self.usrID bill.recorder = self.usrID bill.tradeParty = dtRow[lstFields_ind["交易市场"]] bill.tradeType = "投资" bill.tradeTypeTarget = "股票" bill.tradeTarget = dtRow[lstFields_ind["证券名称"]] bill.tradePrice = float(dtRow[lstFields_ind["成交价格"]]) bill.tradeNum = int(dtRow[lstFields_ind["成交数量"]]) bill.tradeMoney = float(dtRow[lstFields_ind["成交金额"]]) bill.tradePoundage = float(dtRow[lstFields_ind["费用合计"]]) bill.tradeTime = myData_Trans.Tran_ToDatetime( dtRow[lstFields_ind["交收日期"]], "%Y%m%d") + datetime.timedelta(seconds=nInd * 10) nInd = nInd + 1 #区分类型,部分类型屏蔽 strType = dtRow[lstFields_ind["交易类别"]] if (strType.count('买入') == 1 or strType.count('配售缴款')): bill.usrBillType = '买入' elif (strType.count('配股入帐') == 1): bill.usrBillType = '买入' bill.tradePrice = bill.tradeMoney / bill.tradeNum bill.tradePoundage = 0 elif (strType.count('卖出') == 1): bill.usrBillType = '卖出' elif (strType.count('银行转证券') == 1): bill.usrBillType = '转账' bill.tradeTypeTarget = "转入" bill.tradeTarget = "现金" bill.tradeParty = "券商" bill.tradeMoney = float(dtRow[lstFields_ind["资金发生数"]]) elif (strType.count('证券转银行') == 1): bill.usrBillType = '转账' bill.tradeTypeTarget = "转出" bill.tradeTarget = "现金" bill.tradeParty = "券商" bill.tradeMoney = abs(float(dtRow[lstFields_ind["资金发生数"]])) elif (strType.count('融券回购') == 1): bill.usrBillType = '买入' bill.tradeTypeTarget = "国债逆回购" elif (strType.count('融券购回') == 1): bill.usrBillType = '卖出' bill.tradeTypeTarget = "国债逆回购" bill.tradeMoney = float(dtRow[lstFields_ind["资金发生数"]]) elif (strType.count('利息归本') == 1 or strType.count('利息税代扣') == 1): bill.usrBillType = '分红' bill.tradeTypeTarget = "活期" bill.tradeTarget = "利息" bill.tradeParty = "券商" bill.tradeMoney = float(dtRow[lstFields_ind["资金发生数"]]) elif (strType.count('红利入账') == 1): bill.usrBillType = '分红' if (bill.tradeNum != 0): pass #价格变动。。 bill.tradeMoney = float(dtRow[lstFields_ind["资金发生数"]]) else: continue #部分特殊类型名称转换 if (bill.usrBillType == "卖出"): if (bill.tradeTarget.count("转债") == 1): bill.tradeTarget = bill.tradeTarget.replace("转债", "发债") if (bill.tradeTarget.count("发债") == 1): bill.tradeTypeTarget = "可转债" if (bill.tradeTarget.count("发债") == 1): bill.tradeTypeTarget = "可转债" #@@Test if (bill.usrBillType == "卖出" and bill.tradeTarget.count("五粮") == 1): aa = 1 #添加账单信息 strReturn = pBills._Add(bill) myDebug.Print(strReturn)
def _Trans_Value_Datetime(self, value): if (value.count(":") == 2): return myData_Trans.Tran_ToDatetime(value) return myData_Trans.Tran_ToDatetime(value, "%Y-%m-%d")
def initParam(self, param): errLst = [] self.modeState = -1 if (True): self.tag = param.get('tag', "") dictInfo_Leak = param.get("infoLeak") self.longitude_Leak = dictInfo_Leak.get('longitude', "") self.latitude_Leak = dictInfo_Leak.get('latitude', "") self.height_Leak = dictInfo_Leak.get('height_leak', "") self.massrate_Leak = dictInfo_Leak.get('massrate_leak', "") self.dtLeak = myData_Trans.Tran_ToDatetime( dictInfo_Leak.get('timestart_leak', "")) dictInfo_Chimney = dictInfo_Leak.get("chimney", '') self.hasChimney = dictInfo_Chimney != "" if (self.hasChimney): self.chimney_diameter = dictInfo_Chimney.get('diameter', "") self.chimney_temperature_outlet = dictInfo_Chimney.get( 'temperature_outlet', "") self.chimney_smoke_speed_outlet = dictInfo_Chimney.get( 'smoke_speed_outlet', "") self.chimney_wind_speed_outlet = dictInfo_Chimney.get( 'wind_speed_outlet', "") if (self.chimney_diameter == ""): errLst.append('diameter') if (self.chimney_temperature_outlet == ""): errLst.append('temperature_outlet') if (self.chimney_smoke_speed_outlet == ""): errLst.append('smoke_speed_outlet') if (self.longitude_Leak == ""): errLst.append('longitude') if (self.latitude_Leak == ""): errLst.append('latitude') if (self.height_Leak == ""): errLst.append('height_leak') if (self.massrate_Leak == ""): errLst.append('massrate_leak') self.infoTargets = [] dictInfo_Targets = param.get("infoTarget") for x in dictInfo_Targets: id_Target = x.get('id', "") longitude_Target = x.get('longitude', "") latitude_Target = x.get('latitude', "") height_Target = x.get('height', "") self.infoTargets.append([ id_Target, longitude_Target, latitude_Target, height_Target ]) if (id_Target == ""): errLst.append('id') if (longitude_Target == ""): errLst.append('longitude') if (latitude_Target == ""): errLst.append('latitude') if (height_Target == ""): errLst.append('height') dictInfo_Evn = param.get("infoEnvironment") wind_speed = dictInfo_Evn.get('wind_speed', "") wind_direction = dictInfo_Evn.get('wind_direction', "") wind_height = dictInfo_Evn.get('wind_height', "") air_Stability = dictInfo_Evn.get('air_stability', "") temperature = dictInfo_Evn.get('temperature', "") cloudy_is = dictInfo_Evn.get('cloudy_is', "") if (wind_speed == ""): errLst.append('wind_speed') if (wind_direction == ""): errLst.append('wind_direction') if (wind_height == ""): errLst.append('wind_height') if (temperature == ""): errLst.append('temperature') if (cloudy_is == ""): errLst.append('cloudy_is') #参数检查 if (len(errLst) > 0): return False #初始环境对象 self.wind.initWind(wind_direction, wind_speed, wind_height, self.dtLeak, -1) self.sun.initSun_Infos(self.longitude_Leak, self.latitude_Leak, self.dtLeak, myData.iif(cloudy_is, "多云", "")) self.air.initAir_Stability(air_Stability, self.wind.wind_Speed, self.sun.level_Radiation, temperature) #记录参数及标识状态 self.modelParam = param self.modeState = 0 return True
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 ""
# 循环剔除重复 dictDCC = {} lstRows = [] rows = pTable._Rows() for i in range(0, rows): # 忽略已处理用户 row = pTable[i] usrID = row[indFields['车架号']] if (dictDCC.get(usrID, None) != None): continue # 处理(循环所有,统计呼叫成功数、失败数) nTimes = 0 nSuccees = 0 dt_S = myData_Trans.Tran_ToDatetime("1999/9/9 00:00:00", "%Y/%m/%d %H:%M:%S") for j in range(i, rows): x = pTable[j] if (x[indFields['车架号']] != usrID): continue # 保留最近时间 dt = myData_Trans.Tran_ToDatetime(x[indFields['开单日期']], "%Y/%m/%d %H:%M:%S") if (dt_S < dt): dt_S = dt row = pTable[j] lstRows.append(row) dictDCC[usrID] = row dictDCC2 = {}