def calc_user_stock_cover_index(): """ 统计更新用户的持仓,计算持仓跟各大指数的重合度 Parameters ------ Return ------- result 是否正常结束 """ try: # 用户持仓个股增加股票名称 param = {'list_status': 'L', 'exchange': '', 'fields': 'symbol,name'} hs_df = basic.get_hs_stock_list(param) globalStock = {} for index, row in hs_df.iterrows(): globalStock[row['symbol']] = row['name'] _array = dal.queryMany(None, { '_id': 1, 'samples': 1 }, 0, None, 'indexSample') array = list(_array) if len(array) == 0: return None _opt_stock_array = dal.queryMany(None, { '_id': 1, 'stock': 1 }, 0, None, 'optStock') opt_stock_array = list(_opt_stock_array) if len(opt_stock_array) == 0: return None for opt_stock in opt_stock_array: user_id = opt_stock['_id'] user_stock = opt_stock['stock'] user_quant = {} user_quant['user'] = user_id for index_sample in array: index_name = index_sample['_id'] user_quant['index'] = index_name user_quant['_id'] = f'{user_id}_{index_name}' calc_opt_stock_in_index_sample(user_stock, index_sample['samples'], user_quant, globalStock) dal.updateOne({'_id': user_quant['_id']}, 'optQuant', user_quant, True) logger.info(user_quant) except Exception as exp: logger.error(exp) return None return None
def calc_ma(code: str, diff_days: int): """ 更新转债diff_days天内MA Parameters ------ diff_days: 计算x天前的MA数据 Return ------- result 是否正常结束 """ try: _array = dal.queryMany({'code': code}, { 'close': 1, '_id': 0 }, diff_days, [('date', -1)], 'hisprice') array = list(_array) if len(array) == 0: return None narray = np.array([]) for price in array: narray = np.append(narray, price['close']) ma = talib.MA(narray, timeperiod=diff_days, matype=0) if np.isnan(ma[-1]): return None else: return ma[-1] except Exception as exp: logger.error(exp) return None return None
def query_stock_days_price_chg(code: str, diff_days: int): """ 查询diff_days天内个股的价格波动率 Parameters ------ diff_days: 计算x天前 code: 个股代码 600030 Return ------- Data Frame ------- index date ------- pct result dataFrame """ try: _array = dal.queryMany({'code': code}, { 'pct_chg': 1, 'date': 1, '_id': 0 }, diff_days + 1, [('date', -1)], 'hisprice') array = list(_array) if len(array) == 0: return None narray_pct = np.array([]) narray_date = np.array([]) narray_date.dtype = 'int32' for price in array: narray_pct = np.append(narray_pct, price['pct_chg']) narray_date = np.append(narray_date, price['date']) df = pd.DataFrame(narray_pct, index=narray_date, columns=['pct']) return df except Exception as exp: logger.error(exp) return None
def restoreRedisDataFromMongo(self): try: fundArray = dal.queryMany(None, None, 0, None, 'fund_outline') fundArr = list(fundArray) if len(fundArr) == 0: return None for fund in fundArr: code = fund['Code'] logger.info(code) redisRes = redisDal.redisSet(f'fund:{code}', json.dumps(fund)) except Exception as err: logger.critical(err) return -1
def scrawlFundTask(self): try: fundArray = dal.queryMany(None, { '_id': 1, 'cxcode': 1 }, 0, None, 'fund_target') fundArr = list(fundArray) if len(fundArr) == 0: return None for fund in fundArr: code = fund['_id'] cxcode = fund['cxcode'] if (code is None or cxcode is None): continue time.sleep(random.randint(15, 20)) logger.info(fund) self.scrawlSingleFundInfo(cxcode, code) except Exception as err: logger.critical(err) return -1
def calc_atr(code: str, diff_days: int): """ 更新转债diff_days天内MA Parameters ------ diff_days: 计算x天前的MA数据 Return ------- result 是否正常结束 """ try: _array = dal.queryMany({'code': code}, { 'close': 1, 'high': 1, 'low': 1, '_id': 0 }, diff_days + 1, [('date', -1)], 'hisprice') array = list(_array) if len(array) == 0: return None narray_high = np.array([]) narray_low = np.array([]) narray_close = np.array([]) for price in array: narray_high = np.append(narray_high, price['high']) narray_low = np.append(narray_low, price['low']) narray_close = np.append(narray_close, price['close']) atr = talib.ATR(narray_high, narray_low, narray_close, timeperiod=diff_days) if np.isnan(atr[-1]): return None else: return atr[-1] except Exception as exp: logger.error(exp) return None return None
def calcIndustrySample(): """ 更新个股的国证二级、三级行业分类 Parameters ------ stock_code 股票代码 Return ------- True 成功 False 失败 """ try: indSamples_ = dal.queryMany(None, { '_id': 1, 'samples': 1 }, 0, None, 'industrySample') indSamples = list(indSamples_) for indSample in indSamples: for stock_code in indSample['samples']: redisData = redisDal.redisHGet('xueQiuStockSet', stock_code) if redisData is None: redisObj = {'code': stock_code} else: redisObj = json.loads(redisData) ind = indSample['_id'] if len(ind) == 5: redisObj['gz2'] = ind elif len(ind) == 7: redisObj['gz3'] = ind redisDal.redisHSet('xueQiuStockSet', stock_code, json.dumps(redisObj)) logger.info(f'calcIndustrySample {stock_code} --{ind}') except Exception as err: logger.critical(err) return False return True