예제 #1
0
    def start(self, codes, time0, kt, shareDict):
        print("子进程启动:", self.cindex, codes, time.time() - time0)
        self.klineType = kt
        # 主力合约
        self.codes = codes
        self.mCodes = mCodes = [n + '88' for n in codes]

        # 查询获得配置 - 费率和每手单量
        self.Base = future_baseInfo()
        for doc in self.Base.getInfo(codes):
            self.baseInfo[doc["code"] + '88'] = doc

        cs0, cs1 = self.baseInfo[mCodes[0]], self.baseInfo[mCodes[1]]
        if cs0["nightEnd"] != cs1["nightEnd"]: return None

        # 计算tick 导致的滑点
        sh = [self.baseInfo[d + '88']['tick_size'] for d in codes]

        # 子进程共享类
        self.Rice = tick_csv_Rice()
        self.Train = train_future()
        self.Total = train_total()
        self.Total.tablename = self.total_tablename

        # 查询获得N分钟K线
        dfs_l = self.Rice.kline(mCodes,
                                period=self.klineType,
                                start=self.startDate,
                                end=self.endDate)
        # 获得1分钟K线作为滚动线
        dfs = self.Rice.kline(mCodes,
                              period='1m',
                              start=self.startDate,
                              end=self.endDate)

        # 按时间截取并调整
        dfs = self.dateAdjust(codes, dfs, sh)
        print('kline load:', mCodes, len(dfs[mCodes[0]]), len(dfs[mCodes[1]]))

        # 根据配置文件获取最佳交易手数对
        self.iniVolume = round(
            self.iniAmount / cs0["lastPrice"] / cs0["contract_multiplier"], 0)

        # 分参数执行
        results = []
        for period in self.periodList:
            for scale in self.scaleList:
                for ss in self.shiftScaleList:

                    self.shiftScale = ss
                    self.shift = [sh[i] * ss for i in range(len(sh))]

                    doc = self.total(dfs, dfs_l, scale=scale, period=period)
                    if doc is None or doc['amount'] == 0: continue
                    logger.info((doc['uid'], doc['income'], " time:",
                                 time.time() - time0))
                    results.append(doc)
                    # 结果写入共享阈
                #shareDict.append(doc)
        self.Total.insertAll(results)
예제 #2
0
    def listen(self, main):
        listener = Listener(self.address, authkey=self.authkey)
        Train = train_future()
        Total = train_total()
        Total.tablename = self.total_tablename
        Train.tablename = self.detail_tablename

        while True:
            conn = listener.accept()
            data = conn.recv()

            if 'end' in data and data['end']==1:
                print('------------end-------------')
                conn.close()
                break

            result=b'0'
            try:
                if data[0]==0:
                    Total.insertAll(data[1])
                else:
                    Train.insertAll(data[1])

                result = b'1'
                conn.send_bytes(result)
            except Exception as e:
                print(e)
                conn.send_bytes(result)

            finally:
                conn.close()
예제 #3
0
    def filterCodes(self):
        # 查询每周统计表
        Top = train_total()
        Top.tablename = self.topTableName
        self.future_Map = Top.last_top(num=self.topNumbers,
                                       maxsames=self.sameLimit,
                                       minRate=self.minRate)
        num0 = len(self.future_Map)

        Result = future_orderForm()

        # 添加top10
        codesList = [[c[0], c[1]] for c in self.future_Map]
        for map in Result.topCodes():
            if not map[0:2] in codesList:
                self.future_Map.append(map)
        num1 = len(self.future_Map) - num0

        # 添加未平仓,并不再开仓
        codesList = [[c[0], c[1]] for c in self.future_Map]
        for map in Result.currentOpenCodes(method=self.methodName):
            print(map)
            if not map[0:2] in codesList:
                self.future_Map.append(map)
                self.noneUsed.append(map[0:2])

        logger.info(
            ('总监控币对:', len(self.future_Map), ' 新列表:', num0, ' top10:', num1))
        logger.info(([n for n in self.future_Map]))
        logger.info(('暂停币对:', len(self.noneUsed), [n for n in self.noneUsed]))
