예제 #1
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)
예제 #2
0
    def start(self, codes, time0, kt):
        print("子进程启动:", self.cindex, codes, kt, time.time() - time0)

        self.klineType = kt
        # 主力合约
        self.codes = codes
        self.mCodes = mCodes = [n + '88' for n in codes]
        self.baseInfo = {}
        self.Rice = interface_Rice()

        # 查询获得配置 - 费率和每手单量
        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]]

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

        if kt[-1]=='m':
            self.startDate = public.getDate(diff=-200)

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

        doc = self.total(dfs, kt)
        if doc is not None :
             self.Total.insert(doc)
예제 #3
0
    def getDf(self, codes, period='1d'):
        Rice = interface_Rice()
        Rice.setIndexList(self.indexCodeList)
        Base = future_baseInfo()
        BI = BaseInfo([])
        if len(codes) == 0:
            codes = Base.getUsedMap(hasIndex=True)

        mCodes = Rice.getMain(codes)
        dfs = Rice.kline(mCodes,
                         period=period,
                         start=public.getDate(diff=-10),
                         pre=200)
        i = 0

        for mcode in mCodes:
            c = codes[i]
            last = BI.att(c, 'nightEnd')[0:6].replace(':', '')
            file = Rice.basePath + 'future_%s_%s_%s.csv' % (
                mcode, last, public.getDatetime(style='%Y%m%d_%H%M%S'))
            print(mcode, last)
            df = dfs[mcode]
            df['datetime'] = df.index

            df0 = df[df['datetime'] > '2019-01-17 13:47:40.000']
            print(df0.index, len(df0))

            #df.to_csv(file, index=0)
            i += 1
            break
예제 #4
0
    def seperate(self):
        Base = future_baseInfo()
        codes = Base.getUsedMap(hasIndex=True, isquick=True)
        dd = str(public.getTime(style='%H:%M:%S'))
        maps = {}
        # 按结束时间分组分进程
        for doc in Base.getInfo(codes):
            if doc['code'] in self.banCodeList: continue

            uid = self.uidStyle % (doc['code'], doc['quickkline'][:-1],
                                   self.methodName)
            self.future_Map.append(uid.split("_"))
            key = doc['nightEnd']
            if '03:00:00' < key < dd: continue

            if key not in maps.keys():
                maps[key] = []

            maps[key].append(doc['code'])

        for key in maps.keys():
            if len(maps[key]) < 10:
                yield maps[key]
            else:
                l, t = len(maps[key]), len(maps[key]) // 10
                for i in range(t):
                    s, e = i * 10, l if (i + 1) * 10 > l else (i + 1) * 10
                    yield maps[key][s:e]
예제 #5
0
    def Pool(self):
            time0 = time.time()
            pool = Pool(processes=5)
            self.empty()

            Base = future_baseInfo()
            # 交易量大的,按价格排序, 类型:turple,第二位为夜盘收盘时间
            lists = Base.all(vol=120)

            pool.apply_async(self.start, (codes, time0, kt))

            for rs in list(itertools.combinations(lists, 2)):
                # 检查时间匹配
                codes = [rs[0][0], rs[1][0]]
                #if 'SC' not in codes: continue

                for kt in self.klineTypeList:
                    #self.start(codes, time0, kt)
                    try:
                        pool.apply_async(self.start, (codes, time0, kt))
                        pass

                    except Exception as e:
                        print(e)
                        continue
                #break
            pool.close()
            pool.join()
예제 #6
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)
예제 #7
0
    def Pool(self):
        time0 = time.time()

        pool = Pool(processes=4)
        shareDict = Manager().list([])

        Base = future_baseInfo()
        # 交易量大的,按价格排序, 类型:turple,第二位为夜盘收盘时间
        lists = Base.all(vol=300)
        print(len(lists), lists)

        #for rs in list(itertools.combinations(lists, 1)):
        for rs in lists:
            # 检查时间匹配
            #if rs[0][1] != rs[1][1]: continue
            codes = [rs[0]]
            for kt in self.klineTypeList:
                #self.start(codes, time0, kt, shareDict)
                try:
                    pool.apply_async(self.start, (codes, time0, kt, shareDict))
                    pass
                except Exception as e:
                    print(e)
                    continue
        pool.close()
        pool.join()
