示例#1
0
    def To_String(self, bID = True):
        #下属节点处理,区分节点
        Data = "{"
        if(self.IsNode):
            #print(len(self.List))
            nLen = len(self.List)
            for i in range(0, nLen):
                pField = self.List[i]
                strKey = myData.iif(bID, str(pField.ID), pField.Name_En)
                if(pField.IsNode):
                    #print(pField.Name) 
                    #print("Object")  
                    Data += "'" + strKey + "':" + pField.To_String(bID)
                else:  
                    Data += "'" + strKey + "':" + pField.Get_String_Value()

                if(nLen - 1 > i):
                    Data += ","
        else:
            #非节点直接处理   
            strKey = myData.iif(bID, str(self.ID), self.Name_En)     
            Data += "'" + strKey + "':" + self.Get_String_Value() 

        Data += "}"
        #ss = json.dumps(Data, sort_keys = False, indent = 4)
        #print(ss)
        return Data
示例#2
0
    def getTradeInfo(self, price, stopProfit=True, numSell=0):
        #股票信息
        self.setRisk.Static_Profit(price)  #更新股票操作统计信息
        prift = price / self.setRisk.stockAvg - 1  #涨幅
        priftMax = self.setRisk.priceMax / self.setRisk.stockAvg - 1  #最大涨幅

        self.stopProfit_Retreat = myData.iif(self.setRisk.stopProfit_Dynamic,
                                             self.setRisk.stopProfit_Retreat,
                                             1)
        self.stopLoss_Retreat = myData.iif(self.setRisk.stopLoss_Dynamic,
                                           self.setRisk.stopLoss_Retreat, 1)
        self.stopProfit_Trade = myData.iif(self.setRisk.stopProfit_Dynamic,
                                           self.setRisk.stopProfit_Trade, 1)
        self.stopLoss_Trade = myData.iif(self.setRisk.stopLoss_Dynamic,
                                         self.setRisk.stopLoss_Trade, 1)
        numTrade = myData.iif(stopProfit, self.stopProfit_Trade,
                              self.setRisk.stopLoss_Trade)

        if (numSell == 0):
            numSell = numTrade * self.setRisk.stockNum  #卖出数量
            if (numTrade > self.setRisk.stockPosition):  #低仓位修正
                numSell = self.setRisk.stockPosition * self.setRisk.stockNum
            numSell = int(Decimal(numSell) + Decimal(0.5))
        return {
            "prift": prift,
            "priftMax": priftMax,
            "numTrade": numTrade,
            "numSell": numSell
        }
示例#3
0
    def getPrice(self,
                 security,
                 start_date="",
                 end_date="",
                 frequency='daily',
                 fields=None,
                 skip_paused=True,
                 count=None):
        # 同步参数
        dateTime = myData_Trans.Tran_ToDatetime_str(None, "%Y-%m-%d")
        start_date = myData.iif(start_date == "", dateTime + " 09:00:00",
                                start_date)
        end_date = myData.iif(end_date == "", dateTime + " 13:00:00", end_date)

        # 查询数据
        host = "http://hq.sinajs.cn/list="
        url = host + security

        req = urllib.request.Request(url)
        res_data = urllib.request.urlopen(req)
        res = res_data.read().decode(encoding="gbk")

        values = res.split('=')
        stkid = values[0][11:]
        info = values[1][1:len(values[1]) - 4]
        vargs = info.split(',')

        # 区分股票与期权
        if (stkid.count('CON_OP') == 1):
            value = float(vargs[2])
        else:
            value = float(vargs[3])
        return value
    def newData_ByInfo(self, dataInfo, checkTime=True):
        #解析所有返回数据
        if len(dataInfo['values']) == 1:
            _values = dataInfo['values']
            _setInfo = dataInfo['setInfo']
            times = myData.iif(_setInfo.stockInfo.type == "opt", 10000, 1)

            qd = self.newData()
            qd.id = _setInfo.stockInfo.code_id
            qd.idTag = _setInfo.setTag
            qd.rawline = ""
            qd.name = _setInfo.stockInfo.code_name
            qd.openPrice = float(_values['open'][0] * times)
            qd.preClose = qd.openPrice
            qd.lastPrice = float(_values['close'][0] * times)
            qd.highPrice = float(_values['high'][0] * times)
            qd.lowPrice = float(_values['low'][0] * times)
            qd.tradeValume = float(_values['volume'][0])
            qd.tradeTurnover = float(_values['money'][0])
            qd.buyPrice = myData.iif(qd.tradeTurnover == 0, qd.preClose,
                                     qd.tradeTurnover / qd.tradeValume)
            qd.sellPrice = qd.buyPrice

            qd.buy1Volume = -1
            qd.buy1Price = -1
            qd.buy2Volume = -1
            qd.buy2Price = -1
            qd.buy3Volume = -1
            qd.buy3Price = -1
            qd.buy4Volume = -1
            qd.buy4Price = -1
            qd.buy5Volume = -1
            qd.buy5Price = -1
            qd.sell1Volume = -1
            qd.sell1Price = -1
            qd.sell2Volume = -1
            qd.sell2Price = -1
            qd.sell3Volume = -1
            qd.sell3Price = -1
            qd.sell4Volume = -1
            qd.sell4Price = -1
            qd.sell5Volume = -1
            qd.sell5Price = -1
            qd.date = dataInfo['time']
            qd.time = qd.date.split(' ')[1]
            qd.date = qd.date.split(' ')[0]

            #时间检查(是否当天)
            if (checkTime):
                if (qd.checkTime() == False):
                    return None

            #设置数据
            qd.value = qd.lastPrice
            return qd
        return None
