“优矿”集思录——分级基金专题
前言:
从14年7月份开始,伴随着牛市的到来,一个不怎么知名的投资标的大放光彩——分级基金
虽说分级基金是牛市产物,但对于短期的反弹行情其一样也是众多投资物中的一颗明珠,只要抓好反弹行情,随便吃几个涨停也是妥妥的
但分级基金相对复杂,要注意好分级基金的上下折、杠杆、折溢价等问题
本文假设读者已经对分级基金有一定的了解,只要运行代码就可以得到常见重要的分级基金相关指标,旨在成为投资者身边分级基金好工具
结合笔者平时的投资习惯,总结的指标主要有:母基金跟踪指数,整体溢价率,AB各自溢价率,B类价格杠杆,母基金下折需要跌多少,其他常见指标
用法:
运行下面的代码,即可以得到关于母基金、A份额、B份额,如上列举的所有指标
同时还可以选择输出结果排序规则等
有一定编程基础的读者,建议详细阅读函数说明,自行使用
def get_leverage_fund(show_type='M', order_by='discount_rate', order_method='desc', date=None):
'''
输入参数:
show_type str,展示/返回的数据,'T'为返回所有,'A'为返回A类相关,'B'为返回B类相关,'M'为返回母基金相关
order_by str,返回结果的排序属性列,可选的为'B_leverage'(B类价格杠杆),'ticker'(交易代码),'discount_rate'(整体溢价率)
order_method str,排序规则,降序('desc'),升序('acd')
输出参数:
计算好指标的dataframe,同时还将结果直接打印出来
'''
import pandas as pd
import numpy as np
from CAL.PyCAL import *
if show_type not in ['T','A','B','M']:
raise ValueError('show type 必须为T,A,B,M中的一个!')
if order_by not in ['B_leverage','ticker','discount_rate']:
raise ValueError('order_by 必须为B_leverage,ticker,discount_rate中的一个!')
if order_method not in ['desc','acd']:
raise ValueError('order_method 必须为desc,acd中的一个!')
# 日期默认为前一个工作日
if date is None:
date = Date.todaysDate()
cal = Calendar('China.SSE')
period = Period('-1B')
date = cal.advanceDate(date, period)
date = date.toDateTime().strftime('%Y%m%d')
elif not (isinstance(date, str) and len(date) == 8):
raise ValueError('date必须为xxxxxxxx字符串类型日期格式!')
# 所有股票类分级基金ticker
funds = DataAPI.FundLeverageInfoGet(exchangeCDLeverage=['XSHG','XSHE'], field='ticker,secShortName,tickerLeverage,secShortNameLeverage,shareType,category,,shareProp,idxCn,splitNote,downThrshold')
funds_total = funds[funds['category']=='E']
funds_total.drop('category', axis=1, inplace=True)
funds_total.columns = ['母基金代码','母基金简称','子基金代码','子基金简称','份额类别','分拆比例A/B','跟踪指数','折算说明','下折B阈值']
funds_total['子基金代码'] = funds_total['子基金代码'].apply(str)
funds_total['分拆比例A/B'][funds_total['分拆比例A/B'] == 1] = 5.0
# 替换基金简称
codes = funds_total.drop_duplicates('母基金代码')['母基金代码'].tolist()
codes_leverage = map(str,funds_total['子基金代码'].tolist())
short_names = DataAPI.FundGet(ticker=codes_leverage+codes, listStatusCd=['L','UN'], field='ticker,tradeAbbrName', pandas='1')
tmp = pd.merge(funds_total, short_names, how='left', left_on='母基金代码', right_on='ticker')
funds_total['母基金简称'] = tmp['tradeAbbrName']
tmp = pd.merge(funds_total, short_names, how='left', left_on='子基金代码', right_on='ticker')
funds_total['子基金简称'] = tmp['tradeAbbrName']
# 取净值
net_values = DataAPI.FundNavGet(ticker=codes+codes_leverage, dataDate=date, field='ticker,NAV', pandas='1')
tmp = pd.merge(funds_total, net_values, how='left', left_on='母基金代码', right_on='ticker')
funds_total['母基金净值'] = tmp['NAV']
tmp = pd.merge(funds_total, net_values, how='left', left_on='子基金代码', right_on='ticker')
funds_total['子基金净值'] = tmp['NAV']
# 取行情
prices = DataAPI.MktFunddGet(ticker=codes+codes_leverage, field='ticker,closePrice', tradeDate=date, pandas='1')
tmp = pd.merge(funds_total, prices, how='left', left_on='子基金代码', right_on='ticker')
funds_total['子基金价格'] = tmp['closePrice']
funds_total['子基金溢价率'] = funds_total['子基金价格'] / funds_total['子基金净值'] - 1
# 计算相关指标,合并dataframe
funds_A = funds_total[funds_total['份额类别'] == 'A']
funds_A.drop('份额类别',axis=1, inplace=True)
funds_B = funds_total[funds_total['份额类别'] == 'B'][['母基金代码','子基金代码','子基金简称','子基金净值','子基金价格','子基金溢价率']]
funds_B.columns = [['母基金代码','B类代码','B类简称','B类净值','B类价格','B类溢价率']]
funds_leverage = pd.merge(funds_A, funds_B, how='left', on='母基金代码')
funds_leverage.rename(columns={'子基金代码':'A类代码', '子基金简称':'A类简称', '子基金净值':'A类净值', '子基金价格':'A类价格', '子基金溢价率':'A类溢价率'}, inplace=True)
funds_leverage['整体溢价率'] = (funds_leverage['A类价格'] * (funds_leverage['分拆比例A/B'] / 10) + funds_leverage['B类价格'] * (1 - funds_leverage['分拆比例A/B'] / 10)) / funds_leverage['母基金净值'] -1
funds_leverage['B类价格杠杆'] = (funds_leverage['A类价格'] * funds_leverage['分拆比例A/B'] / 10 + funds_leverage['B类价格'] * (1 - funds_leverage['分拆比例A/B'] / 10)) / funds_leverage['B类价格'] / (1 - funds_leverage['分拆比例A/B'] / 10)
funds_leverage['下折母需跌'] = 1 - (funds_leverage['A类净值'] * funds_leverage['分拆比例A/B'] / 10 + funds_leverage['下折B阈值'] * (1 - funds_leverage['分拆比例A/B'] / 10)) / funds_leverage['母基金净值']
funds_leverage = funds_leverage[['母基金代码','母基金简称','母基金净值','整体溢价率','跟踪指数','分拆比例A/B','下折母需跌','A类代码','A类简称','A类净值','A类价格','A类溢价率','B类代码','B类简称','B类净值','B类价格','B类溢价率','B类价格杠杆','下折B阈值','折算说明']]
funds_leverage['B类价格杠杆'] = np.round(funds_leverage['B类价格杠杆'], 2)
funds_leverage.dropna(inplace=True)
funds_leverage['整体溢价率'] = pd.Series(["{0:.1f}%".format(val * 100) for val in funds_leverage['整体溢价率']], index = funds_leverage.index)
funds_leverage['A类溢价率'] = pd.Series(["{0:.1f}%".format(val * 100) for val in funds_leverage['A类溢价率']], index = funds_leverage.index)
funds_leverage['B类溢价率'] = pd.Series(["{0:.1f}%".format(val * 100) for val in funds_leverage['B类溢价率']], index = funds_leverage.index)
funds_leverage['下折母需跌'] = pd.Series(["{0:.1f}%".format(val * 100) for val in funds_leverage['下折母需跌']], index = funds_leverage.index)
# 返回类型
if show_type == 'T':
columns = funds_leverage.columns
elif show_type == 'A':
columns = ['A类代码','A类简称','A类净值','A类价格','A类溢价率','整体溢价率','跟踪指数']
elif show_type == 'B':
columns = ['B类代码','B类简称','B类净值','B类价格','B类溢价率','B类价格杠杆','下折B阈值','整体溢价率','跟踪指数']
else:
columns = ['母基金代码','母基金简称','母基金净值','整体溢价率','跟踪指数','分拆比例A/B','下折母需跌','折算说明']
# 排序
if order_by == 'B_leverage':
order_by = 'B类价格杠杆'
elif order_by == 'ticker':
order_by = '母基金代码'
else:
order_by = '整体溢价率'
if order_method == 'acd':
res = funds_leverage.sort(columns=order_by, ascending=True)[columns]
else:
res = funds_leverage.sort(columns=order_by, ascending=False)[columns]
res = res.reset_index().drop('index', axis=1)
res
return res
get_leverage_fund()
母基金代码 | 母基金简称 | 母基金净值 | 整体溢价率 | 跟踪指数 | 分拆比例A/B | 下折母需跌 | 折算说明 | |
---|---|---|---|---|---|---|---|---|
0 | 160420 | 华安50 | 0.6705 | 3.7% | 创业板50 | 5 | 5.6% | 每年12月15日定折,遇节假日顺延,A类不参与上折 |
1 | 160633 | 鹏华证券 | 0.6740 | 2.6% | 证券公司 | 5 | 5.5% | 每年11月第一个工作日定折 |
2 | 160634 | 鹏华环保分级 | 1.1280 | 2.5% | 中证环保 | 5 | 44.5% | 每年11月第一个工作日定折,B类不参与定折 |
3 | 161819 | 银华资源 | 1.0770 | 2.5% | 内地资源 | 4 | 47.1% | 每年第一个工作日定折 |
4 | 502020 | 国金50 | 1.1770 | 2.5% | 上证50 | 5 | 46.6% | 每年12月15日定折,遇节假日顺延 |
5 | 164821 | 工银新能源 | 0.8108 | 2.4% | 中证新能 | 5 | 21.9% | 每年1月第一个工作日定折(成立不足6个月、下折不足1个月除外) |
6 | 502023 | 钢铁分级 | 1.0230 | 2.4% | 国证钢铁 | 5 | 38.5% | 每年9月第一个工作日定折,距离成立或上下折不满3个月除外,每次折算后调整约定利率 |
7 | 502026 | 新丝路 | 1.0090 | 2.4% | 新丝路 | 5 | 37.7% | 每年9月第一个工作日定折,距离成立或上下折不满3个月除外,每次折算后调整约定利率 |
8 | 160628 | 鹏华地产 | 0.9890 | 2.3% | 800地产 | 5 | 36.0% | 每年第一个工作日定折 |
9 | 164820 | 工银高铁 | 0.7691 | 2.1% | 高铁产业 | 5 | 17.9% | 每年第一个工作日定折,A类不参与上折 |
10 | 167301 | 方正保险 | 0.9270 | 2.0% | 保险主题 | 5 | 32.0% | 每年12月15日定折,遇节假日顺延,基金合同生效不足六个月的除外,上下折不足1个月除外 |
11 | 164809 | 工银500 | 1.4138 | 1.8% | 中证 500 | 4 | 59.7% | 每年第一个工作日定折 |
12 | 161028 | 富国新能源 | 0.8540 | 1.7% | CS新能车 | 5 | 24.9% | 12/15 |
13 | 165315 | 建信网金融 | 0.9880 | 1.3% | 互联金融 | 5 | 36.1% | 每年12月第一个工作日定折 |
14 | 162413 | 华宝1000 | 0.8673 | 1.2% | 中证1000 | 5 | 27.0% | 每年12月15日定折,每次定折或不定折基准日变更利率 |
15 | 165511 | 信诚500 | 1.1920 | 1.2% | 中证 500 | 4 | 53.7% | 02/06,定折日为非工作日则提前 |
16 | 502056 | 医疗分级 | 0.8919 | 0.9% | 中证医疗 | 5 | 29.2% | 每年12月15日定折(遇节假日顺延,上下折不足3个月除外) |
17 | 160637 | 鹏华创业板 | 0.7430 | 0.7% | 创业板指 | 5 | 14.7% | 每年12月第一个工作日定折 |
18 | 161628 | 融通军工 | 0.9780 | 0.7% | 中证军工 | 5 | 35.2% | 每年12月15日定折,遇节假日提前,A类不参与上折 |
19 | 161910 | 万家中创 | 1.1115 | 0.7% | 创业成长 | 5 | 43.4% | 每年第一个工作日定折 |
20 | 160418 | 华安银行 | 0.7871 | 0.6% | 中证银行 | 5 | 19.2% | 每年12月15日定折,节假日顺延,A类不参与上折,B类不参与定折 |
21 | 162412 | 华宝医疗 | 0.8583 | 0.6% | 中证医疗 | 5 | 26.3% | 每年12月15日定折,遇节假日提前,每次定折或不定折基准日变更利率 |
22 | 168001 | 国寿养老 | 0.8770 | 0.5% | 养老产业 | 5 | 27.8% | 每年12月15日定折,遇节假日提前 |
23 | 160517 | 博时银行 | 0.8485 | 0.3% | 中证银行 | 5 | 25.2% | 每年12月第一个工作日定折,B类不参与定折 |
24 | 160629 | 鹏华传媒 | 1.1880 | 0.3% | 中证传媒 | 5 | 47.1% | 每年12月第一个工作日定折 |
25 | 160630 | 鹏华国防 | 1.2940 | 0.3% | 中证国防 | 5 | 51.5% | 每年12月第一个工作日定折 |
26 | 164819 | 工银环保 | 0.8604 | 0.3% | 中证环保 | 5 | 26.4% | 每年第一个工作日定折,成立不足半年可不定折 |
27 | 160625 | 鹏华证保 | 1.1500 | 0.2% | 800证保 | 5 | 45.3% | 每年第一个工作日定折 |
28 | 161719 | 招商可转债 | 1.0690 | 0.2% | 中信转债 | 7 | 21.0% | 每年12月15日定折,每3年折为母基金再拆分 |
29 | 162107 | 金鹰中证500 | 1.0987 | 0.2% | 中证 500 | 5 | 42.9% | 每年第一个工作日定折 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
73 | 164401 | 前海健康 | 1.0530 | -0.5% | 健康产业 | 5 | 39.0% | 每年第一个工作日定折 |
74 | 165521 | 信诚金融 | 0.9160 | -0.5% | 800金融 | 5 | 29.1% | 12/15 |
75 | 167503 | 安信一带一路 | 0.9160 | -0.5% | 一带一路 | 5 | 31.1% | 每年12月15日定折节假日提前 |
76 | 502016 | 长信一带一路 | 1.0350 | -0.5% | 一带一路 | 5 | 39.2% | 每年12月15日定折,遇节假日提前,距离成立或上下折不满3个月除外 |
77 | 168203 | 中融钢铁 | 0.9230 | -0.4% | 国证钢铁 | 5 | 31.9% | 每年12月15日定折,遇节假日提前 |
78 | 160127 | 南方消费 | 0.9730 | -0.3% | 内地消费 | 5 | 36.8% | 03/13,定折时A/B/M全归1,可顺延定折日 |
79 | 161726 | 招商生物 | 1.0360 | -0.3% | 生物医药 | 5 | 39.0% | 每年12月15日定折,遇节假日顺延 |
80 | 162010 | 长城久兆 | 1.1360 | -0.3% | 中小300P | 4 | 51.4% | 01/30,可提前定折日 |
81 | 162509 | 国联安双禧 | 1.3030 | -0.3% | 中证100 | 4 | 57.4% | 2016/04/16,每三年定折时A/B/M全归1,定折日为非工作日则提前 |
82 | 164905 | 交银新能源 | 1.1900 | -0.3% | 国证新能 | 5 | 47.3% | 每年第一个工作日定折 |
83 | 165515 | 信诚300 | 0.7410 | -0.3% | 沪深300 | 5 | 13.8% | 12/15 |
84 | 167601 | 国金300 | 0.9048 | -0.3% | 沪深300 | 5 | 28.3% | 每年第一个工作日定折 |
85 | 160417 | 华安300 | 1.2690 | -0.2% | 沪深300 | 5 | 46.8% | 每年第一个工作日定折 |
86 | 161022 | 富国创业板 | 1.1030 | -0.2% | 创业板指 | 5 | 43.0% | 每年第一个工作日定折 |
87 | 161030 | 富国体育 | 0.8940 | -0.2% | 中证体育 | 5 | 29.2% | 每年12月第一个工作日定折 |
88 | 161721 | 招商300地产 | 0.7360 | -0.2% | 地产等权 | 5 | 13.6% | 12/15 |
89 | 161724 | 招商煤炭 | 0.9560 | -0.2% | 煤炭等权 | 5 | 33.9% | 每年12月15日定折,遇节假日顺延 |
90 | 163209 | 诺安中创 | 1.2210 | -0.2% | 创业成长 | 4 | 54.8% | 每年第一个工作日定折 |
91 | 164811 | 工银100 | 1.2346 | -0.2% | 深证100P | 5 | 48.7% | 07/01 |
92 | 160219 | 国泰医药 | 0.8360 | -0.1% | 国证医药 | 5 | 23.3% | 每年第一个工作日定折,每次定折或不定折基准日变更利率 |
93 | 160516 | 博时证保 | 1.0758 | -0.1% | 800证保 | 5 | 41.6% | 每年12月第一个工作日定折 |
94 | 161031 | 富国工业4 | 1.0710 | -0.1% | 工业4.0 | 5 | 41.3% | 每年12月第一个工作日定折,B类不参与定折 |
95 | 161718 | 招商300高贝 | 0.8140 | -0.1% | 300高贝 | 5 | 21.1% | 12/15 |
96 | 161812 | 银华100 | 0.9530 | -0.1% | 深证100R | 5 | 32.1% | 每年第一个工作日定折 |
97 | 163109 | 申万深成 | 0.6555 | -0.1% | 深证成指 | 5 | 12.7% | 每年第一个工作日定折,无下折,A不参与上折,净值<1元无定折 |
98 | 164508 | 国富100 | 0.8310 | -0.1% | 中证100 | 5 | 22.8% | 每年第一个工作日定折 |
99 | 168204 | 中融煤炭 | 0.7310 | -0.1% | 中证煤炭 | 5 | 13.2% | 每年12月15日定折,遇节假日提前 |
100 | 161029 | 富国银行 | 0.8940 | -0.0% | 中证银行 | 5 | 28.7% | 每年12月15日 |
101 | 161629 | 融通证券 | 0.7770 | -0.0% | 证券公司 | 5 | 18.7% | 每年12月15日定折,A类不参与上折 |
102 | 167701 | 德邦德信 | 1.0520 | -0.0% | 中高企债 | 7 | 20.9% | 每次折算后2周年定折转为母基再拆分 |
103 rows × 8 columns