Micro-sheep / efinance

efinance 是一个可以快速获取基金、股票、债券、期货数据的 Python 库,回测以及量化交易的好帮手!🚀🚀🚀
MIT License
1.89k stars 477 forks source link

基金经理相关数据 #82

Open haomes opened 2 years ago

haomes commented 2 years ago

有幸使用大佬的这个包,感觉实在是太有用了,感谢! 提一个小问题:能不能出一个爬取基金经理相关数据的代码呢?比如我想知道某一时间某个基金经理持有什么基金(或者基金经理的持仓)?

Micro-sheep commented 2 years ago

下面是一个获取某只基金历任基金经理信息的例子,有了这个之后,你对不同的基金调用多次,后续即可做个统计,知道任意时期任意基金经理管理哪些基金。

import pandas as pd
import requests

headers = {
    'User-Agent': 'EMProjJijin/6.2.8 (iPhone; iOS 13.6; Scale/2.00)',
    'GTOKEN': '98B423068C1F4DEF9842F82ADF08C5db',
    'clientInfo': 'ttjj-iPhone10,1-iOS-iOS13.6',
    'Content-Type': 'application/x-www-form-urlencoded',
    # 'Host': 'fundmobapi.eastmoney.com',
    'Referer': 'https://mpservice.com/516939c37bdb4ba2b1138c50cf69a2e1/release/pages/FundHistoryNetWorth',
}

def get_history_manager_list(fund_code: str)->pd.DataFrame:

    params = (
        ('AppVersion', '6.3.8'),
        ('FCODE', fund_code),
        ('deviceid', '3EA024C2-7F22-408B-95E4-383D38160FB3'),
        ('plat', 'Iphone'),
        ('product', 'EFund'),
        ('version', '6.3.6'),
    )

    response = requests.get(
        'https://fundmobapi.eastmoney.com/FundMNewApi/FundMNMangerList', headers=headers, params=params)
    columns = {
        'FCODE': '基金代码',
        'MGRNAME': '基金经理',
        'MGRID': '基金经理ID',
        'DAYS': '任职天数',
        'FEMPDATE': '开始日期',
        'PENAVGROWTH': '结束日期',
        'PENAVGROWTH': '任职期间收益率'
    }
    df = pd.DataFrame(response.json()['Datas'])
    df = df[list(columns.keys())].rename(columns=columns)
    df['任职天数'] = df['任职天数'].apply(lambda x: int(float(x)))
    return df

df = get_history_manager_list('161725')
df

image

haomes commented 2 years ago

大佬,我刚刚跑了一下您这部分的代码,发现会报错:“NameError: name 'headers' is not defined”,请问?

Micro-sheep commented 2 years ago

大佬,我刚刚跑了一下您这部分的代码,发现会报错:“NameError: name 'headers' is not defined”,请问?

少加了点东西,刚刚更新了,你再试试。

haomes commented 2 years ago

感谢感谢,我再去试试,谢谢大佬的代码!