예제 #4
0
    def start(self, codes, time0, kt, shareDict):
        print("子进程启动:", self.cindex, codes, time.time() - time0)

        self.klineType = kt
        # 主力合约
        self.codes = codes
        self.mCodes = mCodes = [n + '88' for n in codes]

        # 查询获得配置 - 费率和每手单量
        self.Base = future_baseInfo()
        for doc in self.Base.getInfo(codes):
            self.baseInfo[doc["code"] + '88'] = doc

        cs0 = self.baseInfo[mCodes[0]]

        # 计算tick 导致的滑点
        sh = [self.baseInfo[d + '88']['tick_size'] for d in codes]
        self.shift = [sh[i] * self.shiftScale for i in range(len(sh))]

        # 子进程共享类
        self.Rice = tick_csv_Rice()
        self.Rice.setTimeArea(cs0["nightEnd"])
        self.Train = train_future()
        self.Total = train_total()
        self.Total.tablename = self.total_tablename

        # 查询获得N分钟K线
        dfs_l = self.Rice.kline(mCodes,
                                period=self.klineType,
                                start=self.startDate,
                                end=self.endDate,
                                pre=60)
        # 获得1分钟K线作为滚动线
        dfs = self.Rice.kline(mCodes,
                              period='1m',
                              start=self.startDate,
                              end=self.endDate,
                              pre=0)

        # 按时间截取并调整
        # dfs= self.dateAdjust(codes, dfs, sh)
        print('kline load:', mCodes, len(dfs[mCodes[0]]))

        # 根据配置文件获取最佳交易手数对
        self.iniVolume = round(
            self.iniAmount / cs0["lastPrice"] / cs0["contract_multiplier"], 0)

        # 分参数执行
        results = []
        for period in self.periodList:
            docs = self.total(dfs, dfs_l, period=period)

            if docs is None or len(docs) == 0: continue
            logger.info(
                (self.codes, period, self.klineType, len(docs), " time:",
                 time.time() - time0))
            results.extend(docs)

            # 结果写入共享阈
        self.Total.insertAll(results)
예제 #5
0
    def start(self, codes, time0, kline=None, Base=None, Rice=None):
        print("子进程启动:", self.cindex, codes, kline)

        # 主力合约
        self.codes = codes
        self.code, self.mCode = codes[0], codes[0] + '88'

        self.mCodes = mCodes = [n + '88' for n in codes]
        # 查询获得配置 - 费率和每手单量

        self.Base = future_baseInfo()

        self.BS = {}

        for doc in self.Base.getInfo(codes):
            self.BS[doc["code"]] = self.BS[doc["code"] + '88'] = doc

        cs = [self.BS[m] for m in self.mCodes]
        self.klineType = self.BS[
            self.code]['quickkline'] if kline is None else kline

        # 子进程共享类
        self.Rice = Rice if Rice is not None else interface_Rice()
        self.Rice.setTimeArea(cs[0]["nightEnd"])

        self.Train = train_future()
        self.Total = train_total()
        self.Total.tablename = self.total_tablename
        self.Train.tablename = self.detail_tablename

        if len(self.indexCodeList) > 0:
            self.Rice.setIndexList(self.indexCodeList)

        self.adjustDates = self.Rice.getAdjustDate(self.code,
                                                   start=self.startDate)

        print(codes, self.adjustDates)

        # 查询获得N分钟K线
        dfs = self.Rice.kline(mCodes,
                              period=self.klineType,
                              start=self.startDate,
                              end=self.endDate,
                              pre=1)

        print('kline load:', mCodes, [len(dfs[m]) for m in mCodes])

        # 根据配置文件获取最佳交易手数对
        self.iniVolume = round(
            self.iniAmount / cs[0]["lastPrice"] / cs[0]["contract_multiplier"],
            0)
        if self.iniVolume == 0: self.iniVolume = 1

        # 分参数执行
        docs = self.total(dfs, period=self.periodwidth)
        if docs is None or len(docs) == 0: return

        logger.info((self.codes, self.klineType, len(docs), " time:",
                     time.time() - time0))
        self.Total.insertAll(docs)
