예제 #1
0
    def start_5(self, codes, n):
        time0 = time.time()
        self.Rice = interface_Rice()
        self.Record = stock_orderForm()

        Base = stock_baseInfo()
        self.dict = Base.getDict(isBound=0)
        #l =  [str(c) for c in self.Rice.getValidDate1(start='1999-01-01', end=public.getDate())]
        #self.validDates= pd.Series(l,name='date')
        #print(self.validDates)

        dfs = self.Rice.get_financials(codes, years=20)
        for c in codes:
            if c not in dfs.keys(): continue
            self.uid = '%s_stock5' % (c)
            df = dfs[c]
            df = df.iloc[::-1]
            df.loc[:, 'code'] = c
            #df['code'] = c
            df['date'] = df['announce_date'].apply(lambda x: public.parseTime(
                str(x), format='%Y%m%d', style='%Y-%m-%d')
                                                   if not np.isnan(x) else '')

            df['powm'] = df['adjusted_return_on_equity_diluted'].apply(
                lambda x: 1 if x >= self.incomeRatioLine else 0)

            df['sum'] = ta.SUM(df['powm'], timeperiod=5)

            if self.keyCode == c:
                print(df)

            self.saveStage(df)

        print(n, 'finished time:', time.time() - time0)
예제 #2
0
    def pool(self, Func=None):
        pool = Pool(processes=5)
        #self.empty()
        Base = stock_baseInfo()
        lists = Base.getCodes(isBound=0)

        self.dict = Base.getDict(isBound=0)
        self.Rice = interface_Rice()

        df = []

        for k in range(0, len(lists), self.pageCount):
            codes = lists[k:k + self.pageCount]
            docs = self.start(codes, int(k / self.pageCount + 1))
            df += docs
            #break
            try:
                #pool.apply_async(self.start, (codes, int(k/self.pageCount+1)))
                pass
            except Exception as e:
                print(e)
                continue

        if len(docs) > 0:
            df0 = pd.DataFrame(docs, columns=self.columns)
            df0 = df0.sort_values(['code', 'date'], ascending=[True, False])
            file = self.Rice.basePath + 'stock_finacial_pre.csv'
            print('---------------------------- to_cvs', file, df0.columns)
            df0.to_csv(file, index=0)

        pool.close()
        pool.join()
예제 #3
0
    def subFilter(self, codes, k):
        Rice = interface_Rice()
        Base = stock_baseInfo()
        period = 180
        line = 0.35
        res = Rice.kline(codes,
                         period=self.period,
                         start=self.startDate,
                         end=self.endDate,
                         pre=90)

        codeList = []
        for code in codes:
            df = res[code]
            # 计算跌幅和回跌幅度
            close = df['close']
            mx = close[-period:].max()
            mi = close[-period:].min()
            miw = ta.MININDEX(close, timeperiod=period).values[-1]
            mid = close[miw:].max()

            # 超过M5
            ma5 = ta.MA(close, timeperiod=5)
            last = close.values[-1]

            opt1 = (mx - mi) / mx > line and (mid - mi) / (mx - mi) < 0.372
            opt2 = (last > ma5.values[-1] or last > ma5.values[-2])
            if opt1 and opt2:
                codeList.append(code)
                #print(code, (mx-mi)/mx, (mid-mi)/(mx-mi))

        print(k, len(codeList))
        Base.updateBound(codeList)
예제 #4
0
    def pool_5(self, Func=None):
        pool = Pool(processes=5)
        Base = stock_baseInfo()
        lists = Base.getCodes(isBound=0)
        Record = stock_orderForm()

        print('total', len(lists))
        if self.isEmptyUse:
            Record.empty()

        if Func is None:
            Func = self.start_5

        for k in range(0, len(lists), self.pageCount):
            codes = lists[k:k + self.pageCount]
            #if self.keyCode not in codes: continue
            #print(codes)
            #Func(codes, int(k/self.pageCount+1))
            #break
            try:
                pool.apply_async(Func, (codes, int(k / self.pageCount + 1)))
                pass
            except Exception as e:
                print(e)
                continue

        pool.close()
        pool.join()
예제 #5
0
    def control(self):
        Rice = interface_Rice()
        Rice.TimeArea = self.TimeArea
        Base = stock_baseInfo()
        #lists = Base.getCodes(isBound=1)
        #print(lists[0], len(lists))
        lists = self.csvList
        logger.info(('model_stock_pop scan list:', len(lists)))

        tt0 = int(time.time()) // 3
        while True:
            # 满足时间
            valid = Rice.isValidTime()
            tt, rr = int(time.time()) // 3 , int(time.time()) % 3

            if valid[0] and tt0 != tt and rr==0 :
               self.pool(lists)
               #print(time.time())
               tt0 = tt

            # 非交易日和收盘则结束
            elif not valid[1]:
                break

            time.sleep(self.timeInterval)