예제 #8
0
    def Pool(self):
        time0 = time.time()

        pool = Pool(processes=4)
        shareDict = Manager().list([])
        self.empty()

        Base = future_baseInfo()
        # 交易量大的,按价格排序, 类型:turple,第二位为夜盘收盘时间
        lists = Base.all(vol=700)

        tops, exists = self.tops()

        for rs in list(itertools.combinations(lists, 2)):
            # 检查时间匹配
            if rs[0][1] != rs[1][1]:  continue
            codes = [rs[0][0], rs[1][0]]
            if self.topUse and codes not in tops:
                    continue

            if self.isKeeping and codes in exists:
                continue

            for kt in self.klineTypeList:
                #self.start(codes, time0, kt, shareDict)
                try:
                    pool.apply_async(self.start, (codes, time0, kt, shareDict))
                    pass
                except Exception as e:
                    print(e)
                    continue
        pool.close()
        pool.join()
예제 #9
0
    def Pool(self):
        time0 = time.time()

        pool = Pool(processes=self.processCount)
        shareDict = Manager().list([])

        Base = future_baseInfo()
        # 交易量大的,按价格排序, 类型:turple,第二位为夜盘收盘时间
        lists = Base.all(vol=280)
        tops = self.tops()
        # 清空数据库
        self.empty()

        for rs in lists:
            # 检查时间匹配
            codes = [rs[0]]
            if self.topUse and codes not in tops: continue
            print(rs)
            if codes[0] not in ['JM', 'SM', 'RB', 'AP', 'JD']: continue

            for kt in self.klineTypeList:
                #self.start(codes, time0, kt, shareDict)
                try:
                    pool.apply_async(self.start, (codes, time0, kt, shareDict))
                    pass
                except Exception as e:
                    print(e)
                    continue
        pool.close()
        pool.join()
예제 #10
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)
예제 #11
0
    def seperate(self):
        Base = future_baseInfo()
        maps, codes = {}, []
        dd = str(public.getTime(style='%H:%M:%S'))

        # 按结束时间分组分进程
        for doc in Base.getInfo(self.combinCode()):
            key = key0 = doc['nightEnd']
            if '03:00:00' < key0 < dd: continue
            if '08:30:00' < dd < '15:00:00':
                key = '15:00:00' if '09:00:00' < key0 < '15:30:00' else '23:30:00' if '15:30:00' < key0 < '23:35:00' else '02:30:00'
                pass

            if key not in maps.keys():
                maps[key] = []

            maps[key].append(doc['code'])

        pc = 11
        for key in maps.keys():
            if len(maps[key]) < pc + 1:
                yield maps[key]
            else:
                l, t = len(maps[key]), len(maps[key]) // pc
                for i in range(t + 1):
                    s, e = i * pc, l if (i + 1) * pc > l else (i + 1) * pc
                    if s < e:
                        yield maps[key][s:e]
예제 #12
0
    def Pool(self):
        time0 = time.time()
        # 清空数据库
        self.switch()

        pool = Pool(processes=self.processCount)
        #share = Manager2()
        Base = future_baseInfo()
        lists = Base.getUsedMap(hasIndex=False,
                                isquick=False) + ['PB', 'SN', 'CY']

        print(len(lists))

        for rs in lists:
            # 检查时间匹配
            #if not rs in self.csvList: continue

            codes = [rs]
            for kline in self.klineList:
                # try:
                self.start(codes, time0, kline)
                #pool.apply_async(self.start, (codes, time0, kline))

            # except Exception as e:
            #     print(e)
            #     continue

        pool.close()
        pool.join()
예제 #13
0
    def getList(self, type=0):
        """
            查询获取可交易的合约模式
        """
        lists = []
        if type == 0:
            # 主力合约模式
            Base = future_baseInfo()
            res = Base.getUsedMap(hasIndex=False, isquick=False) + ['PB', 'SN', 'CY']
            lists = [
                {'code': d[0] + '88',
                 'name': d[0],
                 'startdate': self.startDate,
                 'enddate': self.endDate,
                 } for d in res]

        elif type == 1:
            # 与SG完全对应合约模式
            Order = future_orderForm()
            Order.tablename = 'future_orderForm_sg'
            lists = Order.sg_codes()

        elif type == 2:
            # 非主力合约模式
            Order = future_code()
            lists = Order.getMap(start=self.startDate, end=self.endDate)

        return lists
예제 #14
0
 def getCtpCode(self, mCode):
     t = ''.join(re.findall(r'[0-9]', mCode))
     c = mCode.replace(t, '')
     Base = future_baseInfo()
     doc = Base.getInfo([c])[0]
     ctp = doc['ctp_symbol'].split("_")
     sym = ctp[0] + t[-int(ctp[1]):]
     return sym
