最近在研究债券型基金, 以优化自己的资产配置。但市场债基太多,兴起之下,注册了聚宽平台账号(此处应有广告费),决定用代码来帮助自己进行选择。
PS: 代码下方有持仓详细
步骤:
- 去聚宽平台注册一个账号(免费的), 然后就可以用注册的ID去调用聚宽平台的API了;
- 使用如下代码抽取所有的债券型基金,一共取到了3500多只债基:
query(finance.FUND_MAIN_INFO).filter(finance.FUND_MAIN_INFO.underlying_asset_type_id=="402003")
- 过滤出成立时间大于5年的债基,再进行下一步;(我更喜欢成立时间久的基金,心里觉得踏实)
- 获取过滤后的债基的累计复权净值, 再除以其成立的总月数,获取每月的复权月均收益;
- 再过滤出月均复权收益大于百分之0.8(一年就接近10%)的债基作为候选; PS: 经过这一步,3500多支债基只剩下了40支左右了
- 对这40多只债基, 逐一查看, 去掉最近1年,最近3年表现不佳, 或最大回撤较大的债基,把剩下的作为一个债基组合。(我自己只保留了6支,已在天天基金APP对6支基金进行等权购买,我对这组债基的目标不高, 年化收益达到8%就满意了)
下面是 2~5 步的python代码:
import com.my.basic.Constants as const
from datetime import datetime
from jqdatasdk import *
auth( const.jq_usr, const.jq_pwd)
print (get_query_count())
def cal_month_gap(start_time, current_time):
start_time_arr = str.split(start_time.strftime("%Y-%m-%d"), "-")
current_time_arr = str.split(current_time.strftime("%Y-%m-%d"), "-")
return (int(current_time_arr[0]) - int(start_time_arr[0]))*12 + (int(current_time_arr[1]) - int(start_time_arr[1]))
## 获取债券基金列表
def get_bond_index_list():
## 债券基金的underlying_asset_type_id 为 402003
q = query(finance.FUND_MAIN_INFO).filter(finance.FUND_MAIN_INFO.underlying_asset_type_id=="402003")
return finance.run_query(q)
current_time = datetime.now()
def print_bond_index_list():
df = get_bond_index_list()
for i in range(0, len(df)):
if df.start_date[i] is not None and df.end_date[i] is None :
month_gap = cal_month_gap(df.start_date[i], current_time)
## 选取成立时间大于60个月的债基
if month_gap > 60:
main_code = df.main_code[i]
## 获取该基金的现状
df2 = finance.run_query(query(finance.FUND_NET_VALUE).filter(finance.FUND_NET_VALUE.code==main_code).order_by(finance.FUND_NET_VALUE.day.desc()).limit(1))
## 计算年化收益率 (使用累计复权净值对成立的年份进行开根)
r = format( (pow(df2.refactor_net_value[0], 12/month_gap) - 1)*100 , '.1f')
## 计算月均收益率,保留两位小数 (使用累计复权净值除以成立的月数)
refactor_per_month_earn = format((df2.refactor_net_value[0]-1)*100 / month_gap, '.2f');
## 获取复权月均收益大于0.8%的基金:
if float(refactor_per_month_earn) > 0.8:
print( df.main_code[i], " ", df.name[i]," ", month_gap, " ", df2.net_value[0], " ", df2.refactor_net_value[0], " ", refactor_per_month_earn,"%", " ", r,"%")
print_bond_index_list()
持仓:
大摩多元收益债券A ( 233012 )
易方达裕丰回报债券 ( 000171 )
工银瑞信双利债券A ( 485111 )
易方达安心回报债券B ( 110028 )
易方达稳健收益债券B ( 110008 )
易方达增强回报债券A ( 110012 )
2020-01-10,创建组合20天, 收益率为: 1.73%
2020-02-16, 创建组合2个月, 收益率为:3.14%
抛砖引玉, 请多指教 ........
网友评论