예제 #6
0
 def empty(self):
     if self.isEmptyUse :
         Train = train_future()
         Total = train_total()
         Total.tablename = self.total_tablename
         Train.tablename = self.detail_tablename
         Train.empty()
         Total.empty()
 def top(self, mode=0):
     if mode == 0:
         Total = train_total()
         Total.tablename = self.total_tablename
         rs = Total.last_top(10, maxsames=10,  minRate = 0.02)
         return [l[0] for l in rs]
     elif mode==1:
         Base = future_baseInfo()
         return [ n[0] for n in  Base.all(vol=300)]
예제 #8
0
    def empty(self):
        if self.isEmptyUse:
            Train = train_future()
            Total = train_total()
            Total.tablename = self.total_tablename
            Train.tablename = self.detail_tablename
            Train.empty()
            Total.empty()

        if self.savePoint:
            TrainOrder = mon_trainOrder()
            TrainOrder.drop(self.stage)
            print("empty mongodb trainOrder", self.stage)
예제 #9
0
    def start(self, codes, klinePeriod, time0, shareDict):
        print("子进程启动:", codes, time.time()-time0)

        self.Rice = interface_Rice()
        self.Train = train_future()
        self.Train.tablename = self.detail_tablename
        self.codes = codes
        self.Base = future_baseInfo()
        self.Total = train_total()
        self.Total.tablename = self.total_tablename

        # 主力合约
        self.mCodes = mCodes = [n +'88' for n in codes]
        self.klinePeriod = klinePeriod

        # 查询获得分钟K线
        dfs = self.Rice.kline(mCodes, period= klinePeriod, start=self.startDate, end=self.endDate)
        print("kline load", self.mCodes)
        # 查询获得配置 - 费率和每手单量

        i= 0
        for doc in self.Base.getInfo(codes):
            self.baseInfo[doc["code"]+'88'] = doc
            self.shift = doc["tick_size"] * self.shiftRatio
            i+=1

        # 分参数执行
        res = []
        for period in self.periodList:
            for scale in self.scaleList:
                for deltaline in self.widthDeltaLineList:
                    self.widthDeltaLine = deltaline
                    doc = self.total(dfs[mCodes[0]], scale=scale, period=period)
                    if doc is None: continue
                    doc.update({
                        "code": codes[0],
                    #    "code1": codes[1],
                    })
                    logger.info((doc['uid'], doc['count'], doc['income'], " time:", time.time() - time0))
                    res.append(doc)
                # 结果写入共享阈
                #shareDict.append(doc)

        self.Total.insertAll(res)
예제 #10
0
    def filterCodes(self):
        # 查询每周统计表
        if self.topUse:
            Top = train_total()
            Top.tablename = self.topTableName
            self.future_Map = Top.last_top1(num=self.topNumbers,
                                            method=self.methodName,
                                            minVol=self.minVol,
                                            ban=self.banCodeList)
        else:
            Base = future_baseInfo()

            codes = Base.getUsedMap(hasIndex=len(self.indexCodeList) > 0)
            for code in codes:
                if not code in self.banCodeList:
                    uid = self.uidStyle % (code, self.methodName)
                    #  if code in ['IC']: print(uid)
                    self.future_Map.append(uid.split("_"))

        num0 = len(self.future_Map)
        Record = future_orderForm()
        if not self.isWorking: Record.tablename = self.orderFormTest

        # 添加未平仓,并不再开仓
        codesList = [c[0] for c in self.future_Map]
        # 当前开仓清单
        openCodes = Record.currentOpenCodes(method=self.methodName,
                                            batchNum=self.batchNum)
        if openCodes is not None:
            for map in openCodes:
                if not map[0] in codesList and not map[0] in self.banCodeList:
                    self.future_Map.append(map[:-3])
                    self.noneUsed.append(map[0])

        # 调仓处理
        dd = str(public.getTime(style='%H:%M:%S'))
        if "10:15:00" < dd < "11:00:00":
            self.alterPosition(Record, openCodes)

        logger.info(('总监控币对:', len(self.future_Map), ' 新列表:', num0, ' 未平仓:',
                     len(self.noneUsed)))
        logger.info(([n[0] for n in self.future_Map]))
        logger.info(('暂停币对:', len(self.noneUsed), [n for n in self.noneUsed]))
