“优矿”集思录——分级基金专题

来源:https://uqer.io/community/share/561da7d9f9f06c4c5e2fb5cc

前言:

从14年7月份开始,伴随着牛市的到来,一个不怎么知名的投资标的大放光彩——分级基金

虽说分级基金是牛市产物,但对于短期的反弹行情其一样也是众多投资物中的一颗明珠,只要抓好反弹行情,随便吃几个涨停也是妥妥的

但分级基金相对复杂,要注意好分级基金的上下折、杠杆、折溢价等问题

本文假设读者已经对分级基金有一定的了解,只要运行代码就可以得到常见重要的分级基金相关指标,旨在成为投资者身边分级基金好工具

结合笔者平时的投资习惯,总结的指标主要有:母基金跟踪指数,整体溢价率,AB各自溢价率,B类价格杠杆,母基金下折需要跌多少,其他常见指标

用法:

运行下面的代码,即可以得到关于母基金、A份额、B份额,如上列举的所有指标

同时还可以选择输出结果排序规则等

有一定编程基础的读者,建议详细阅读函数说明,自行使用

  1. def get_leverage_fund(show_type='M', order_by='discount_rate', order_method='desc', date=None):
  2. '''
  3. 输入参数:
  4. show_type str,展示/返回的数据,'T'为返回所有,'A'为返回A类相关,'B'为返回B类相关,'M'为返回母基金相关
  5. order_by str,返回结果的排序属性列,可选的为'B_leverage'(B类价格杠杆),'ticker'(交易代码),'discount_rate'(整体溢价率)
  6. order_method str,排序规则,降序('desc'),升序('acd')
  7. 输出参数:
  8. 计算好指标的dataframe,同时还将结果直接打印出来
  9. '''
  10. import pandas as pd
  11. import numpy as np
  12. from CAL.PyCAL import *
  13. if show_type not in ['T','A','B','M']:
  14. raise ValueError('show type 必须为T,A,B,M中的一个!')
  15. if order_by not in ['B_leverage','ticker','discount_rate']:
  16. raise ValueError('order_by 必须为B_leverage,ticker,discount_rate中的一个!')
  17. if order_method not in ['desc','acd']:
  18. raise ValueError('order_method 必须为desc,acd中的一个!')
  19. # 日期默认为前一个工作日
  20. if date is None:
  21. date = Date.todaysDate()
  22. cal = Calendar('China.SSE')
  23. period = Period('-1B')
  24. date = cal.advanceDate(date, period)
  25. date = date.toDateTime().strftime('%Y%m%d')
  26. elif not (isinstance(date, str) and len(date) == 8):
  27. raise ValueError('date必须为xxxxxxxx字符串类型日期格式!')
  28. # 所有股票类分级基金ticker
  29. funds = DataAPI.FundLeverageInfoGet(exchangeCDLeverage=['XSHG','XSHE'], field='ticker,secShortName,tickerLeverage,secShortNameLeverage,shareType,category,,shareProp,idxCn,splitNote,downThrshold')
  30. funds_total = funds[funds['category']=='E']
  31. funds_total.drop('category', axis=1, inplace=True)
  32. funds_total.columns = ['母基金代码','母基金简称','子基金代码','子基金简称','份额类别','分拆比例A/B','跟踪指数','折算说明','下折B阈值']
  33. funds_total['子基金代码'] = funds_total['子基金代码'].apply(str)
  34. funds_total['分拆比例A/B'][funds_total['分拆比例A/B'] == 1] = 5.0
  35. # 替换基金简称
  36. codes = funds_total.drop_duplicates('母基金代码')['母基金代码'].tolist()
  37. codes_leverage = map(str,funds_total['子基金代码'].tolist())
  38. short_names = DataAPI.FundGet(ticker=codes_leverage+codes, listStatusCd=['L','UN'], field='ticker,tradeAbbrName', pandas='1')
  39. tmp = pd.merge(funds_total, short_names, how='left', left_on='母基金代码', right_on='ticker')
  40. funds_total['母基金简称'] = tmp['tradeAbbrName']
  41. tmp = pd.merge(funds_total, short_names, how='left', left_on='子基金代码', right_on='ticker')
  42. funds_total['子基金简称'] = tmp['tradeAbbrName']
  43. # 取净值
  44. net_values = DataAPI.FundNavGet(ticker=codes+codes_leverage, dataDate=date, field='ticker,NAV', pandas='1')
  45. tmp = pd.merge(funds_total, net_values, how='left', left_on='母基金代码', right_on='ticker')
  46. funds_total['母基金净值'] = tmp['NAV']
  47. tmp = pd.merge(funds_total, net_values, how='left', left_on='子基金代码', right_on='ticker')
  48. funds_total['子基金净值'] = tmp['NAV']
  49. # 取行情
  50. prices = DataAPI.MktFunddGet(ticker=codes+codes_leverage, field='ticker,closePrice', tradeDate=date, pandas='1')
  51. tmp = pd.merge(funds_total, prices, how='left', left_on='子基金代码', right_on='ticker')
  52. funds_total['子基金价格'] = tmp['closePrice']
  53. funds_total['子基金溢价率'] = funds_total['子基金价格'] / funds_total['子基金净值'] - 1
  54. # 计算相关指标,合并dataframe
  55. funds_A = funds_total[funds_total['份额类别'] == 'A']
  56. funds_A.drop('份额类别',axis=1, inplace=True)
  57. funds_B = funds_total[funds_total['份额类别'] == 'B'][['母基金代码','子基金代码','子基金简称','子基金净值','子基金价格','子基金溢价率']]
  58. funds_B.columns = [['母基金代码','B类代码','B类简称','B类净值','B类价格','B类溢价率']]
  59. funds_leverage = pd.merge(funds_A, funds_B, how='left', on='母基金代码')
  60. funds_leverage.rename(columns={'子基金代码':'A类代码', '子基金简称':'A类简称', '子基金净值':'A类净值', '子基金价格':'A类价格', '子基金溢价率':'A类溢价率'}, inplace=True)
  61. funds_leverage['整体溢价率'] = (funds_leverage['A类价格'] * (funds_leverage['分拆比例A/B'] / 10) + funds_leverage['B类价格'] * (1 - funds_leverage['分拆比例A/B'] / 10)) / funds_leverage['母基金净值'] -1
  62. 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)
  63. funds_leverage['下折母需跌'] = 1 - (funds_leverage['A类净值'] * funds_leverage['分拆比例A/B'] / 10 + funds_leverage['下折B阈值'] * (1 - funds_leverage['分拆比例A/B'] / 10)) / funds_leverage['母基金净值']
  64. funds_leverage = funds_leverage[['母基金代码','母基金简称','母基金净值','整体溢价率','跟踪指数','分拆比例A/B','下折母需跌','A类代码','A类简称','A类净值','A类价格','A类溢价率','B类代码','B类简称','B类净值','B类价格','B类溢价率','B类价格杠杆','下折B阈值','折算说明']]
  65. funds_leverage['B类价格杠杆'] = np.round(funds_leverage['B类价格杠杆'], 2)
  66. funds_leverage.dropna(inplace=True)
  67. funds_leverage['整体溢价率'] = pd.Series(["{0:.1f}%".format(val * 100) for val in funds_leverage['整体溢价率']], index = funds_leverage.index)
  68. funds_leverage['A类溢价率'] = pd.Series(["{0:.1f}%".format(val * 100) for val in funds_leverage['A类溢价率']], index = funds_leverage.index)
  69. funds_leverage['B类溢价率'] = pd.Series(["{0:.1f}%".format(val * 100) for val in funds_leverage['B类溢价率']], index = funds_leverage.index)
  70. funds_leverage['下折母需跌'] = pd.Series(["{0:.1f}%".format(val * 100) for val in funds_leverage['下折母需跌']], index = funds_leverage.index)
  71. # 返回类型
  72. if show_type == 'T':
  73. columns = funds_leverage.columns
  74. elif show_type == 'A':
  75. columns = ['A类代码','A类简称','A类净值','A类价格','A类溢价率','整体溢价率','跟踪指数']
  76. elif show_type == 'B':
  77. columns = ['B类代码','B类简称','B类净值','B类价格','B类溢价率','B类价格杠杆','下折B阈值','整体溢价率','跟踪指数']
  78. else:
  79. columns = ['母基金代码','母基金简称','母基金净值','整体溢价率','跟踪指数','分拆比例A/B','下折母需跌','折算说明']
  80. # 排序
  81. if order_by == 'B_leverage':
  82. order_by = 'B类价格杠杆'
  83. elif order_by == 'ticker':
  84. order_by = '母基金代码'
  85. else:
  86. order_by = '整体溢价率'
  87. if order_method == 'acd':
  88. res = funds_leverage.sort(columns=order_by, ascending=True)[columns]
  89. else:
  90. res = funds_leverage.sort(columns=order_by, ascending=False)[columns]
  91. res = res.reset_index().drop('index', axis=1)
  92. res
  93. return res
  94. get_leverage_fund()
