예제 #1
0
    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
예제 #2
0
    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)  #索引用户信息
예제 #3
0
    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
예제 #4
0
 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
예제 #5
0
    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
예제 #6
0
    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)
예제 #7
0
    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...')
예제 #8
0
    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]
        }
예제 #9
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
예제 #10
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")
예제 #11
0
 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
예제 #12
0
    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
예제 #13
0
    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)  #索引用户信息
예제 #14
0
    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)
예제 #15
0
    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
예제 #16
0
    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
예제 #17
0
    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)
예제 #18
0
    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] 
예제 #19
0
    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
예제 #20
0
    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
예제 #21
0
    # 期权交易测试-实时模拟
    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]
예제 #22
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
예제 #23
0
 def _Trans_Value_Datetime(self, value):
     return myData_Trans.Tran_ToDatetime(value, "%Y-%m-%d %H:%M:%S")
예제 #24
0
    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
예제 #25
0
        #消息初始 
        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)
예제 #26
0
    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)
예제 #27
0
 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")
예제 #28
0
    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
예제 #29
0
    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 ""
예제 #30
0
    # 循环剔除重复
    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 = {}