예제 #11
0
    def filterCodes(self):
        # 查询每周统计表
        Top = train_total()
        Top.tablename = self.topTableName
        self.future_Map = Top.last_top(num=self.topNumbers, filter=self.topFilter, maxsames=self.sameLimit,
                                       minRate=self.minRate)
        num0 = len(self.future_Map)
        Record = future_orderForm()
        if not self.isWorking:  Record.tablename = self.orderFormTest

        # 添加top10
        codesList = [[c[0], c[1]] for c in self.future_Map]
        for map in Record.topCodes(method=self.methodName, toptable=self.topTableName,batchNum=self.batchNum):
            if not map[0:2] in codesList:
                self.future_Map.append(map)

        num1 = len(self.future_Map) - num0

        # 添加未平仓,并不再开仓
        codesList = [[c[0], c[1]] for c in self.future_Map]
        for map in Record.currentOpenCodes(method=self.methodName, batchNum=self.batchNum):
            if not map[0:2] in codesList and map[0]:
                self.future_Map.append(map[:-1])
                self.noneUsed.append(map[0:2])

        # 开盘时调仓处理
        if self.isCTPUse and self.isAutoAlterPosition:
            codes = self.combinCode()
            try:
                CTP = interface_pyctp(use=True, userkey=self.ctpuser)
                state, orders = CTP.alterPosi(codes)
                if len(orders)- state >0:
                    logger.info(('自动调仓完成', len(orders)- state))
                    Record.insertAll(orders)
            except:
                pass

        logger.info(('总监控币对:', len(self.future_Map), ' 新列表:', num0, ' top10:', num1, ' 未平仓:', len(self.noneUsed)))
        logger.info(([n for n in self.future_Map]))
        logger.info(('暂停币对:', len(self.noneUsed), [n for n in self.noneUsed]))
예제 #12
0
    def start(self, codes, klinePeriod, time0, shareDict):
        print("子进程启动:", codes, time.time()-time0)

        self.Rice = interface_Rice()
        self.Train = train_future()
        self.Base = future_baseInfo()
        self.Total = train_total()
        self.Total.tablename = self.total_tablename
        self.Train.tablename = self.detail_tablename

        # 主力合约
        self.mCodes = codes
        self.klinePeriod = klinePeriod

        # 查询获得分钟K线
        dfs = self.Rice.kline(codes, period= klinePeriod, start=self.startDate, end=self.endDate)

        print("kline load", self.mCodes)
        # 查询获得配置 - 费率和每手单量
        self.shift = 0.001 * self.shiftRatio

        # 分参数执行
        res = []
        for period in self.periodList:
            for scale in self.scaleList:
                for deltaline in self.widthDeltaLineList:
                    self.widthDeltaLine = deltaline
                    doc = self.total(dfs[codes[0]], scale=scale, period=period)

                    if doc is None: continue
                    doc.update({
                        "code": codes[0],
                    #    "code1": codes[1],
                    })
                    logger.info((doc,  " time:", time.time()-time0))
                    res.append(doc)
                # 结果写入共享阈
                #shareDict.append(doc)

        self.Total.insertAll(res)
예제 #13
0
    def start(self, kline):
        # 主力合约
        self.codes = codes = self.Cat['shortList'] + self.Cat['longList']
        self.mCodes = mCodes = [n + '88' for n in self.codes]

        # 查询获得配置 - 费率和每手单量
        self.Base = future_baseInfo()

        self.BS = {}
        for doc in self.Base.getInfo(codes):
            self.BS[doc["code"]] = self.BS[doc["code"] + '88'] = doc

        cs = [self.BS[m] for m in self.mCodes]
        # 子进程共享类
        self.Rice = interface_Rice()
        self.Rice.setTimeArea(cs[0]["nightEnd"])

        self.Train = train_future()
        self.Total = train_total()
        self.Total.tablename = self.total_tablename
        self.Train.tablename = self.detail_tablename

        if len(self.indexCodeList) > 0:
            self.Rice.setIndexList(self.indexCodeList)

        self.klineType = kline
        # 查询获得N分钟K线
        print(self.startDate, self.endDate)

        dfs = self.Rice.kline(mCodes,
                              period=self.klineType,
                              start=self.startDate,
                              end=self.endDate,
                              pre=1)

        print('kline load:', mCodes, [len(dfs[m]) for m in mCodes])

        # 分参数执行
        self.total(dfs)