示例#5
0
    def getContent(self, bAll = False):
        # 生成表结构
        lstTable = []
        lstField = []
        lstField2 = []
        lstTable.append(lstField)
        lstTable.append(lstField2)

        # 初始行列数据
        if(self.simpleField):
            for x in self.fields:
                lstField.append(x.nameFiled)
                lstField2.append(":---")        # 表字段结构
                
            # 循环填入所有数据
            for i in range(0, self.rows):
                lstValue = []
                lstTable.append(lstValue)
                for x in self.fields:
                    lstValue.append(x.values[i])
        else:
            for x in range(0, self.cols):
                lstField.append("")
                lstField2.append(myData.iif(self.indFields[x] == 1, ":-----", ":---"))
        
            # 初始行列数据
            for x in range(0, self.rows - 1):
                lstTable.append([""] * self.cols)

            # 循环填入所有数据
            for x in self.fields:
                indR = myData.iif(x.row > 0, x.row + 1, x.row)
                lstTable[indR][x.col] = x.nameFiled
                if(len(x.values) > 0):
                    lstTable[indR][x.col+1] = x.values[0]
                    for i in range(1, len(x.values)):
                        lstTable[indR + 1][x.col] = "^"
                        lstTable[indR + 1][x.col+1] = x.values[0]

        # 组装字符串
        strLines = ""
        indR = -1
        for row in lstTable: 
            indR += 1
            if(indR > 0): strLines += "\r\n"
            for i in range(0, self.cols):
                strLines += "| "
                if(not self.simpleField and self.indFields[i] == 1 and indR > 1 and row[i] != "^" and row[i] != ""):
                    strLines += "<b>"
                strLines += row[i] + " "
            strLines += "|"
        return strLines.strip() 
示例#6
0
    def OnHandleMsg(self, msg, plat = "", bCheck = False, nSleep = 0):
        if(msg == None): return
        strMsg = msg.get('msg')
        if(strMsg == '~__~'): 
            myDebug.Print("消息管理器::", typePlatform + ">> ", "心跳::" + strMsg)
            return
        
        #异步延迟消息处理
        if(nSleep > 0):
            self.OnHandleMsg_Check(msg, plat)
            msg["timeLimit"] = datetime.datetime.now() + datetime.timedelta(seconds=nSleep)
            self.usrMsgs_Buffer.append(msg)
            return 

        #消息内容校正
        if(bCheck):
            self.OnHandleMsg_Check(msg, plat)


        #文字输出
        typePlatform = myData.iif(plat == "", msg.get("usrPlat", myMsgPlat.wx), plat)
        if(self.usePrint):
            myDebug.Print("消息管理器::", typePlatform + ">> ",strMsg)

        #声音输出
        #if(self.useVoice):
        #    myVoice.Say_thrd(msg["text"])

        #在线消息输出
        if(typePlatform != ""):
            pWeb = self.usrWebs.get(typePlatform, None)     #提取对应平台的web对象
            if(pWeb != None):   
                #格式化接口输出
                wxPath = msg["usrName"] + "/" + strMsg + "/" + msg["msgType"]
                pWeb.Do_API_get(wxPath, typePlatform + "API-py")

            usrMQ = self.usrMQs.get(typePlatform, None)
            if(usrMQ != None):
                #特殊消息处理
                toUser = msg.get('to_usrName', "")
                if(toUser != ""):
                    toUser = myData.iif(toUser.lower() != "self", toUser, self.usrNameSelfs.get(typePlatform, toUser))
                    msg['usrID'] = ""
                    msg['usrName'] = toUser     #调整toUser
                    msg['usrNameNick'] = ""
                #转发消息
                usrMQ.Send_Msg(usrMQ.nameQueue, str(msg))
                if(self.usePrint):
                    myDebug.Print("消息管理器转发::", usrMQ.nameQueue + ">> ",strMsg)