예제 #15
0
 def Pool(self):
     time0 = time.time()
     # 清空数据库
     self.empty()
     self.Base = future_baseInfo()
     self.Cat = self.category()
     for kline in self.klineList:
         self.start(kline)
     pass
 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)]
예제 #17
0
    def stage_jump(self):
        Base = future_baseInfo()
        # 交易量大的,按价格排序, 类型:turple,第二位为夜盘收盘时间
        Rice = interface_Rice()
        codes = [l[0] for l in Base.all(vol=100)]
        mCodes = Rice.getMain(codes)

        docs, res, doc = [], [], {}
        period = '5'

        for i in range(len(codes)):
            klines = Rice.kline([mCodes[i]],
                                period='%sm' % period,
                                start=public.getDate(diff=-10))

            df = klines[mCodes[i]].dropna().reindex()
            print('width15: ', i, codes[i], mCodes[i], len(df))

            if len(df) > 0:
                # 计算跳空幅度和跳空前趋势
                df['date'] = df.index
                df['time'] = df['date'].apply(lambda x: str(x)[11:].strip())
                sum, c = 0, 0

                for j in range(1, len(df)):

                    if df.ix[j, 'time'] in ['09:05:00', '21:05:00']:
                        s0, e0, s1, e1 = df.ix[j - 1, 'open'], df.ix[
                            j - 1, 'close'], df.ix[j, 'open'], df.ix[j,
                                                                     'close']
                        income = np.sign(e0 - s0) * (s1 - e0)

                        if income != 0:
                            docs.append({
                                'date': df.ix[i, 'date'],
                                'open': s0,
                                'close': e0,
                                'open1': s1,
                                'income': income
                            })
                            sum += income
                            c += 1

                #break
                res.append({
                    'code': codes[i],
                    'sum': sum,
                    'rate': sum / df['close'].mean(),
                    'count': c
                })
                print(codes[i], sum, sum / df['close'].mean(), c)

        df0 = pd.DataFrame(docs)
        df0.to_csv(self.Rice.basePath + 'stage_jump_detail_%s.csv' % period)
        pd.DataFrame(res).to_csv(self.Rice.basePath +
                                 'stage_jump_total_%s.csv' % period)
예제 #18
0
    def tickList(self, long = 8):
        Base = future_baseInfo()
        l = []
        files = os.listdir(self.basePath)
        ticks = [file[0:-8] for file in files]

        for c in Base.all(vol=400):
            if c in ticks:
                l.append(c)
        return l
예제 #19
0
파일: data_future.py 프로젝트: dxcv/stock-1
    def his(self):
        self.Rice = Rice = interface_Rice()
        Base = future_baseInfo()
        bCode = future_code()
        bCode.empty()

        years = [str(y)[-2:] for y in range(2010, 2021)]
        months = [('0' if m < 10 else '') + str(m) for m in range(1, 13)]
        lists = Base.getUsedMap(hasIndex=True)

        for c in lists:
            docs = []
            mains = Rice.getAllMain(c, start='2010-01-01')
            mainMap = {}

            # 主力合约日期清单
            for ma in mains:
                mainMap[ma[1]] = str(ma[0])
            # 第一个主力合约的初始交易量
            mVol = self.getVol(mains[0][1], str(mains[0][0]))

            # 循环查询合约交易
            for y in years:
                for m in months:
                    mcode = '%s%s%s' % (c, y, m)
                    obj = Rice.detail(mcode)
                    if obj is not None:
                        doc = obj.__dict__
                        mC = doc['order_book_id']
                        doc.update({
                            'code': mC,
                            'name': doc['underlying_symbol'],
                        })

                        d, de, v = self.getUsedVol(mC,
                                                   start=doc['listed_date'],
                                                   end=doc['de_listed_date'],
                                                   mVol=mVol)
                        if d is not None:
                            doc['used_date'], doc['de_used_date'], doc[
                                'used_volume'] = d, de, v

                        if mC in mainMap:
                            doc['main_date'] = mainMap[mC]
                            doc['used_volume'] = mVol = self.getVol(
                                mC, mainMap[mC])

                        docs.append(doc)

            print(doc['name'], len(docs))
            time.sleep(0.2)
            bCode.insertAll(docs)
