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)
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()
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)
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()
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)
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()
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()])
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'))
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()
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()
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'))
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()