示例#7
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]
        }
示例#8
0
 def _Title(self, usrInfo={}, bRegist=False, bRegistOut=False):
     if (self.isRunning):
         if (bRegist or bRegistOut):
             groupName = usrInfo.get('groupName', "")
             strReturn = myData.iif(groupName == "", "",
                                    "@" + usrInfo.get('usrName', "") + ":")
             if (bRegistOut == False):
                 strReturn += self.doTitle + "功能" + "--已注册\n\t" + self._Title_User_Opened(
                 ) + "(" + str(self.tStart) + ")"
             else:
                 strReturn += self.doTitle + "功能" + "--已注销\n\t" + self._Title_User_Opened(
                 ) + "(" + str(self.tStart) + ")"
         else:
             self.isRunning = False  #标识非运行
             self.isValid = True  #有效性恢复
             strReturn = self.doTitle + "功能" + "--已关闭\n\t" + self._Title_User_Closed(
             ) + "(" + str(self.tStart) + ")"
     else:
         self.Init()  #初始基础信息
         self.isRunning = True  #标识运行
         self.usrID = usrInfo.get('usrID', "")  #功能所属用户ID(启动者)
         self.usrName = usrInfo.get('usrName', "")  #功能所属用户名称(启动者)
         strReturn = self.doTitle + "功能" + "--已开启\n\t" + self._Title_User_Opened(
         ) + "(" + str(self.tStart) + ")"
     myDebug.Print(strReturn + "\n")
     return strReturn
示例#9
0
    def getCompanys(self,
                    param="",
                    isDel=False,
                    page=1,
                    per_page=10,
                    dataDB=None):
        # 组装查询条件
        strFilter = F"isDel=={str(isDel)}"
        if (param != ""):
            strFilter += F" && {param}"

        # 查询数据
        if (dataDB == None):
            dataDB = gol._Get_Value('dbCompany')
        dictData = dataDB.Query(strFilter, "", True)
        lstData = list(dictData.values())

        # 提取及返回
        numData = len(lstData)
        start = page * per_page - per_page
        end = page * per_page
        end = myData.iif(end < numData, end, numData)
        values = []
        if (numData > start):
            for x in range(start, end):
                values.append(lstData[x])
        return len(lstData), values
示例#10
0
    def _getDefault_Param(self):  #默认配置
        if (self.pSets != None):
            self.paramsSet = {}
            self.paramsList = []
            keys = self.pSets.setList.keys()
            lstParam = []
            for x in keys:
                pSet = self.pSets._Find(x)
                if (pSet != None and pSet.IsEnable()):
                    lstSets = self.paramsSet.get(pSet.stockInfo.source_set,
                                                 None)
                    if (lstSets == None):
                        self.paramsSet[pSet.stockInfo.source_set] = []
                        lstSets = self.paramsSet.get(pSet.stockInfo.source_set,
                                                     None)
                    lstSets.append(pSet)

                    #记录设置编号
                    if (pSet.stockInfo.source_set == self.type):
                        lstParam.append(
                            myData.iif(pSet.stockInfo.source_code == "",
                                       pSet.setTag,
                                       pSet.stockInfo.source_code))
            self.paramsList = lstParam
            strParams = myData_Trans.Tran_ToStr(lstParam).replace(".", '')
            return strParams
示例#11
0
    def OnHandleMsg(self, msg):
        if (msg == None): return None

        #必须有处理消息存在
        strMsg = msg.get('msg', "")
        if (strMsg != ""):
            #拆分'\n'取行最大
            lines = strMsg.split('\n')
            nLen = 0
            for x in lines:
                nLength = len(x)
                if (nLength > nLen): nLen = nLength
            # nMax = myData.iif(nLen > 15, 40, 32)
            nMax = myData.iif(nLen > 15, 32, 32)

            #尾部标签
            msgTag = msg.get('msgTag', "")
            strTag = "  --zxcRobot(" + msgTag + ")  " + myData_Trans.Tran_ToTime_str(
                None, '%H:%M:%S')
            strTag = strTag.replace("()", "")
            strTag = (nMax - len(strTag)) * " " + strTag
            msg["msg"] = strMsg + "\n" + strTag

            #消息管理器处理消息
            self.usrMMsg.OnHandleMsg(msg)
            return True
        return None