예제 #6
0
    def pool(self):
        pool = Pool(processes=5)
        # T+0历史记录
        T0 = stock_record_t0()
        lists = T0.getCodes()

        self.uniformEmpty()

        # base信息
        BI = stock_baseInfo()
        time0 = time.time()
        indList = []

        for code in lists:
            # 查询行业代码及所有成员股
            ind, codes = BI.getSameIndustry(code)
            # 检查行业是否存在
            if ind in indList: continue
            indList.append(ind)
            # 组合遍历
            print(ind, codes)
            #break
            # 遍历
            for kline in self.klineTypeList:
                #self.start(rs,  time0, kline)
                try:
                    pool.apply_async(self.start, (codes, code, time0, kline))
                    pass
                except Exception as e:
                    print(e)
                    continue

        pool.close()
        pool.join()
예제 #7
0
    def pool_filter(self):
        time0 = time.time()
        Base = stock_baseInfo()
        Base.iniBound()
        lists = Base.getCodes(isBound=0)
        pool = Pool(processes=4)
        for k in range(0, len(lists), self.pageCount):
            codes = lists[k:k + self.pageCount]
            self.subFilter(codes, k)
            #pool.apply_async(self.subFilter, (codes, k))

        pool.close()
        pool.join()

        # 添加持仓股票
        Base = stock_baseInfo()
        Record = stock_orderForm()
        pos = Record.getPosition(method=self.methodName, codes=None)
        Base.updateBound([pos[c]['code'] for c in pos.keys()])
예제 #8
0
    def int_stockBase(self):
        # 更新stockBase
        Base = stock_baseInfo()
        Base.empty()
        df = self.allCodes(type='CS')
        df['code'] = df['order_book_id'].apply(lambda x: x[:x.find('.')])
        s = self.index_compose('000980.XSHG')
        df['is50'] = df['order_book_id'].apply(lambda x: 1 if x in s else 0)
        df['isST'] = df['symbol'].apply(lambda x: 1
                                        if x.find('*ST') > -1 else 0)

        Base.insertAll(df.to_dict('records'))
예제 #9
0
    def pool_filter(self):
        #Rice = interface_Rice()
        #Rice.int_stockBase()
        Base = stock_baseInfo()
        Base.iniBound()

        lists = Base.getCodes(isBound=0)
        pool = Pool(processes=6)

        for k in range(0, len(lists), self.pageCount):
            codes = lists[k:k + self.pageCount]
            pool.apply_async(self.subFilter, (codes, k))

        pool.close()
        pool.join()
예제 #10
0
    def pool(self):
        pool = Pool(processes=6)
        self.empty()

        Base = stock_baseInfo()
        lists = Base.getCodes(isBound=0)

        for k in range(0, len(lists), self.pageCount):
            codes = lists[k:k+self.pageCount]
            #self.start(codes, int(k/self.pageCount+1))
            try:
                print(k)
                pool.apply_async(self.start, (codes, int(k/self.pageCount+1)))
                pass
            except Exception as e:
                print(e)
                continue

        pool.close()
        pool.join()
예제 #11
0
    def update_stockBase(self):
        # 更新stockBase
        Base = stock_baseInfo()
        Rice = interface_Rice()

        codes = Base.getAllCodes()
        #Base.empty()

        df0 = Rice.allCodes(type='CS')
        df = df0[~df0['order_book_id'].isin(codes)]
        #print(df)

        df['code'] = df['order_book_id'].apply(lambda x: x[:x.find('.')])
        s = Rice.index_compose('000980.XSHG')
        df['is50'] = df['order_book_id'].apply(lambda x: 1 if x in s else 0)
        df['isST'] = df['symbol'].apply(lambda x: 1
                                        if x.find('*ST') > -1 else 0)

        print(len(df))
        Base.insertAll(df.to_dict('records'))
예제 #12
0
    def subFilter(self, codes, k):
        print("stock filter subprocess start:", k / self.pageCount)
        Rice = interface_Rice()
        Base = stock_baseInfo()

        startDate = public.getDatetime(diff=-200)
        res = Rice.kline(codes, period=self.period, start=startDate, pre=90)

        period = 180
        line1 = 0.5
        codeList = []
        for code in codes:
            df = res[code]

            # 计算跌幅和回跌幅度
            close = df['close']
            mx0 = ta.MAX(close, timeperiod=60).values[-1]
            last = close.values[-1]

            opt0 = (mx0 - last) / mx0 > 0.2

            mx = close[-period:].max()
            mi = close[-period:].min()

            miw = ta.MININDEX(close, timeperiod=period).values[-1]
            mid = close[miw:].max()
            # 超过M5
            ma5 = ta.MA(close, timeperiod=5)

            opt1 = (mx - mi) / mx > line1 and (mid - mi) / (
                mx - mi) < 0.30 and (mx0 - last) / mx0 > 0.12
            opt2 = (last > ma5.values[-1] or last > ma5.values[-2])

            if (opt0) or (opt1 and opt2):
                codeList.append(code)

        print(k, len(codes), len(codeList))
        Base.updateBound(codeList)
        Base.closecur()