예제 #14
0
    def subInit(self, codes, time0, kline=None, Base=None, Rice=None):
        self.codes = codes
        self.Rice = Rice if Rice is not None else interface_Rice()
        # 查询获得配置 - 费率和每手单量
        self.Base = future_baseInfo() if Base is None else Base
        self.BS = {}

        for doc in self.Base.getInfo(codes):
            self.BS[doc["code"]] = doc

        cs = [self.BS[m] for m in codes]
        self.Rice.setTimeArea(cs[0]["nightEnd"])

        # 根据配置文件获取最佳交易手数对
        self.iniVolume = round(
            self.iniAmount / cs[0]["lastPrice"] / cs[0]["contract_multiplier"],
            0)
        if self.iniVolume == 0: self.iniVolume = 1

        #
        self.Train = train_future()
        self.Total = train_total()
        self.Total.tablename = self.total_tablename
        self.Train.tablename = self.detail_tablename
예제 #15
0
 def tops(self, num=10):
     Total = train_total()
     Total.tablename = "train_total"
     return [m[0:1] for m in Total.last_top(num=num)]
예제 #16
0
    def start(self, rs, time0, kline=None):
        """
            子进程入口
        """
        print("子进程启动:", self.cindex, rs, kline)

        self.Rice = interface_Rice()

        #####   子程序初始化

        self.codes = codes = [d['name'] for d in rs]
        if self.sourceListType == 1:
            self.mCodes = mCodes = [self.Rice.id_convert(d['code']) for d in rs]
            self.ctpCode = rs[0]['code']

        else:
            self.mCodes = mCodes = [d['code'] for d in rs]
            self.ctpCode = rs[0]['code']

        # 单一合约
        self.code, self.mCode = self.codes[0], self.mCodes[0]

        self.iniVolume = 0
        if 'startdate' in rs[0]:
            self.startDate = str(rs[0]['startdate'])[:10]
            self.endDate = str(rs[0]['enddate'])[:10]

        if 'iniVolume' in rs[0]:
            self.iniVolume = rs[0]['iniVolume']

        self.klineType = kline

        self.Train = train_future()
        self.Total = train_total()
        self.Total.tablename = self.total_tablename
        self.Train.tablename = self.detail_tablename

        self.Base = future_baseInfo()
        self.BS = {}
        # 查询获得配置 - 费率和每手单量
        for doc in self.Base.getInfo(codes):
            self.BS[doc["code"]] = self.BS[self.mCode] = doc

        cs = [self.BS[m] for m in self.mCodes]

        # 子进程共享类
        self.Rice.setTimeArea(cs[0]["nightEnd"])

        if len(self.indexCodeList) > 0:
            self.Rice.setIndexList(self.indexCodeList)

        """"
           -------------- 调用sub程序 -----------------

        """

        # 查询获得N分钟K线
        dfs = self.Rice.kline(mCodes, period=self.klineType, start=self.startDate, end=self.endDate, pre=1)
        print('kline load:', mCodes, self.startDate, self.endDate, [len(dfs[m]) for m in mCodes])

        # 分参数执行
        docs = self.total(dfs, period=self.periodwidth)
        if docs is None or len(docs) == 0: return

        logger.info((self.mCodes, self.klineType, docs[0]['count'], docs[0]['income'], ''" time:", time.time() - time0))
        self.Total.insertAll(docs)
        # 关闭连接
        self.Total.closecur()
예제 #17
0
 def tops(self, num=10):
     Total = train_total()
     Total.tablename = "train_total_0"
     return [m[0:2] for m in Total.last_top(num=num)], Total.exits()