示例#12
0
 def toString(self):
     return self.name + '(' + myData.iif(self.idTag == "", self.id, self.idTag) + ')' \
         + ', openPrice=' + str(self.openPrice) \
         + ', preClose=' + str(self.preClose) \
         + ', lastPrice=' + str(self.lastPrice)  \
         + ', highPrice=' + str(self.highPrice)  \
         + ', lowPrice=' + str(self.lowPrice)  \
         + ', buyPrice=' + str(self.buyPrice)  \
         + ', sellPrice=' + str(self.sellPrice)  \
         + ', tradeValume=' + str(self.tradeValume)  \
         + ', buy1Volume=' + str(self.buy1Volume)  \
         + ', buy1Price=' + str(self.buy1Price) \
         + ', buy2Volume=' + str(self.buy2Volume) \
         + ', buy2Price=' + str(self.buy2Price) \
         + ', buy3Volume=' + str(self.buy3Volume) \
         + ', buy3Price=' + str(self.buy3Price) \
         + ', buy4Volume=' + str(self.buy4Volume) \
         + ', buy4Price=' + str(self.buy4Price) \
         + ', buy5Volume=' + str(self.buy5Volume) \
         + ', buy5Price=' + str(self.buy5Price) \
         + ', sell1Volume=' + str(self.sell1Volume)  \
         + ', sell1Price=' + str(self.sell1Price)  \
         + ', sell2Volume=' + str(self.sell2Volume)  \
         + ', sell2Price=' + str(self.sell2Price)  \
         + ', sell3Volume=' + str(self.sell3Volume)  \
         + ', sell3Price=' + str(self.sell3Price)  \
         + ', sell4Volume=' + str(self.sell4Volume)  \
         + ', sell4Price=' + str(self.sell4Price)  \
         + ', sell5Volume=' + str(self.sell5Volume)  \
         + ', sell5Price=' + str(self.sell5Price)  \
         + ', date=' + self.date  \
         + ', time=' + self.time  \
         + ', quotePlat=' + self.quotePlat  \
         + ', quoteTimeType=' + self.quoteTimeType 
示例#13
0
 def _Delete(self, id, tableName="", idField='ID'):
     # 调用删除数据
     idInfo = myData.iif(type(id) == str, f"'{ID}'", str(id))
     rs = self.execute(
         self._dbName,
         f"DELETE FROM {tableName} WHERE {idField} = {idInfo};")
     return not rs == None
示例#14
0
    def __init__(self,
                 tagTime,
                 data=Quote_Data(),
                 lastData_S=None,
                 interval_M=-1):
        self.tag = tagTime  #标识时间
        self.interval_M = interval_M  #分钟级间隔
        self.dataS_Last = lastData_S  #前一个统计对象
        self.values = {}  #值集(按时间key记录)

        #更新统计信息
        if (lastData_S != None):
            self.dataS = Quote_Data_Static(tagTime, lastData_S.dataS)  #当前统计值信息
        else:
            self.dataS = Quote_Data_Static(tagTime)  #当前统计值信息

        #其他初始
        self.dataS.Init(data.value)
        if (self.dataS_Last == None):
            datas = data.toValueList()
            self.dataS.base = data.priceBase  #基价,前一收盘
            self.dataS.start = data.priceOpen  #开盘价
            self.dataS.high = datas[2]  #最高价
            self.dataS.low = datas[3]  #最低价
            self.dataS.average = myData.iif(datas[6] == 0, 0,
                                            datas[7] / datas[6])
        self.setData(data)
示例#15
0
    def createIndex(self, tableName, indexType, indexName, fieldNames):
        # 查询 表索引是否存在
        nState = 0
        if (self.isExist_Index(tableName, indexName) == True):
            myDebug.Debug(f'表{tableName}索引{indexName}已存在.\n')
            return nState
        else:
            myDebug.Debug(f"开始创建表索引{indexName}......")
            try:
                indexType = indexType.strip().lower()
                if (indexType == 'unique'): indexType += " index"
                if (indexType == 'primary'):
                    indexType += " key"
                    indexName = ""

                rs = self.execute(
                    "",
                    f'ALTER TABLE {tableName} ADD {indexType} {indexName}({fieldNames});'
                )
                nState = myData.iif(rs == None, -1, 1)
            except Exception as e:
                myDebug.Debug(f'error:{e}')
                nState = -1
        myDebug.Debug(f'表{tableName}索引{indexName}创建完毕!\n')
        return nState