예제 #20
0
    def getMainMap(self):
        #  查询获得code活动代码及映射表
        lists = future_baseInfo().getUsedMap(hasIndex=False) + ['PB', 'SN']
        self.mCodes = self.getMain(lists)
        i, cmap = 0, {}
        for m in self.mCodes:
            cmap[lists[i]] = m
            i += 1

        df = self.allCodes('Future')
        df = df[df['underlying_symbol'].isin(lists)
                & (df['listed_date'] != '0000-00-00')]
        df['mcode'] = df['underlying_symbol'].apply(lambda x: cmap[x])
        return df
예제 #21
0
    def pool(self, func=None):
        print(1222)
        self.Rice = Rice = interface_Rice()
        self.Rice.setIndexList(self.indexCodeList)
        self.Base = Base = future_baseInfo()
        self.Tick = mon_tick()

        codes = Base.getUsedMap(hasIndex=True)
        BI = BaseInfo(codes)
        mCodes = Rice.getMain(codes)
        period = 14
        self.count = count = 300
        self.preDict = {}
        self.exKtype = self.getKtype()
        self.renewQuicktype()

        self.klines = self.quickPeriodList + self.periodList

        docs, ex, trends = [], [], []
        for mcode in mCodes:
            print(mcode)
            code = BI.parseCode(mcode)
            nt = BI.att(code, 'nightEnd')
            Rice.setTimeArea(BI.att(code, 'nightEnd'))

            doc, base = {"code": code}, 1
            for ktype in self.klines:
                start = self.getStart(nt, ktype)
                df0 = Rice.kline([mcode], period=ktype, start=start,
                                 pre=0)[mcode]

                if func is not None:
                    res = func(df0, period)
                    if isinstance(res, dict):
                        doc.update({'kline': res})
                    else:
                        doc.update({
                            'k_' + ktype: res,
                            'r_' + ktype: res / base
                        })

                    if ktype == self.quickPeriodList[0]:
                        doc.update({'r_' + ktype: 1})
                        base = res

            docs.append(doc)

        if len(docs) > 0:
            #columns = [ ('k_'+ k, 'r_'+ k) for k in (self.klines)]
            self.saveCsv(docs, 'atrCompare_%s_.csv')
예제 #22
0
    def baseUpdate(self):
        df = rq.all_instruments(type='Future', date=public.getDate())
        u = df["underlying_symbol"].unique()

        FT = future_baseInfo()
        # 已有code及结束时间
        exists = FT.exists()
        exCodes = [c[0] for c in exists]
        endMap = {}
        for c in exists:
            endMap[c[0]] = c[1]

        docs = []
        mu = self.getMain(u)
        i = 0

        for d in u:
            n = df[df["underlying_symbol"] ==
                   d].loc[:, FT.keylist[2:]].values[-1].tolist()
            doc = FT.set([d, 0] + n)

            detais = rq.instruments(mu[i])
            # tick_size
            doc["tick_size"] = detais.tick_size()
            doc['contract_multiplier'] = detais.contract_multiplier
            doc['margin_rate'] = detais.margin_rate

            # 结束时间
            hh = detais.trading_hours.split(',')
            hs = hh[0].split('-')
            if hs[0][0:2] != '09':
                doc["nightEnd"] = hs[1]
            else:
                doc["nightEnd"] = hh[-1].split('-')[1]

            if d not in exCodes:
                doc['product'] = 'Commodity'
                docs.append(doc)
            else:
                # 更新结束时间
                if doc["nightEnd"] != endMap[d][0:len(doc["nightEnd"])]:
                    print(d, endMap[d][0:len(doc["nightEnd"])],
                          doc["nightEnd"])

                FT.setMulti(doc)
            i += 1

        if len(docs) > 0:
            FT.insertAll(docs)
            logger.info(('future base update finished, ', docs))
