Commit 72357017 authored by 赵杰's avatar 赵杰

新版本

parent b587313d
HF00002JJ2,远澜银杏1号,"1月份月度涨幅-1.62%,元旦后第一周市场人气旺盛,商品和股市全面上涨,但第二周市场对于货币政策是否持续宽松的预期有所调整,商品和股市都出现较剧烈的震荡回调走势。与之相应,商品趋势策略表现大多先扬后抑,在震荡行情中回吐了部分利润。商品基本面量化策略上半月仍在持续回撤。股指基本面量化策略和股指CTA策略本期表现较优,在上半月的趋势波段中获利。1月份下半月商品市场进入持续高位震荡行情,对于CTA策略较具挑战。远澜商品组合中趋势类策略大多回撤,其中长周期趋势表现优于中短周期趋势。商品基本面量化下半月大致持平,均值回归策略同期小亏。股指下半月也偏震荡,月底或因流动性缩紧等因素三大股指皆走低。远澜股指组合的基本面择时策略继续小幅新高,股指量价CTA基本持平。月份月度涨幅5.46%,12 月份商品大致维持强势上涨走势,其中黑色系因限产限电,季节性因素和中澳冲突等多重因素影响表现强劲。但下半月由于国外疫情加剧引发经济需求方面的担忧,商品市场出现较大的调整和转折走势。远澜商品组合中的趋势类策略表现较为理想,继续新高。商品基本面量化策略头寸方向转变相对较慢,策略表现先扬后抑大致持平。其他商品策略类型也大多盈利。" HF00002JJ2,远澜银杏1号,"2月份月度涨幅7.22%,2月份上半月,伴随通胀预期的抬升,商品走势先抑后扬,但因临近春节长假市场情绪偏谨慎,成交量持续收缩。远澜商品中趋势策略大致持平,其中中短周期策略表现略优。同期其他商品策略,包括均值回复和基本面量化等大多持平或微亏。上半月股指表现较强,但分化仍然严重。同期股指量价和基本面择时策略皆为小盈。数者相加,2月份上半月远澜代表产品云杉净值基本持平。春节期间外盘大多上涨,也没有意外事件发生,助长多头情绪,节后两周商品涨势明显。远澜商品组合中趋势策略皆为盈利,其中长周期策略表现显著更优。商品基本面量化策略相关因子有效性有所修复,本期显著反弹。其他商品策略如均值回复策略等本期也多为盈利。股市节后虽为高开,但美债收益率上升等因素导致市场锚定的利率水平和对应的股票估值发生重大变化,导致股市高开后连续低走,同时高估值股票和低价股的风格急剧反转。同期远澜组合的估值基本面量化和股指量价策略皆为小盈。因策略成分大多盈利,2月份下半月远澜代表产品云杉净值上涨约3.7%。"
HF00002G4A,申毅全天候2号,"1月份月度涨幅0.1234%,1 月份第一周期权波动率上涨迅速,而产品策略里包含备兑,做空波动率的部分,这部分产生了的浮亏。第一周下跌了0.974%,随后快速修复下跌部分,1月共上涨0.1234%。" HF00002G4A,申毅全天候2号,"2月份月度涨幅0.41%,2月期权隐含波动率整体波动不大,50ETF期权隐含波动率仅在二月最后一周小幅抬升;整月隐含波动率区间在20%-25%附近,市场环境利于期权套利类管理人。然而申毅全天候2号中含有中性和打新收益,打新环境近期不佳。"
HF00006693,丹羿步步高德兴1号,"1月份月度涨幅6.26%, 今年以来收益 6.26%,成立以来收益 31.58%。目前仓位85成左右,主要配置于食品饮料、TMT、医药生物、休闲服务、以及电力设备。" HF00006693,丹羿步步高德兴1号,"2月份月度涨幅-1.68%, 今年以来收益 4.47%,成立以来收益 29.36%。目前仓位83成,主要配置于TMT(12.89%)、医药生物(32.12%)、休闲服务(12.88%)、高端制造(9.97%)、建材(9.75%)。"
HF00006BGS,无量量化增强1号,"1月份月度微跌0.67%。1月份A股市场震荡,表现较为分化,1月份创业板月涨幅5.48%,上证指数微涨0.29%,中证500微跌0.33%,市场出现各个板块的风格不断快速切换,权重股表现更好,量化产品由于持股数量多,分化行情不太利于产品业绩,节前效应指增产品表现正常。" HF00006BGS,无量量化增强1号,"2月份A股市场处于震荡下跌状态,其中创业板月跌幅-6.86%,上证指数微涨0.75%,中证500微涨0.29%,沪深300微跌0.28%,本月最后一周指数有较大幅度下跌, 其中创业板跌幅-11.30%,上证指数跌幅-5.06%,中证500跌幅-5.06%,沪深300跌幅-7.65%,指数增强产品跟踪指数,与指数相关性较高,但量化产品持股数量多,分布较均衡,表现平均优于主观多头。"
HF00006AZF,半夏宏观对冲E,"1月份月度涨幅0.05%,成立以来收益 12.16%。权益类:仍然持有基本面长期看好的先进制造业类股票,期待迎来戴维斯双击的上涨,整体权益类(包括股指期货)资产维持多头仓位。商品类:总体维持加仓多头仓位,不过会加入跨品种之间的对冲保护。 债券类:大幅减仓,等待企稳后逐步加回国债期货多头仓位。" HF00006AZF,半夏宏观对冲E,"2月份月度涨幅-3.39%,今年以来收益-3.34%, 成立以来收益 8.36%。权益类:仍然持有基本面长期看好的先进制造业类股票,期待迎来戴维斯双击的上涨,整体权益类(包括股指期货)资产加仓多头仓位。商品类:总体加仓多头仓位,不过会加入跨品种之间的对冲保护。 债券类:等待企稳后逐步加回国债期货多头仓位。"
HF0000681Q,中邮永安国金新智能六号,"1月份月度微跌1.22%。1月份A股市场处于震荡状态,其中创业板月涨幅5.48%,上证指数微涨0.29%,中证500微跌0.33%,市场出现各个板块的风格不断快速切换,权重股表现更好,量化产品由于持股数量多,造成小市值股票的相对超配,给阿尔法策略短期带来了较大的压力。另一方面,股指基差略微扩张,对中性产品业绩影响不大。" HF0000681Q,中邮永安国金新智能六号,"2月份A股市场处于震荡下跌状态,其中创业板月跌幅-6.86%,上证指数微涨0.75%,中证500微涨0.29%,沪深300微跌-0.28%,市场风格不断快速切换,节前白马蓝筹股涨势良好,中小市值个股持续走低,而节后指数走弱时,中小市值个股走势却相对少一些。量化产品持股数量多,股指基差略微收敛,对中性产品业绩表现相对较好。"
HF00004RHP,高熵稳盛增强固定收益1号,"1月份月度涨幅0.83%,今年以来收益0.83%,成立以来收益82.96%。目前仓位9成左右,重点行业主要分布在地产、电解铝、建筑环保、煤炭。" HF00004RHP,高熵稳盛增强固定收益1号,"2月份月度涨幅3.3%,今年以来收益4.15%,成立以来收益 89%。本月获利了结电解铝行业债券、部分煤炭行业公司债,增持环保行业中票,建仓影视文化行业中票。目前仓位97成,重点行业主要分布在上海金融地产、煤炭、环保、建筑环保、文旅。"
HF00005DBQ,高熵稳盛5号固定收益,"1月份月度涨幅2.84%,今年以来收益2.84%,成立以来收益40.34%。目前仓位9成左右,重点行业主要分布在地产、钢铁、电解铝、煤炭。" HF00005DBQ,高熵稳盛5号固定收益,"2月份月度涨幅2.25%,今年以来收益 5.16%,成立以来收益43.5%。本月获利了结电解铝行业债券、部分煤炭行业公司债,增持环保行业中票,建仓影视文化行业中票。目前仓位9成8,重点行业主要分布在地产、煤炭、环卫、环保、建筑环保。"
HF00005QOM,高熵稳盛6号固定收益,"1月份月度涨幅1.14%,今年以来收益1.14%,成立以来收益29.74%。目前仓位9成左右,重点行业主要分布在地产、煤炭、城投、铝加工添加剂。" HF00005QOM,高熵稳盛6号固定收益,"2月份月度涨幅1.87%,今年以来收益 3.03%,成立以来收益 32.17%。本月获利了结电解铝行业债券,增持环保行业中票,建仓影视文化行业中票。目前仓位98成,重点行业主要分布在上海金融地产、煤炭、环保、建筑环保、铝加工添加剂。"
HF00005ZUB,高熵稳盛7号固定收益,"1月份月度涨幅3.25%,今年以来收益3.25%,成立以来收益28.47%。目前仓位9成左右,重点行业主要分布在地产、钢铁、电解铝、煤炭。" HF00005ZUB,高熵稳盛7号固定收益,"2月份月度涨幅1.29%,今年以来收益4.58 %,成立以来收益 30.13%。本月获利了结电解铝行业债券、部分煤炭行业公司债,增持环保行业中票,建仓影视文化行业中票。目前仓位9成7,重点行业主要分布在煤炭、钢铁、环保、上海金融地产、文旅。"
HF0000523H,高熵稳盛增强固定收益2号,"1月份月度涨幅-0.27%,今年以来收益 -0.27%,成立以来收益 -49.1%。目前仓位9成左右,重点行业主要分布在地产、煤炭、建筑环保、电解铝、电磁线。" HF0000523H,高熵稳盛增强固定收益2号,"2月份月度涨幅2.88%,今年以来收益 2.61%,成立以来收益 53.40%。本月获利了结电解铝行业债券、部分煤炭行业公司债,增持环保行业中票,建仓影视文化行业中票。目前仓位98成,重点行业主要分布在海金融地产、煤炭、环保、建筑环保、钢铁。"
HF00006641,思勰投资子路十一号,"1月份月度涨幅-0.3%,今年以来涨幅-0.3%,成立以来收益-0.96%。" HF00006641,思勰投资子路十一号,"2月份月度涨幅-1.59%,今年以来涨幅-1.88%,成立以来收益-2.52%。本月CTA盈利0.847%,打新收益0.217%,市场中性收益-2.52%。"
HF00006GNQ,思勰投资京享一号,"1月份月度涨幅0.59%, 今年以来涨幅0.59%,成立以来收益2.66%。目前本策略全部资金进行高频CTA运作,运作正常。" HF00006GNQ,思勰投资京享一号,"2月份月度涨幅1.31%, 今年以来涨幅1.90%,成立以来收益4%。目前本策略全部资金进行高频CTA运作,运作正常。"
HF00006DLK,象限2号A期,"象限2号A期1月的业绩表现为-0.3280% 。1月份商品市场整体行情对CTA策略比较不友好,首先CTA策略普遍仓位较大品种价格出现多次反转,容易出现亏损,比如前期涨得较好的焦炭,本月下跌幅度较大。其次,CTA策略获利机会不多,1月商品市场整体振幅大小和2020年12月相比有着明显的下降,特别是1月中下旬。波动率情况和振幅类似。象限2号A期在第一周快速上涨之后缓慢回落,回吐了全部利润。" HF00006DLK,象限2号A期,"象限2号A期2月的业绩表现为上涨3.76% 。2月份商品市场整体行情先抑后扬,春节期间外盘大多上涨,也没有意外事件发生,助长多头情绪,节后两周商品涨势明显,集中于有色和能化板块上,趋势的持续性很强,且波动大,有利于象限这类长周期CTA策略。"
HF00006FEU,黑翼策略精选5号,"1月份月度涨幅1.68%,1月份第一周市场人气旺盛,商品和股市全面上涨,但第二周以后市场对于货币政策是否持续宽松的预期有所调整,商品和股市都出现较剧烈的震荡回调走势。黑翼CTA策略在1月份的表现为先扬后抑,整体微跌,而指增策略表现为震荡上涨,收获正超额。" HF00006FEU,黑翼策略精选5号,"2月份月度涨幅2.47%,2月份商品市场整体行情先抑后扬,春节期间外盘大多上涨,也没有意外事件发生,助长多头情绪,节后两周商品涨势明显,集中于有色和能化板块上,趋势的持续性很强,且波动大,黑翼CTA策略在2月份的表现正常,为先抑后扬,黑翼CTA二号2月涨幅为2.60%。而指增策略表现为先扬后抑,震荡上涨,收获正超额。"
HF00005AFK,展弘稳进1号8期,"1月份月度涨幅0.90%,疫情以及美国大选等扰动因素下,跨境价差套利策略较难做,以至于收益较往年略低,但仍然保持着收益的稳定性,且回撤控制上仍保持高水准。" HF00005AFK,展弘稳进1号8期,"2月份月度涨幅0.44%,疫情以及美国大选等扰动因素下,跨境价差套利策略较难做,以至于收益较往年略低,但仍然保持着收益的稳定性,且回撤控制上仍保持高水准。"
HF000013VX,循远成长一号,"1月月度涨幅-0.18%。今年以来收益-0.18%,成立以来188.45%。目前仓位85成,主要配置在大消费、新能源、TMT、医药医疗,建材家居等行业板块。" HF000013VX,循远成长一号,"2月月度涨幅7.06%。今年以来收益6.86%,成立以来208.81%。目前仓位5成,主要配置在公共事业,旅游酒店、交通运输、食品饮料、医疗服务、传媒互联网、家具家居等。"
\ No newline at end of file HF000058E2,探普白鹭量化CTA1号,"基金下投产品浙江白鹭量化CTA一号2月涨幅为7.38%,作为正常杠杆的CTA产品而言,2月的收益水平是非常高的。3大子策略都有一定得收益贡献,但是趋势跟踪策略贡献最大,说明白鹭捕捉趋势的准确性是比较高的。"
FUND_INFO16100780219326,诚奇探普对冲一号,"2月份A股市场处于震荡下跌状态,其中创业板月跌幅-6.86%,上证指数微涨0.75%,中证500微涨0.29%,沪深300微跌-0.28%,市场风格不断快速切换,节前白马蓝筹股涨势良好,中小市值个股持续走低,而节后指数走弱时,中小市值个股走势却相对少一些。量化产品持股数量多,股指基差略微收敛,对中性产品业绩表现相对较好。"
\ No newline at end of file
...@@ -172,7 +172,7 @@ def single_evaluation(fund_id, invest_type=2, index_id='000905.SH'): ...@@ -172,7 +172,7 @@ def single_evaluation(fund_id, invest_type=2, index_id='000905.SH'):
return evaluation_dict return evaluation_dict
def fund_index_compare(fund_id, invest_type=2, index_id='000905.SH'): def fund_index_compare(fund_id, invest_type=2, index_id='4000233'):
start_date = datetime.datetime(2000, 1, 1) start_date = datetime.datetime(2000, 1, 1)
index_daily = get_index_daily(index_id, start_date) index_daily = get_index_daily(index_id, start_date)
fund_nav = get_tamp_nav(fund_id, start_date, invest_type=invest_type) fund_nav = get_tamp_nav(fund_id, start_date, invest_type=invest_type)
...@@ -196,4 +196,4 @@ def fund_index_compare(fund_id, invest_type=2, index_id='000905.SH'): ...@@ -196,4 +196,4 @@ def fund_index_compare(fund_id, invest_type=2, index_id='000905.SH'):
if __name__ == '__main__': if __name__ == '__main__':
# print(single_evaluation(fund_id='HF00005AFK')) # print(single_evaluation(fund_id='HF00005AFK'))
print(fund_index_compare(fund_id='HF00002G4A')) print(fund_index_compare(fund_id='HF00002G4A'))
\ No newline at end of file
...@@ -203,14 +203,12 @@ def get_index_daily(index_id, start_date): ...@@ -203,14 +203,12 @@ def get_index_daily(index_id, start_date):
Returns:与组合净值形式相同的表 Returns:与组合净值形式相同的表
""" """
with TAMP_SQL(tamp_fund_engine) as tamp_product: with TAMP_SQL(tamp_fund_engine) as tamp_fund:
tamp_product_session = tamp_product.session tamp_fund_session = tamp_fund.session
sql = "SELECT ts_code, trade_date, close FROM index_daily " \ sql = "select DISTINCT `index_id`, `price_date`, `close` from tx_fund_market_indexes where index_id='{}' order by price_date ASC".format(
"WHERE ts_code='{}' AND trade_date>'{}'".format(index_id, start_date) index_id)
# df = pd.read_sql(sql, con).dropna(how='any') cur = tamp_fund_session.execute(sql)
cur = tamp_product_session.execute(sql)
data = cur.fetchall() data = cur.fetchall()
df = pd.DataFrame(list(data), columns=['ts_code', 'trade_date', 'close']) df = pd.DataFrame(list(data), columns=['ts_code', 'trade_date', 'close'])
df.rename({'ts_code': 'fund_id', 'trade_date': 'end_date', 'close': 'adj_nav'}, axis=1, inplace=True) df.rename({'ts_code': 'fund_id', 'trade_date': 'end_date', 'close': 'adj_nav'}, axis=1, inplace=True)
df['end_date'] = pd.to_datetime(df['end_date']) df['end_date'] = pd.to_datetime(df['end_date'])
...@@ -490,7 +488,7 @@ tamp_fund = get_tamp_fund() ...@@ -490,7 +488,7 @@ tamp_fund = get_tamp_fund()
class PortfolioDiagnose(object): class PortfolioDiagnose(object):
def __init__(self, client_type, portfolio, invest_amount, expect_return=0.1, def __init__(self, client_type, portfolio, invest_amount, expect_return=0.1,
expect_drawdown=0.15, index_id='000905.SH', invest_type='private', start_date=None, end_date=None): expect_drawdown=0.15, index_id='4000233', invest_type='private', start_date=None, end_date=None):
"""基金诊断 """基金诊断
Args: Args:
...@@ -519,7 +517,8 @@ class PortfolioDiagnose(object): ...@@ -519,7 +517,8 @@ class PortfolioDiagnose(object):
if self.end_date is None: if self.end_date is None:
self.end_date = datetime.datetime(datetime.date.today().year, self.end_date = datetime.datetime(datetime.date.today().year,
datetime.date.today().month, 1) - datetime.timedelta(1) datetime.date.today().month,
datetime.date.today().day)
if self.start_date is None: if self.start_date is None:
self.start_date = cal_date(self.end_date, 'Y', 1) self.start_date = cal_date(self.end_date, 'Y', 1)
else: else:
...@@ -536,6 +535,7 @@ class PortfolioDiagnose(object): ...@@ -536,6 +535,7 @@ class PortfolioDiagnose(object):
self.origin_portfolio = None self.origin_portfolio = None
self.abandoned_portfolio = None self.abandoned_portfolio = None
self.propose_portfolio = None self.propose_portfolio = None
self.ori_prod = None
def get_portfolio(self, ): def get_portfolio(self, ):
"""获取组合净值表 """获取组合净值表
...@@ -734,8 +734,7 @@ class PortfolioDiagnose(object): ...@@ -734,8 +734,7 @@ class PortfolioDiagnose(object):
prod[proposal] = proposal_nav[proposal] prod[proposal] = proposal_nav[proposal]
self.proposal_fund.append(proposal) self.proposal_fund.append(proposal)
prod.ffill(inplace=True) prod = prod[(prod.index >= self.start_date) & (prod.index <= self.end_date)]
prod = prod[prod.index >= self.start_date]
prod = resample(prod, get_trade_cal(), min(self.freq_list)) prod = resample(prod, get_trade_cal(), min(self.freq_list))
if 'cal_date' in prod.columns: if 'cal_date' in prod.columns:
prod.drop(labels='cal_date', inplace=True, axis=1) prod.drop(labels='cal_date', inplace=True, axis=1)
...@@ -744,6 +743,8 @@ class PortfolioDiagnose(object): ...@@ -744,6 +743,8 @@ class PortfolioDiagnose(object):
self.new_correlation = cal_correlation(prod) self.new_correlation = cal_correlation(prod)
prod.dropna(how='all', inplace=True) prod.dropna(how='all', inplace=True)
prod.ffill(inplace=True)
self.ori_prod = prod.copy()
prod.fillna(method="bfill", inplace=True) prod.fillna(method="bfill", inplace=True)
self.new_correlation = self.new_correlation.fillna(1).round(2) self.new_correlation = self.new_correlation.fillna(1).round(2)
self.new_correlation.columns = self.new_correlation.columns.map(lambda x: get_fund_name(x, suggest_fund_type[x]).values[0][0]) self.new_correlation.columns = self.new_correlation.columns.map(lambda x: get_fund_name(x, suggest_fund_type[x]).values[0][0])
...@@ -863,12 +864,20 @@ class PortfolioDiagnose(object): ...@@ -863,12 +864,20 @@ class PortfolioDiagnose(object):
print("模型计算一次时间:", end4 - start) print("模型计算一次时间:", end4 - start)
def return_compare(self): def return_compare(self):
weight_prod = self.ori_prod.copy()
for col in weight_prod.columns:
weight_prod[col] = weight_prod[col].apply(lambda x: 0 if math.isnan(x) else 1)
weight_prod = weight_prod * self.new_weights
weight_prod = weight_prod.apply(lambda x: x/x.sum(), axis=1)
index_data = get_index_daily(self.index_id, self.start_date) index_data = get_index_daily(self.index_id, self.start_date)
index_data = pd.merge(index_data, self.propose_portfolio, how='inner', left_index=True, right_index=True) index_data = pd.merge(index_data, self.propose_portfolio, how='inner', left_index=True, right_index=True)
index_return = index_data.iloc[:, :] / index_data.iloc[0, :] - 1 index_return = index_data.iloc[:, :] / index_data.iloc[0, :] - 1
# origin_fund_return = origin_portfolio.iloc[:, :] / origin_portfolio.iloc[0, :] - 1 # origin_fund_return = origin_portfolio.iloc[:, :] / origin_portfolio.iloc[0, :] - 1
propose_fund_return = self.propose_portfolio.iloc[:, :] / self.propose_portfolio.iloc[0, :] - 1 propose_fund_return = self.propose_portfolio.iloc[:, :] / self.propose_portfolio.iloc[0, :] - 1
propose_fund_return['return'] = propose_fund_return.T.iloc[:, :].apply(lambda x: np.dot(self.new_weights, x)) pct_change = self.propose_portfolio.pct_change().fillna(0) * weight_prod
propose_fund_return['return'] = (pct_change.sum(axis=1)+1).cumprod() - 1
# propose_fund_return['return'] = propose_fund_return.T.iloc[:, :].apply(lambda x: np.dot(self.new_weights, x))
return index_return, propose_fund_return return index_return, propose_fund_return
def old_evaluation(self, group_name, group_result, data_adaptor): def old_evaluation(self, group_name, group_result, data_adaptor):
...@@ -1510,4 +1519,4 @@ class PortfolioDiagnose(object): ...@@ -1510,4 +1519,4 @@ class PortfolioDiagnose(object):
# print('新组合相关性:', portfolio_diagnose.new_correlation) # print('新组合相关性:', portfolio_diagnose.new_correlation)
# print('旧组合个基评价:', portfolio_diagnose.old_portfolio_evaluation()) # print('旧组合个基评价:', portfolio_diagnose.old_portfolio_evaluation())
# print('新组合个基评价:', portfolio_diagnose.propose_fund_evaluation()) # print('新组合个基评价:', portfolio_diagnose.propose_fund_evaluation())
# print(portfolio_diagnose.single_evaluation(fund_id='HF0000681Q')) # print(portfolio_diagnose.single_evaluation(fund_id='HF0000681Q'))
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment