Python金融=>[数据分析]

目录

导言

投资思路

剔除亏损鸡

黑名单重审

择优录取

安远债基50

强者恒强

运行效果

源代码


导言

集中精力看下投资理财,毕竟一百万多一个点收益就是一万,用大数据加算法找到最佳投资方法! 6000只债券,能不亏钱,比货币基金强点的,就只剩几十只。还要排除掉系列风险,比如@暴雷赎回造成、@回撤太厉害、@规模太小、@波动太大、@有亏损年份、@带股票或可转债性质、@ 去掉坑爹公司,最后剩下的,买A类长期投资,这才是投资标的!还有一些减分项也不要忽略,@需要封闭的、@一次只能投一百的、@公司规模在500亿以下的、@债基规模10亿以下的、@公司债基总规模500亿以下的、@公司债基亏损率过高,比如20%的、@八年平均年利率不到5%的、@管理费超过0.4%的、@刚换经理的、@成立没超过三年的(数据挖掘分析计算,后面再介绍)

投资思路

剔除亏损鸡

首先把6000只债券基金里剔除掉有亏损的,毕竟咋们买债券基金,图的就是个稳定,还有亏损就没有啥意思了!这样就去掉了五百只亏损鸡!

黑名单重审

之前因为种种原因打到黑名单的基金,如果业绩又起来了,也值得重新审视,浪子回头金不换嘛。黑名单采用json格式,我最喜欢这种json格式保存数据了,比数据库还方便。

类似这种格式,其实就是个字典,{“A鸡”:“非常好”,‘B鸡’:‘非常坑爹’}

择优录取

收益近三月超1%、半年超2.5%、一年超5%和五年超25%的基金,一年不超过5个点的鸡不是好债基!

安远债基50

进入了我的数据库并不是就高枕无忧了,我会像美股纳斯达克100指数来定期审视,新陈代谢,不行的弱鸡就出去,行的就进来,基本保持在50个左右。个人原则不在同一个债基上投入过多,防止踩雷损失过大,一个债基的债,十个债基都难以还!

强者恒强

那些一直在库中的基,就加大投资奖励,也就是增加投资权重。

运行效果

源代码

import pandas as pd
import datetime
import json
from 数据库取数 import getInfo

systime= datetime.datetime.now()
today= datetime.datetime.strftime(systime,'%Y-%m-%d') #今天日期
database = 'info' #数据库名称
tablename = 'bondfunds' #数据库中表名称

#黑名单上的基金
blacklistPath = r"E:\AnyuanCoporation\flask\model\finance\blacklist.json"
with open(blacklistPath, 'r', encoding='utf-8') as file:
    blacklist = json.load(file)

#读取前面采集的CSV数据。
desBondsinfoPath = rf'E:\AnyuanCoporation\flask\model\finance\BondsInfo_{today}.csv'
df = pd.read_csv(desBondsinfoPath,delimiter=',',usecols=['代码','基金简称','近三月', '近半年', '近一年', '近五年'], encoding='gbk')
big_list = df.values.tolist()

print(f'                           【{today}安远投资债基分析报告】')
print('*******************************************************************************************')
print(f'债券基金总量: {len(big_list)}')

cleaned_list = []
for sublist in big_list:
    percentages = sublist[2:]
    if not any('-' in percent for percent in percentages if percent!='--'):
        cleaned_list.append(sublist)
print(f'近三月、半年、一年和五年没亏损的数量: {len(cleaned_list)}')
print('-------------------------------------------------------------------------------------------')

# ②把字符串转换成数字
converted_list = []
for sublist in cleaned_list:
    integer = sublist[0:2]
    percentages = [float(percent.replace('%', '')) for percent in sublist[2:] if percent!='--']
    converted_sublist = integer + percentages
    converted_list.append(converted_sublist)

#['代码','基金简称','近三月', '近半年', '近一年', '近五年'] 500以下的不投
Candidate = []
blackBonds = []
for sublist in converted_list:
    if sublist[1] in blacklist.keys() and blacklist[sublist[1]]==None:
        blackBonds.append((str(sublist[0]).zfill(6),sublist[1]))
    elif sublist[1] not in blacklist.keys() and len(sublist) ==6 and sublist[2]>=1 and sublist[3]>=2.5 and sublist[4]>=5 and sublist[5]>=25:
        Candidate.append(sublist)
print(f'*****黑名单中值得重新看看的有{len(blackBonds)}只,名单如下:*****')
print(blackBonds)
for bond in blackBonds:
    print(bond)

print('-------------------------------------------------------------------------------------------')
print(f'*****收益近三月超1%、半年超2.5%、一年超5%和五年超25%的基金有{len(Candidate)}只,')
bondtbd=[]
for bond in Candidate:
    bondtbd.append((str(bond[0]).zfill(6),bond[1]))
anyuanBondNo = { x[0] for x in bondtbd}
#跟数据库现有的基金比较去重

bondquality = getInfo('info','bondfunds','fundNum','fundName')
databaseBondNo = { x[0] for x in bondquality}
newBondNo = anyuanBondNo-databaseBondNo
print(f'不与数据库重合,新挖掘的有{len(newBondNo)}只债券,名单如下*****:')
finalBondList = []
for bond in bondtbd:
    if bond[0] in newBondNo:
        finalBondList.append(bond)
        print(bond)
print(finalBondList)
print('-------------------------------------------------------------------------------------------')

oldBondNo = databaseBondNo-anyuanBondNo
print('*****数据库中变弱的基金名单如下:*****')
print(f'数据库中{len(databaseBondNo)}只债券,没上榜的有{len(oldBondNo)}只债券')
weakBondList = []
for bond in bondquality:
    if bond[0] in oldBondNo:
        weakBondList.append(bond)
        print(bond)
print(weakBondList)
print('-------------------------------------------------------------------------------------------')

#恒强的基金
powerBondNo = databaseBondNo&anyuanBondNo
print('*****数据库中强者恒强的基金名单如下:*****')
print(f'数据库中{len(databaseBondNo)}只债券,一直在榜上的有{len(powerBondNo)}只债券')
powerBondList = []
for bond in bondquality:
    if bond[0] in powerBondNo:
        powerBondList.append(bond)
print(powerBondList)
fPowerBondList = sorted(powerBondList,key=lambda x:x[0])
for bond in fPowerBondList:
    print(bond)

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值