Exemple #1
0
 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
Exemple #3
0
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')
Exemple #4
0
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为基准