def getRMExposure(self, i): data = DataAPI.RMExposureDayGet(secID=u"",ticker=u"",tradeDate="%s"%i,\ beginDate=u"",endDate=u"",field=u"",pandas="1") del data['tradeDate'] del data['ticker'] del data['exchangeCD'] path = '%s/RMExposure' % self.dirpath if not os.path.exists(path): os.mkdir(path) if not data.empty: data['secID'] = data['secID'].apply(self.replaceCode) data.to_csv('%s/%s.csv' % (path, i), encoding='gb18030', index=None)
def get_risk_model(self, trading_day_list, universe): result = {} specific_return = {} for date in trading_day_list: result[date] = {} result[date]['exposure'] = DataAPI.RMExposureDayGet( secID=universe, tradeDate=date).set_index('secID').iloc[:, 4:-1] result[date]['factor_covariance'] = DataAPI.RMCovarianceShortGet( tradeDate=date).set_index('Factor').iloc[:, 2:-1] / 10000. result[date]['specific_risk'] = \ DataAPI.RMSriskShortGet(secID=universe, tradeDate=date).set_index('secID')['SRISK'] / 100. specific_return[date] = \ DataAPI.RMSpecificRetDayGet(secID=universe, tradeDate=date).set_index('secID')['spret'] return result, specific_return
def update_uqer_risk_model(ds, **kwargs): ref_date, this_date = process_date(ds) flag = check_holiday(this_date) if not flag: return df = api.RMExposureDayGet(tradeDate=ref_date) df.rename(columns={ 'tradeDate': 'trade_date', 'ticker': 'code' }, inplace=True) df.code = df.code.astype(int) del df['secID'] engine.execute( delete(RiskExposure).where(RiskExposure.trade_date == this_date)) data_info_log(df, RiskExposure) format_data(df) df.to_sql(RiskExposure.__table__.name, engine, index=False, if_exists='append') df = api.RMFactorRetDayGet(tradeDate=ref_date) df.rename(columns={'tradeDate': 'trade_date'}, inplace=True) engine.execute( delete(RiskReturn).where(RiskReturn.trade_date == this_date)) data_info_log(df, RiskReturn) format_data(df) df.to_sql(RiskReturn.__table__.name, engine, index=False, if_exists='append') df = api.RMSpecificRetDayGet(tradeDate=ref_date) df.rename(columns={ 'tradeDate': 'trade_date', 'ticker': 'code' }, inplace=True) df.code = df.code.astype(int) del df['secID'] engine.execute( delete(SpecificReturn).where(SpecificReturn.trade_date == this_date)) data_info_log(df, SpecificReturn) format_data(df) df.to_sql(SpecificReturn.__table__.name, engine, index=False, if_exists='append') df = api.RMCovarianceDayGet(tradeDate=ref_date) df.rename(columns={'tradeDate': 'trade_date'}, inplace=True) engine.execute( delete(RiskCovDay).where(RiskCovDay.trade_date == this_date)) data_info_log(df, RiskCovDay) format_data(df) df.to_sql(RiskCovDay.__table__.name, engine, index=False, if_exists='append') df = api.RMCovarianceShortGet(tradeDate=ref_date) df.rename(columns={'tradeDate': 'trade_date'}, inplace=True) engine.execute( delete(RiskCovShort).where(RiskCovShort.trade_date == this_date)) data_info_log(df, RiskCovShort) format_data(df) df.to_sql(RiskCovShort.__table__.name, engine, index=False, if_exists='append') df = api.RMCovarianceLongGet(tradeDate=ref_date) df.rename(columns={'tradeDate': 'trade_date'}, inplace=True) engine.execute( delete(RiskCovLong).where(RiskCovLong.trade_date == this_date)) data_info_log(df, RiskCovLong) format_data(df) df.to_sql(RiskCovLong.__table__.name, engine, index=False, if_exists='append') df = api.RMSriskDayGet(tradeDate=ref_date) df.rename(columns={ 'tradeDate': 'trade_date', 'ticker': 'code' }, inplace=True) df.code = df.code.astype(int) del df['secID'] engine.execute( delete(SpecificRiskDay).where(SpecificRiskDay.trade_date == this_date)) data_info_log(df, SpecificRiskDay) format_data(df) df.to_sql(SpecificRiskDay.__table__.name, engine, index=False, if_exists='append') df = api.RMSriskShortGet(tradeDate=ref_date) df.rename(columns={ 'tradeDate': 'trade_date', 'ticker': 'code' }, inplace=True) df.code = df.code.astype(int) del df['secID'] engine.execute( delete(SpecificRiskShort).where( SpecificRiskShort.trade_date == this_date)) data_info_log(df, SpecificRiskShort) format_data(df) df.to_sql(SpecificRiskShort.__table__.name, engine, index=False, if_exists='append') df = api.RMSriskLongGet(tradeDate=ref_date) df.rename(columns={ 'tradeDate': 'trade_date', 'ticker': 'code' }, inplace=True) df.code = df.code.astype(int) del df['secID'] engine.execute( delete(SpecificRiskLong).where( SpecificRiskLong.trade_date == this_date)) data_info_log(df, SpecificRiskLong) format_data(df) df.to_sql(SpecificRiskLong.__table__.name, engine, index=False, if_exists='append')
def update_uqer_risk_model(ds, **kwargs): ref_date, this_date = process_date(ds) table = 'risk_exposure' df = api.RMExposureDayGet(tradeDate=ref_date) df.rename(columns={'tradeDate': 'Date', 'ticker': 'Code'}, inplace=True) df.Code = df.Code.astype(int) del df['secID'] engine2.execute("delete from {0} where Date = '{1}';".format(table, ref_date)) df.to_sql(table, engine2, index=False, if_exists='append') table = 'risk_return' df = api.RMFactorRetDayGet(tradeDate=ref_date) df.rename(columns={'tradeDate': 'Date'}, inplace=True) engine2.execute("delete from {0} where Date = '{1}';".format(table, ref_date)) df.to_sql(table, engine2, index=False, if_exists='append') table = 'specific_return' df = api.RMSpecificRetDayGet(tradeDate=ref_date) df.rename(columns={'tradeDate': 'Date', 'ticker': 'Code'}, inplace=True) df.Code = df.Code.astype(int) del df['secID'] engine2.execute("delete from {0} where Date = '{1}';".format(table, ref_date)) df.to_sql(table, engine2, index=False, if_exists='append') table = 'risk_cov_day' df = api.RMCovarianceDayGet(tradeDate=ref_date) df.rename(columns={'tradeDate': 'Date'}, inplace=True) engine2.execute("delete from {0} where Date = '{1}';".format(table, ref_date)) df.to_sql(table, engine2, index=False, if_exists='append') table = 'risk_cov_short' df = api.RMCovarianceShortGet(tradeDate=ref_date) df.rename(columns={'tradeDate': 'Date'}, inplace=True) engine2.execute("delete from {0} where Date = '{1}';".format(table, ref_date)) df.to_sql(table, engine2, index=False, if_exists='append') table = 'risk_cov_long' df = api.RMCovarianceLongGet(tradeDate=ref_date) df.rename(columns={'tradeDate': 'Date'}, inplace=True) engine2.execute("delete from {0} where Date = '{1}';".format(table, ref_date)) df.to_sql(table, engine2, index=False, if_exists='append') table = 'specific_risk_day' df = api.RMSriskDayGet(tradeDate=ref_date) df.rename(columns={'tradeDate': 'Date', 'ticker': 'Code'}, inplace=True) df.Code = df.Code.astype(int) del df['secID'] engine2.execute("delete from {0} where Date = '{1}';".format(table, ref_date)) df.to_sql(table, engine2, index=False, if_exists='append') table = 'specific_risk_short' df = api.RMSriskShortGet(tradeDate=ref_date) df.rename(columns={'tradeDate': 'Date', 'ticker': 'Code'}, inplace=True) df.Code = df.Code.astype(int) del df['secID'] engine2.execute("delete from {0} where Date = '{1}';".format(table, ref_date)) df.to_sql(table, engine2, index=False, if_exists='append') table = 'specific_risk_long' df = api.RMSriskLongGet(tradeDate=ref_date) df.rename(columns={'tradeDate': 'Date', 'ticker': 'Code'}, inplace=True) df.Code = df.Code.astype(int) del df['secID'] engine2.execute("delete from {0} where Date = '{1}';".format(table, ref_date)) df.to_sql(table, engine2, index=False, if_exists='append')
'INDUSTRY_SW')[u'市值占净值(%)'].sum() / stock[u'市值占净值(%)'].sum() * 100 PESummary[date] = stock.groupby( 'PE_TYPE')[u'市值占净值(%)'].sum() / stock[u'市值占净值(%)'].sum() * 100 MVSummary[date] = stock.groupby( 'MKT_CAP_TYPE')[u'市值占净值(%)'].sum() / stock[u'市值占净值(%)'].sum() * 100 Summary.loc[u'股票个数', date] = len(stock) Summary.loc[u'仓位(%)', date] = stock[u'市值占净值(%)'].sum() Summary.loc["PE(TTM)", date] = stock["PE_TTM"].median() Summary.loc["PB", date] = stock["PB"].median() Summary.loc[u'市值(亿)', date] = stock["MKT_CAP_CSRC"].median() Summary.loc[u'个股最大持仓(%)', date] = stock[u'成本占净值(%)'].max() Summary.loc[u'个股持仓中位数(%)', date] = stock[u'成本占净值(%)'].median() # 基于风险模型归因 factor_all = DataAPI.RMExposureDayGet(tradeDate=date, field='') factor_retraw = DataAPI.RMFactorRetDayGet(tradeDate=date, field='') factor_ret = factor_retraw.iloc[:, 1:40].T factor = pd.DataFrame() factor['secID'] = stock['secID'] factor['weight(%)'] = stock['weight(%)'] factor = factor.merge(factor_all, on='secID', how='left') # 合并因子暴露 expo = factor.iloc[:, -40:-1] weight = factor['weight(%)'] factor_expo = pd.DataFrame(np.dot(weight, expo), index=expo.columns) FactorSummary[date + 'FactorRet(%)'] = factor_ret FactorSummary[date + '(%)'] = factor_expo * factor_ret ExpoSummary[date] = factor_expo # ExpoSummary.to_excel(writer,'ExpoSummary'+date) # ExpoSummary=ExpoSummary.append(factor) # 以中证500为基准