示例#16
0
    def _Query(self,
               fliter,
               tableName="",
               fields=[],
               orderField='',
               pageInd=1,
               perSize=0):
        # 组装查询返回字段
        infoFields = ""
        for x in fields:
            infoFields += ',' + x

        if (orderField != ""):
            orderField = F"ORDER BY {orderField} "

        orderLimit = ""
        if (perSize > 0):
            orderLimit = F"limit {(pageInd-1)*perSize}, {perSize}"

        # 调用查询数据
        # lstSymbol = ['==', '!=', '>=', '>', '<=', '<', '%like%']
        fliter = fliter.replace("==", "=")
        infoFields = myData.iif(len(infoFields) > 1, infoFields[1:], "*")
        rs = self.query(
            f"SELECT {infoFields} FROM {tableName} WHERE {fliter} {orderField} {orderLimit};"
        )
        return rs
示例#17
0
 def _Done(self, Text, isGroup=False, idGroup=""):
     #命令权限提升()
     #print(Text)
     bResult, pPrj = self.usrRoot.Add_Cmd(Text, isGroup, idGroup)
     strText = "功能(" + pPrj.prjName + ")权限提升" + myData.iif(
         bResult, "成功!", "失败!")
     return strText
示例#18
0
    def _Check_Connection(self):
        #TCP是否关闭或正在关闭,则重连
        isReConnect = False
        #if(self.usrConn.is_closed or self.usrConn.is_closing):
        if (self.usrConn.is_closed):
            self.Init()
            isReConnect = True

        #重建频道
        if (isReConnect or self.usrChannel.is_closed):
            usrType = myData.iif(self.isSender, "生产者", "消费者")
            myDebug.Print("消息队列MQ::",
                          usrType + ">> " + self.nameQueue + "已经掉线!")

            #在连接上创建一个频道
            #self.usrChannel = self.usrConn.channel()

            #声明一个队列,生产者和消费者都要声明一个相同的队列,用来防止万一某一方挂了,另一方能正常运行
            #self.usrChannel.queue_declare(queue=self.nameQueue)

            try:
                self.Init_Queue(self.nameQueue, self.isDurable, self.isAutoAck)
                time.sleep(2)
                myDebug.Print("消息队列MQ::",
                              usrType + ">> " + self.nameQueue + "已重连!")
            except Exception as ex:
                myDebug.Print("消息队列MQ::",
                              usrType + ">> " + self.nameQueue + "重连失败!")
                myError.Error(ex)
                pass
        self.isInited = self.usrConn.is_open  #标识是否在线
示例#19
0
    def callback_Consumer(self, ch, method, properties, body):
        #回调,通知处理消息
        if (self.callback_RecvMsg != None):
            try:
                strMsg = body.decode('utf-8')
                if (strMsg == self.strHeartbeat):
                    ch.basic_ack(delivery_tag=method.delivery_tag
                                 )  #接收到消息后会给rabbitmq发送一个确认
                    #myDebug.Print("消息队列MQ::", self.nameQueue + ">> ", "接受心跳::" + strMsg)
                    return

                #消息回调
                self.callback_RecvMsg(strMsg)
                ch.basic_ack(
                    delivery_tag=method.delivery_tag)  #接收到消息后会给rabbitmq发送一个确认
            except Exception as ex:
                usrType = myData.iif(self.isSender, "生产者", "消费者")
                myDebug.Print("消息队列MQ::",
                              usrType + ">> " + self.nameQueue + "连接中断!")
                myError.Error(ex)
            finally:
                #if(self.isAutoAck == False):
                #    #不论当前消息是否成功,都表示消息确实处理完了 手动确认 否则没有ack不再发送新消息 保证确实被处理了再确认
                #    ch.basic_ack(delivery_tag = method.delivery_tag)  #接收到消息后会给rabbitmq发送一个确认
                pass
示例#20
0
    def getTradeRisk(self, usrNmae, stockID, avg5 = True, avg10 = False, avg20 = False, end_date=None): 
        # 提取设置
        setDB = gol._Get_Value('zxcDB_StockTradeRisk')
        dictSet = self.getSet(usrNmae, stockID, False, setDB)
        if(dictSet == None): return None
        
        #获取均值
        nTimes = myData.iif(dictSet['标的名称'].count('50ETF') == 1, 10000, 1)
        stockSource = gol._Get_Value('quoteSource_API_JqData', None)
        avgs = [0, 0, -1, -1, -1, -1]
        if(avg5):
            avg5s = stockSource.getPrice_avg_day(stockID, 5, False, end_date)
            avgs[0] = avg5s['high'] * nTimes
            avgs[1] = avg5s['low'] * nTimes
        if(avg10):
            avg10s = stockSource.getPrice_avg_day(stockID, 10, False, end_date)
            avgs[2] = avg10s['high'] * nTimes
            avgs[3] = avg10s['low'] * nTimes
        if(avg20):
            avg20s = stockSource.getPrice_avg_day(stockID, 10, False, end_date)
            avgs[4] = avg20s['high'] * nTimes
            avgs[5] = avg20s['low'] * nTimes

        # 初始风险监测对象
        pSet = mySet_StockTradeRisk(dictSet)
        if(nTimes == 10000):    # 修正期权默认设置
            pSet.stopProfit = 0.10          #止盈线,默认为6%
            pSet.stopLoss = 0.06            #止损线,默认为-2%  
            pSet.stopProfit_Retreat = 0.03  #止盈回撤,默认为1%, 超过止盈线以上则为2倍
            pSet.stopLoss_Retreat = 0.02    #止损回撤,默认为1%
        pRisk = myMonitor_TradeRisk(avgs[0], avgs[1], avgs[2], avgs[3], avgs[4], avgs[5])
        pRisk.initSet(pSet, setDB)
        pRisk.saveSet()
        return pRisk
