Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
 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
Esempio n. 5
0
 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
Esempio n. 6
0
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
Esempio n. 7
0
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