def macroview_check(targetDate, markowitz_id='MZ.000070', weeks_lookback=52): ''' ra_bl_view表 检查:宏观观点 最新数据是否更新 ''' print('\033[1;35m宏观观点################################## Check\033[0m') gids = asset_mz_markowitz_asset.load([markowitz_id ])['mz_asset_id'].tolist() # 获取ra_blview表格的宏观观点数据 db = database.connection('asset') metadata = MetaData(bind=db) t1 = Table('ra_bl_view', metadata, autoload=True) columns = [ t1.c.globalid, t1.c.bl_date, t1.c.bl_index_id, t1.c.bl_view, ] s = select(columns) startDate = (targetDate + timedelta(weeks=-1 * weeks_lookback)).strftime('%Y-%m-%d') s = s.where(t1.c.bl_date >= startDate).where(t1.c.globalid == 'BL.000001') df = pd.read_sql(s, db, parse_dates=['bl_date'], index_col=['bl_index_id', 'bl_date']) gids.append('ALayer') try: for asset_id in gids: v = df.loc[asset_id] v = v.sort_index(ascending=True) print(asset_id, v.index[-1], v.bl_view[-1]) print( 'markowitz配置资产宏观观点都存在,请检查观点是否正确:\033[1;35mPass inspection\033[0m') return True except: print('markowitz配置资产宏观观点缺失:\033[1;43mFail inspection!!!\033[0m') return False
def mz_asset_nav_check(targetDate, markowitz_id='MZ.000070'): ''' markowitz --id MZ.000007 检查:MZ.000070配置指数及因子 最新数据是否更新 ''' print( '\033[1;35mmarkowitz配置更新################################## Check\033[0m' ) startDate = (targetDate + timedelta(weeks=-2)).strftime('%Y-%m-%d') endDate = date.today().strftime('%Y-%m-%d') assets_id = asset_mz_markowitz_asset.load([markowitz_id ])['mz_asset_id'].tolist() assets = dict([(asset_id, Asset(asset_id).nav(begin_date=startDate, end_date=endDate)) for asset_id in assets_id]) df_assets = pd.DataFrame(assets) if df_assets.loc[targetDate].isnull().any(): print('markowitz配置资产或因子数据更新:\033[1;43mFail inspection!!!\033[0m') print(df_assets.loc[[targetDate]]) return False else: print('markowitz配置资产或因子数据更新:\033[1;35mPass inspection\033[0m') return True
def cov_check(targetDate, markowitz_id='MZ.000070'): ''' on_online_cov表,检查:资产或因子 的最新数据是否完整且离谱 ''' print('\033[1;35m协方差#################################### Check\033[0m') # 获取on_online_cov表格的数据 db = database.connection('asset') metadata = MetaData(bind=db) t1 = Table('on_online_cov', metadata, autoload=True) columns = [ t1.c.on_asseta_id, t1.c.on_assetb_id, t1.c.on_date, t1.c.on_cov, ] s = select(columns) s = s.where(t1.c.on_date == targetDate) df = pd.read_sql(s, db, parse_dates=['on_date']) gids = asset_mz_markowitz_asset.load([markowitz_id ])['mz_asset_id'].tolist() if any(df) and df['on_cov'].isnull().any() == False: print('协方差数据更新:\033[1;35mPass inspection\033[0m') if len(df[df.on_asseta_id == df.on_assetb_id])**2 == len(df) and len( df) == len(gids)**2: print('协方差矩阵条数:\033[1;35mPass inspection\033[0m') else: print('协方差矩阵条数:\033[1;43mFail inspection!!!\033[0m') df_covariance = df[df.on_asseta_id == df.on_assetb_id] if (df_covariance['on_cov'] == 0.0).any(): print('方差非零:\033[1;43mFail inspection!!!\033[0m') all_df = df_covariance[df_covariance['on_cov'] == 0].pivot( index='on_date', columns='on_asseta_id', values='on_cov') del all_df.index.name print(all_df) return False else: print('方差非零:\033[1;43mPass inspection!!!\033[0m') df_covariance['stock'] = df_covariance['on_asseta_id'].map( lambda x: int(x) if str(x)[:4] in ['1111'] else None) df_covariance['bond'] = df_covariance['on_asseta_id'].map( lambda x: int(x) if str(x)[:4] in ['1121'] else None) stock_cov = df_covariance[~( df_covariance['stock'].isnull())]['on_cov'].tolist() bond_cov = df_covariance[~( df_covariance['bond'].isnull())]['on_cov'].tolist() if max(stock_cov) > min(stock_cov) * 4: print('国内股票方差检查:\033[1;43mFail inspection!!!\033[0m') stock_df = df_covariance[~(df_covariance['stock'].isnull())].pivot( index='on_date', columns='on_asseta_id', values='on_cov') del stock_df.index.name print(stock_df) else: print('国内股票方差检查:\033[1;35mPass inspection\033[0m') if max(bond_cov) > min(bond_cov) * 4: print('国内债券方差正常:\033[1;43mFail inspection!!!\033[0m') bond_df = df_covariance[~(df_covariance['bond'].isnull())].pivot( index='on_date', columns='on_asseta_id', values='on_cov') del bond_df.index.name print(bond_df) else: print('国内债券方差正常:\033[1;35mPass inspection\033[0m') else: print('协方差数据更新:\033[1;43mFail inspection!!!\033[0m') return True