示例#21
0
    def Init(self,
             recorder,
             usrID,
             tradeParty,
             tradeMoney,
             tradeTarget,
             usrBillType="",
             tradeType="",
             tradeTypeTarget="",
             dateTime="",
             remark="",
             tradePrice=0,
             tradeNum=0,
             tradeID_Relation="",
             tradeProfit=0):
        self.usrID = usrID
        self.usrBillType = usrBillType
        self.tradeID_Relation = str(tradeID_Relation)
        self.tradeParty = tradeParty
        self.tradeNum = tradeNum
        self.tradePrice = tradePrice
        self.tradeMoney = tradeMoney
        self.tradeProfit = tradeMoney
        self.tradeTarget = tradeTarget
        self.tradeType = tradeType
        self.tradeTypeTarget = tradeTypeTarget
        self.tradeTime = dateTime
        self.remark = remark
        self.recorder = myData.iif(recorder == "", "zxcRobot", recorder)

        self.billInfo = self.OnCreat_BillInfo()
        self.Init_ByDict(self.billInfo)
示例#22
0
    def Static_Profit(self, strokPrice, bUpdata = True):  
        #累计买入、卖出
        sumStock_Buy = 0
        sumMoney_Buy = 0
        sumStock_Sell = 0
        sumMoney_Sell_fee = 0
        for x in self.logOperates:
            if(x["股数"] < 0):
                sumStock_Sell += x["股数"]
                sumMoney_Sell_fee += x["股价"] * x["股数"]      #计算含手续费
            else:
                sumStock_Buy += x["股数"]
                sumMoney_Buy += x["股价"] * x["股数"]           #计算含手续费

        #统计计算
        sumStock_Trade = sumStock_Buy + abs(sumStock_Sell)
        sumMoney_Sell = sumMoney_Sell_fee * (1 - self.stockFee)                     #卖出总金额(不含手续费)
        sumMoney = (sumStock_Buy + sumStock_Sell) * strokPrice - sumMoney_Sell      #当前市值(含卖出)
        sumStock = sumStock_Buy + sumStock_Sell
        profitNow = sumMoney / sumMoney_Buy - 1                                     #当前浮盈-阶段
        stockAvg_sell = 0
        if(sumStock_Sell != 0):
            stockAvg_sell = sumMoney_Sell_fee / sumStock_Sell                       #卖出均价
        stockCost = (sumMoney_Buy + sumMoney_Sell) / myData.iif(sumStock <= 0, sumStock_Buy, sumStock)

        #更新
        if(bUpdata == True):
            self.sumStock_Trade = sumStock_Trade            #更新交易数量-买卖
            self.priceCost = stockCost                      #更新成本价格
            self.priceNow = strokPrice                      #更新当前价格
            self.priceAvg_sell = stockAvg_sell              #更新卖出均价
            self.profitNow = profitNow                      #更新当前阶段浮盈
            if(self.profitMax < self.profitMax_Stage):
                self.profitMax = self.profitMax_Stage       #更新最大浮盈
        return profitNow, stockCost
示例#23
0
    def __init__(self,
                 tagName,
                 dirSwap,
                 stepSwaps=1,
                 delayedTime=0,
                 useAck=True,
                 nameSwap='zxcTest',
                 isSender=False,
                 dirSwap_out=""):
        self.tagName = tagName
        self.nameSwap = nameSwap
        self.dirSwap = dirSwap
        self.dirSwap_out = myData.iif(dirSwap_out == "", dirSwap, dirSwap_out)
        self.stepSwaps = stepSwaps
        self.isSender = isSender
        self.useAck = useAck
        self.dirSwap_back = dirSwap + "_back/" + tagName
        self.delayedTime = delayedTime

        self.dataOut = []
        self.ackDict = {}
        self.ackInfo = {
            "isAcked": False,
            "time": None,
            "retrys": 0,
            "path": ""
        }
        self.functionDict = {}
        self.funChange = None
