返回介绍

第一部分 新手入门

第二部分 股票量化相关

第三部分 基金、利率互换、固定收益类

第四部分 衍生品相关

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

发布于 2022-02-20 22:26:20 字数 34707 浏览 843 评论 0 收藏 0

前言:

从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下折母需跌折算说明
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周年定折转为母基再拆分
103 rows × 8 columns

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文