母基金代码母基金简称母基金净值整体溢价率跟踪指数分拆比例A/B下折母需跌折算说明
0160420华安500.67053.7%创业板5055.6%每年12月15日定折,遇节假日顺延,A类不参与上折
1160633鹏华证券0.67402.6%证券公司55.5%每年11月第一个工作日定折
2160634鹏华环保分级1.12802.5%中证环保544.5%每年11月第一个工作日定折,B类不参与定折
3161819银华资源1.07702.5%内地资源447.1%每年第一个工作日定折
4502020国金501.17702.5%上证50546.6%每年12月15日定折,遇节假日顺延
5164821工银新能源0.81082.4%中证新能521.9%每年1月第一个工作日定折(成立不足6个月、下折不足1个月除外)
6502023钢铁分级1.02302.4%国证钢铁538.5%每年9月第一个工作日定折,距离成立或上下折不满3个月除外,每次折算后调整约定利率
7502026新丝路1.00902.4%新丝路537.7%每年9月第一个工作日定折,距离成立或上下折不满3个月除外,每次折算后调整约定利率
8160628鹏华地产0.98902.3%800地产536.0%每年第一个工作日定折
9164820工银高铁0.76912.1%高铁产业517.9%每年第一个工作日定折,A类不参与上折
10167301方正保险0.92702.0%保险主题532.0%每年12月15日定折,遇节假日顺延,基金合同生效不足六个月的除外,上下折不足1个月除外
11164809工银5001.41381.8%中证 500459.7%每年第一个工作日定折
12161028富国新能源0.85401.7%CS新能车524.9%12/15
13165315建信网金融0.98801.3%互联金融536.1%每年12月第一个工作日定折
14162413华宝10000.86731.2%中证1000527.0%每年12月15日定折,每次定折或不定折基准日变更利率
15165511信诚5001.19201.2%中证 500453.7%02/06,定折日为非工作日则提前
16502056医疗分级0.89190.9%中证医疗529.2%每年12月15日定折(遇节假日顺延,上下折不足3个月除外)
17160637鹏华创业板0.74300.7%创业板指514.7%每年12月第一个工作日定折
18161628融通军工0.97800.7%中证军工535.2%每年12月15日定折,遇节假日提前,A类不参与上折
19161910万家中创1.11150.7%创业成长543.4%每年第一个工作日定折
20160418华安银行0.78710.6%中证银行519.2%每年12月15日定折,节假日顺延,A类不参与上折,B类不参与定折
21162412华宝医疗0.85830.6%中证医疗526.3%每年12月15日定折,遇节假日提前,每次定折或不定折基准日变更利率
22168001国寿养老0.87700.5%养老产业527.8%每年12月15日定折,遇节假日提前
23160517博时银行0.84850.3%中证银行525.2%每年12月第一个工作日定折,B类不参与定折
24160629鹏华传媒1.18800.3%中证传媒547.1%每年12月第一个工作日定折
25160630鹏华国防1.29400.3%中证国防551.5%每年12月第一个工作日定折
26164819工银环保0.86040.3%中证环保526.4%每年第一个工作日定折,成立不足半年可不定折
27160625鹏华证保1.15000.2%800证保545.3%每年第一个工作日定折
28161719招商可转债1.06900.2%中信转债721.0%每年12月15日定折,每3年折为母基金再拆分
29162107金鹰中证5001.09870.2%中证 500542.9%每年第一个工作日定折
73164401前海健康1.0530-0.5%健康产业539.0%每年第一个工作日定折
74165521信诚金融0.9160-0.5%800金融529.1%12/15
75167503安信一带一路0.9160-0.5%一带一路531.1%每年12月15日定折节假日提前
76502016长信一带一路1.0350-0.5%一带一路539.2%每年12月15日定折,遇节假日提前,距离成立或上下折不满3个月除外
77168203中融钢铁0.9230-0.4%国证钢铁531.9%每年12月15日定折,遇节假日提前
78160127南方消费0.9730-0.3%内地消费536.8%03/13,定折时A/B/M全归1,可顺延定折日
79161726招商生物1.0360-0.3%生物医药539.0%每年12月15日定折,遇节假日顺延
80162010长城久兆1.1360-0.3%中小300P451.4%01/30,可提前定折日
81162509国联安双禧1.3030-0.3%中证100457.4%2016/04/16,每三年定折时A/B/M全归1,定折日为非工作日则提前
82164905交银新能源1.1900-0.3%国证新能547.3%每年第一个工作日定折
83165515信诚3000.7410-0.3%沪深300513.8%12/15
84167601国金3000.9048-0.3%沪深300528.3%每年第一个工作日定折
85160417华安3001.2690-0.2%沪深300546.8%每年第一个工作日定折
86161022富国创业板1.1030-0.2%创业板指543.0%每年第一个工作日定折
87161030富国体育0.8940-0.2%中证体育529.2%每年12月第一个工作日定折
88161721招商300地产0.7360-0.2%地产等权513.6%12/15
89161724招商煤炭0.9560-0.2%煤炭等权533.9%每年12月15日定折,遇节假日顺延
90163209诺安中创1.2210-0.2%创业成长454.8%每年第一个工作日定折
91164811工银1001.2346-0.2%深证100P548.7%07/01
92160219国泰医药0.8360-0.1%国证医药523.3%每年第一个工作日定折,每次定折或不定折基准日变更利率
93160516博时证保1.0758-0.1%800证保541.6%每年12月第一个工作日定折
94161031富国工业41.0710-0.1%工业4.0541.3%每年12月第一个工作日定折,B类不参与定折
95161718招商300高贝0.8140-0.1%300高贝521.1%12/15
96161812银华1000.9530-0.1%深证100R532.1%每年第一个工作日定折
97163109申万深成0.6555-0.1%深证成指512.7%每年第一个工作日定折,无下折,A不参与上折,净值<1元无定折
98164508国富1000.8310-0.1%中证100522.8%每年第一个工作日定折
99168204中融煤炭0.7310-0.1%中证煤炭513.2%每年12月15日定折,遇节假日提前
100161029富国银行0.8940-0.0%中证银行528.7%每年12月15日
101161629融通证券0.7770-0.0%证券公司518.7%每年12月15日定折,A类不参与上折
102167701德邦德信1.0520-0.0%中高企债720.9%每次折算后2周年定折转为母基再拆分
  1. 103 rows × 8 columns