示例#24
0
 def getTitleMark(self, price, isHit, isNewLimit, isBreakLimit = True, isStopProfit = True, numSell = 0):
     #提取股票交易建议信息
     tradeInfo = self.getTradeInfo(price) 
     numTrade = tradeInfo['numTrade'] 
     numSell = tradeInfo['numSell'] 
     
     #组装提示要素
     strPrice = str(Decimal(price).quantize(Decimal('0.00'))) + " 元"    #价格
     strSell = str(numSell) + "股"                                       #股数
     strRetreat = str(Decimal((self.stopProfit_Retreat * 100)).quantize(Decimal('0.0'))) + "%"       #回撤
     strTrade = str(Decimal((numTrade * 10)).quantize(Decimal('0.0'))) + "成"                        #仓位
     strProfit = str(Decimal((self.setRisk.profitNow * 100)).quantize(Decimal('0.00'))) + "%"        #当前收益
     strProfitNow = str(Decimal((self.profitNow * 100)).quantize(Decimal('0.0'))) + "%"              #当前浮盈
     strMax = str(Decimal((self.setRisk.profitMax * 100)).quantize(Decimal('0.00'))) + "%"           #最高浮盈
     strMaxStage = str(Decimal((self.setRisk.profitMax_Stage * 100)).quantize(Decimal('0.00'))) + "%"#阶段浮盈-前高
     
     #触发止盈止损
     strReutrn = F"{self.setRisk.stockName}: {strPrice}"
     if(isHit):
         if(isNewLimit == False):    #第一次触发
             if(isStopProfit):   
                 strReutrn += F", 浮盈超 {strProfitNow}, 触发止盈.\r\n操作策略: 启动动态止盈.\r\n策略收益: {strProfit}."
             else:
                 strReutrn += F", 浮亏超 {strProfitNow}, 触发止损.\r\n操作策略: 启动动态止损.\r\n策略收益: {strProfit}."
         else:                       #再一次触发                
             if(isStopProfit):  
                 strTag = myData.iif(isBreakLimit, "突破新高", "阶段新高")
                 strReutrn += F", 浮盈超 {strProfitNow}, {strTag}.\r\n操作策略: 动态止盈线上移.\r\n策略收益: {strProfit}, 涨幅前高 {strMaxStage}, 最高 {strMax}."
             else:
                 strTag = myData.iif(isBreakLimit, "突破新低", "阶段新低")
                 strReutrn += F", 浮亏超 {strProfitNow}, {strTag}.\r\n操作策略: 动态止损线上移.\r\n策略收益: {strProfit}, 涨幅前高 {strMaxStage}, 最高 {strMax}."
     else:
         if(isStopProfit):   
             if(self.setRisk.stopProfit_Dynamic == False):
                 strReutrn += F", 浮盈超 {strProfitNow}.\r\n操作策略: 建议止盈, 操作 全仓, 卖出 {strSell}.\r\n策略收益: {strProfit}, 涨幅前高 {strMaxStage}, 最高 {strMax}."
             else:
                 strReutrn += F", 回撤逾 {strRetreat}.\r\n操作策略: 建议止盈, 操作 {strTrade}仓, 卖出 {strSell}.\r\n策略收益: {strProfit}, 当前浮盈: {strProfitNow}, 涨幅前高 {strMaxStage}, 最高 {strMax}."
         else:
             if(self.setRisk.stopLoss_Dynamic == False):
                 strReutrn += F", 浮亏超 {strProfitNow}.\r\n操作策略: 建议止损, 操作 全仓, 卖出 {strSell}.\r\n策略收益: {strProfit}, 涨幅前高 {strMaxStage}, 最高 {strMax}."
             else:
                 strReutrn += F", 亏损逾 {strRetreat}.\r\n操作策略: 建议止损, 操作 {strTrade}仓, 卖出 {strSell}.\r\n策略收益: {strProfit}, 当前浮盈: {strProfitNow}, 涨幅前高 {strMaxStage}, 最高 {strMax}."
     myDebug.Debug(strReutrn.replace("\r\n", ""))
     
     #交易处置
     self.handleTrade(price, -numSell, False)
     return strReutrn
示例#25
0
    def updatID(self, nID=1):
        self.headID = myData.iif(nID < 1, 1, nID)

        # 修改子集
        ind = 1
        for x in self.Childs:
            x.updatID(ind)
            ind += 1
