Ejemplo n.º 1
0
def get_opm_weight_individual(
    signal=pd.DataFrame(),
    start_date='2017-01-01',
    end_date='2020-08-31',
    out_path='E:/FT_Users/LihaiYang/Files/factor_comb_data/all_cluster_comb/1_pm.csv'
):
    pm = po.Portfolio_Management(signal,
                                 start_date=start_date,
                                 end_date=end_date,
                                 num_holdings=cfg.PARAMS_PM['num_holdings'],
                                 style_neutral=False,
                                 industry_neutral=True,
                                 to_bound=cfg.PARAMS_PM['to_bound'])
    tdays = query_data.get_trade_days('d',
                                      from_trade_day=start_date,
                                      to_trade_day=end_date)
    newdf = pd.DataFrame()
    w_b, expo = pm.solve(tdays[1])
    newdf = newdf.append(w_b)
    for tday in tdays[2:]:
        print(tday)
        w_b11, expo1 = pm.solve(tday, w_lastday=w_b)
        w_b = w_b11.copy()
        newdf = newdf.append(w_b)
    newdf.index = tdays[1:]
    newdf.to_csv(out_path)
    print(w_b.head())
Ejemplo n.º 2
0
ic_sign = [
    uc.sign(i['perf'][list(i['perf'].keys())[0]]['ic-mean'])
    for i in mine_summary
]
print(len(ic_sign))
# 提取因子值
factor_value = fetch.fetch_factor(begin,
                                  end,
                                  fields=fac_name,
                                  standard='clean1_alla',
                                  codes=None,
                                  df=False)
# 有些因子数据不足1009个,比较奇怪
factor_value = {
    k: v
    for k, v in factor_value.items() if len(v) == len(
        query_data.get_trade_days('d', from_trade_day=begin, to_trade_day=end))
}
# 调整因子正负
factor_value_adj = {}
for summa in mine_summary:
    if summa['factor_name'] in list(factor_value.keys()):
        factor_value_adj[summa['factor_name']] = factor_value[summa['factor_name']] * \
                                                 uc.sign(summa['perf'][list(summa['perf'].keys())[0]]['ic-mean'])

f = open(
    'E:/FT_Users/LihaiYang/Files/factor_comb_data/all_fac_li_20170101-20210228/all_fac_li_20170101-20210228.pkl',
    'wb')
pickle.dump(factor_value_adj, f, -1)
f.close()
import pandas as pd
import pickle
from matplotlib import pyplot as plt
import statsmodels.api as sm
import numpy as np
import math
from ft_platform.utils import utils_calculation as uc
from utils_func import query_data

data_pat = 'E:/FT_Users/LihaiYang/Files/factor_comb_data/fac_meaning/all_cluster'
new_f = pd.read_pickle(data_pat + '/fac_reshape.pkl')

trade_days = query_data.get_trade_days('d', 'SSE', '2017-01-01',
                                       '2021-02-28')  # 记得修改
trade_days = [pd.to_datetime(i) for i in trade_days]
# 每天的截面回归估计因子暴露
coef = {}
R_sq = {}
for date in trade_days:
    sub_data = new_f.loc[date, ]
    model = sm.OLS(sub_data.iloc[:, -1],
                   sm.add_constant(sub_data.iloc[:, 0:-1]),
                   missing='drop').fit()
    coef[date] = model.params
    R_sq[date] = model.rsquared_adj
    print(date)
coef_param = pd.concat(coef.values(), axis=1, keys=coef.keys())
coef_param = pd.DataFrame(coef_param.values.T,
                          index=coef_param.columns,
                          columns=coef_param.index)  # 转置
r2_param = pd.DataFrame(R_sq.values(),