예제 #23
0
    def start(self, full_codes, shareDict):
        # 每个进程单独初始化对象
        self.Record = future_orderForm()
        self.Rice = interface_Rice()
        self.Base = future_baseInfo()
        #self.CTP = interface_pyctp()

        self.shareDict = shareDict
        self.full_codes = full_codes

        # 子进程中共享变量
        self.isOpen, self.batchId, self.preNode, self.isStop = {}, {}, {}, {}

        # 配置文件
        for doc in self.Base.getInfo(full_codes):
            self.config[doc["code"]] = doc

        # 设置交易对的收盘时间
        self.Rice.setTimeArea(doc["nightEnd"])

        # 查询主力代码,并存入字典
        full_mCodes = self.Rice.getMain(full_codes)
        self.mCodeMap = {}
        for i in range(len(full_codes)):
            self.mCodeMap[full_codes[i]] = full_mCodes[i]

        # 初始化订单状态和batchID
        self.kTypeMap = {}
        openMap = self.Record.getOpenMap(self.methodName, full_codes)

        for map in self.future_Map:
            if map[0] not in full_codes or map[1] not in full_codes: continue
            self.iniNode(map, openMap)

            # 按k线时间框类型初始化 kTypeMap dict,
            ktype = int(map[4])

            if not ktype in self.kTypeMap.keys():
                self.kTypeMap[ktype] = []

            for i in [0, 1]:
                if not self.mCodeMap[map[i]] in self.kTypeMap[ktype]:
                    self.kTypeMap[ktype].append(self.mCodeMap[map[i]])

        # 子进程启动
        logger.info(("model_future_detect start: %s " % ",".join(full_mCodes),
                     self.Rice.TimeArea))
        self.Rice.startTick(full_mCodes, callback=self.onTick)
예제 #24
0
    def seperate(self):
        Base = future_baseInfo()
        maps, codes = {}, []
        dd = str(public.getTime(style='%H:%M:%S'))
        # 按结束时间分组分进程
        for doc in Base.getInfo(self.combinCode()):
            key = doc['nightEnd']
            #
            if '03:00:00' < key < dd: continue

            if key not in maps.keys():
                maps[key] = []
            maps[key].append(doc['code'])

        for key in maps.keys():
            yield maps[key]
예제 #25
0
    def config(self):
        # baseConfig信息
        Base = future_baseInfo()
        tmp = []
        for doc in Base.getInfo(self.Instruments):
            self.InstrumentMap[doc['code']] = doc
            tmp.append(doc['code'])

        # 空所有
        if len(self.Instruments) == 0:
            self.Instruments = tmp

        # 根据code返回主力code,同时生成ctp-code map
        for m in self.Rice.getMain(self.Instruments):
            c = self.parseCode(m)
            self.InstrumentMap[c]['mCode'] = m
            self.InstrumentMap[c]['ctp'] = self.parseCtpCode(m)
예제 #26
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)
예제 #27
0
def order(code):
    Rice = interface_Rice()
    codes = [code]
    Base = future_baseInfo()
    config = [doc for doc in Base.getInfo(codes)][0]

    mcodes = Rice.getMain(codes)
    k = Rice.kline(mcodes)

    # print(k)
    doc = {
        "code": mcodes[0],
        "price": k[mcodes[0]]["close"].values[-1],
        "vol": 1,
        "mode": 1,
        "isopen": 1,
        "exchange": config["exchange"]
    }
    return doc
예제 #28
0
    def start(self, codes, share):
        print("子进程:", codes)
        self.time0 = time0 = time.time()
        self.Base = future_baseInfo()
        self.Rice = tick_csv_Rice()
        self.Rice.shareDict = share

        self.Rice.basePath = self.basePath
        self.Rice.cvs_start = self.cvs_start
        self.Rice.cvs_end = self.cvs_end
        self.Rice.dd = self.dd

        self.new_docs = []
        self.codes = codes
        self.baseInfo = {}
        self.filePath = self.basePath + "%s.csv" % "_".join(codes)

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

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

        # 设置结束时间,用于数据清洗
        try:
            res = self.Rice.curKlineByCsv(codes, period=1, callback=self.new_tick)

        except Exception as e:
            print('error', codes, len(self.new_docs), e )
            res = True

        if res and len(self.new_docs) > 0 :
            # 保存文件
            df = pd.DataFrame(self.new_docs)
            # 数据整理
            df = self.detail(df)

            print(public.getDatetime(), " 已保存", codes, "耗时:", time.time()-time0)

            df.to_csv(self.filePath, columns=self.columns1, index=0)
            self.new_docs= []
            return True
예제 #29
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]))
예제 #30
0
    def seperate(self):
        Base = future_baseInfo()
        maps, codes = {}, []

        # 合并元素
        for n in self.future_Map:
            for i in [0, 1]:
                if not n[i] in codes:
                    codes.append(n[i])

        # 按结束时间分组分进程
        for doc in Base.getInfo(codes):
            key = doc['nightEnd']
            if key not in maps.keys():
                maps[key] = []
            maps[key].append(doc['code'])

        for key in maps.keys():
            yield maps[key]