示例#26
0
    def upData_ID(self, nID = 1):
        self.titleID = myData.iif(nID < 1, 1, nID)

        # 修改子集
        ind = 1
        for x in self.Childs:
            x.upData_ID(ind)
            ind += 1
示例#27
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
示例#28
0
    def upload_company(companyID=""):
        form = myCompanyForm()  #生成form实例,给render_template渲染使用
        needRefresh = True
        editSucess = False
        if form.validate_on_submit(
        ):  #调用form实例里面的validate_on_submit()功能,验证数据是否安全,如是返回True,默认返回False
            if form.save.data:  # 保存按钮被单击
                # 组装row信息
                pValues = []
                if (True):
                    pValues.append("-1")
                    pValues.append(form.companyID.data)
                    pValues.append(form.companyName.data)
                    pValues.append(form.companyInStreet.data)
                    pValues.append(form.companyInVillage.data)
                    pValues.append(form.companyAdrr.data)
                    pValues.append(form.companyScale.data)
                    pValues.append(form.companyContacts.data)
                    pValues.append(form.companyPhone.data)

                    companyHasProcess = myData.iif(
                        form.companyHasProcess.data == "是", True, False)
                    pValues.append(companyHasProcess)
                    pValues.append(form.companyNumProcess.data)
                    pValues.append(form.companyRecycle.data)
                    pValues.append(form.companyVolumeTotal.data)

                    pValues.append(
                        myData_Trans.Tran_ToDatetime_str(
                            form.companyRedate.data))
                    pValues.append(form.companyRevolume.data)
                    pValues.append(form.companyTransferredvolume.data)
                    pValues.append(form.companyNoTransferredvolume.data)

                    pValues.append(form.imgName_1.data)
                    pValues.append(form.imgName_2.data)
                    pValues.append(form.imgName_3.data)
                    pValues.append(form.imgName_4.data)
                    pValues.append(form.imgName_5.data)
                    pValues.append(form.imgName_6.data)

                # 添加并保存信息
                rowInfo = myData_Trans.Tran_ToStr(pValues, ',')
                dbCompany = gol._Get_Value('dbCompany')
                if (dbCompany.Add_Row_BySimply(rowInfo, True, True) != ""):
                    editSucess = True
        else:
            # 保存时,验证失败,不需要刷新
            if form.save.data:
                needRefresh = False
        return render_template('company_active carbon.html',
                               title='company upload',
                               form=form,
                               companyID=companyID,
                               needRefresh=needRefresh,
                               editSucess=editSucess)
示例#29
0
 def Log_ByDict(self, msg, msgID, msgType, usrInfo):
     pMsgs = self._Find_Log_ByDict(usrInfo, True)
     if(pMsgs != None):
         if(msg == ""): return False
         nameSelf = usrInfo.get('usrNameSelf', "")
         usrName = myData.iif(nameSelf == "", usrInfo.get('usrName', ""), nameSelf)
         usrPlat = usrInfo.get('usrPlat', "")
         pMsg = myMsg(msg, msgID, msgType, usrName, usrPlat)
         pMsgs._Add(pMsg, True) 
     return True
示例#30
0
    def Save(self,
             strDir,
             fileName,
             row_start=0,
             col_start=0,
             cell_overwrite=True,
             sheet_name="",
             row_end=-1,
             col_end=-1,
             bSave_AsStr=True,
             styleSets=[]):
        #创建workbook和sheet对象
        pWorkbook = xlwt.Workbook()  #注意Workbook的开头W要大写
        pName = myData.iif(sheet_name == "", "sheet1", sheet_name)
        pSheet = pWorkbook.add_sheet(pName, cell_overwrite_ok=cell_overwrite)

        #循环向sheet页中写入数据
        nCols = self._Cloumns(col_end)
        nRows = self._Rows(row_end)
        if (nRows > 0):
            nCols = myData.iif(col_end < 0, len(self.dataMat[0]), col_end)

        # 写入字段
        for j in range(col_start, nCols):
            pSheet.write(row_start, j - col_start, self.dataField[j])

        # 写入值
        for i in range(row_start, nRows):
            pValues = self.dataMat[i]
            for j in range(col_start, nCols):
                strVaulue = self.Trans_Value_str(pValues[j], bSave_AsStr)
                pSheet.write(i - row_start + 1, j - col_start, strVaulue)

        #保存风格
        self.setStyles(pSheet, styleSets)

        #保存该excel文件,有同名文件时直接覆盖
        strPath = strDir + "/" + fileName + ".xls"
        strPath.replace("\/", "/")
        strPath.replace("//", "/")
        pWorkbook.save(strPath)
        return True