예제 #18
0
    def start(self, rs, time0, kline=None, Base=None):
        """
            子进程入口
        """
        print("子进程启动:", self.cindex, rs, kline)

        self.Rice = interface_Rice()

        #####   子程序初始化

        self.codes = codes = [d['name'] for d in rs]
        if self.sourceListType == 1:
            self.mCodes = mCodes = [self.Rice.id_convert(d['code']) for d in rs]
            self.ctpCode = rs[0]['code']

        else:
            self.mCodes = mCodes = [d['code'] for d in rs]
            self.ctpCode = rs[0]['code']


        # 单一合约
        self.code, self.mCode = self.codes[0], self.mCodes[0]

        self.iniVolume = 0
        if 'startdate' in rs[0]:
            self.startDate = str(rs[0]['startdate'])[:10]
            self.endDate = str(rs[0]['enddate'])[:10]

        if 'iniVolume' in rs[0]:
            self.iniVolume = rs[0]['iniVolume']

        self.klineType = kline


        #Base = future_baseInfo()
        self.BS = {}

        print('1-----------------------')
        # 查询获得配置 - 费率和每手单量
        docs = Base.getInfo(codes)
        print('2-----------------------')
        for doc in docs:
            self.BS[self.code] = self.BS[self.mCode] = doc

        cs = [self.BS[m] for m in self.mCodes]

        # 子进程共享类
        self.Rice.setTimeArea(cs[0]["nightEnd"])

        print('3-----------------------')
        if len(self.indexCodeList) > 0:
            self.Rice.setIndexList(self.indexCodeList)

        """"
           -------------- 调用sub程序 -----------------

        """

        # 查询获得N分钟K线
        dfs = self.Rice.kline(mCodes, period=self.klineType, start=self.startDate, end=self.endDate, pre=1)
        print('kline load:', mCodes, self.startDate, self.endDate, [len(dfs[m]) for m in mCodes])
        print('4-----------------------')
        # 分参数执行
        docs = self.total(dfs, period=self.periodwidth)
        if docs is None or len(docs) == 0: return
        logger.info((self.mCodes, self.klineType, docs[0]['count'], docs[0]['income'], ''" time:", time.time() - time0))

        if docs is not None:
            if self.isPool:
                conn = Client(self.address, authkey=self.authkey)
                conn.send([0, docs])
                conn.close()

            else:
                Total = train_total()
                Total.tablename = self.total_tablename
                Total.insertAll(docs)
예제 #19
0
    def start(self, codes, time0, kt, shareDict):
        print("子进程启动:", self.cindex, codes, time.time() - time0)
        self.Base = future_baseInfo()
        self.klineType = kt
        self.codes = codes

        # 主力合约
        self.mCodes = mCodes = [n + '88' for n in codes]

        # 查询获得配置 - 费率和每手单量
        for doc in self.Base.getInfo(codes):
            self.baseInfo[doc["code"] + '88'] = doc

        cs0, cs1 = self.baseInfo[mCodes[0]], self.baseInfo[mCodes[1]]
        if cs0["nightEnd"] != cs1["nightEnd"]: return None

        shareDict.append(codes)

        # 子进程共享类
        self.Rice = interface_Rice()
        self.Train = train_future()
        self.Train.tablename = self.detail_tablename
        self.Total = train_total()
        self.Total.tablename = self.total_tablename

        # 查询获得分钟K线
        dfs = self.Rice.kline(mCodes,
                              period=self.klineType,
                              start=self.startDate,
                              end=self.endDate)

        print('kline load:', mCodes, len(dfs[mCodes[0]]), len(dfs[mCodes[1]]))

        # 计算tick 导致的滑点
        sh = [self.baseInfo[d + '88']['tick_size'] for d in codes]

        # 根据配置文件获取最佳交易手数对

        self.iniVolume = round(
            self.iniAmount / cs0["lastPrice"] / cs0["contract_multiplier"], 0)
        self.shift = [sh[i] * self.shiftScale for i in range(len(sh))]
        # 分参数执行
        results = []
        for period in self.periodList:
            for scale in self.scaleList:
                for conds in self.iterCond():
                    self.uid = self.uidKey % (
                        "_".join(self.codes), str(period), str(scale),
                        self.klineType.replace('m', ''), conds)
                    self.stopTimeDiff = self.stopTimeLine * period * int(
                        self.klineType[:-1])
                    doc = self.total(dfs[mCodes[0]],
                                     dfs[mCodes[1]],
                                     scale=scale,
                                     period=period)
                    if doc is None and doc['amount'] == 0: continue
                    logger.info(
                        (doc['uid'], doc['count'], doc['income'], " time:",
                         time.time() - time0))
                    results.append(doc)

        self.Total.insertAll(results)