o
    i:                     @   s   d Z ddlmZ ddlZddlZddlZddlZddlZ	ddl
mZ ddlmZ z
ddlmZmZ W n eyC   ddlmZmZ Y nw d dd	Zd!d
dZd!ddZd"ddZdd Zd#ddZdd Zd$ddZd%ddZdS )&uq   
获取基金净值数据接口 
Created on 2016/04/03
@author: leo
@group : lazytech
@contact: lazytech@sina.cn
    )divisionN)cons)dateu)urlopenRequestallc                 C   s   t | du rdt   tt jt jd t jd t j|  t j|  t j	|  t j
f }d}t|| d }g }td|d D ]!}tt jt jd t jd t j|  t j|  ||t j	|  t j
f }q;tj|ddS dS )u  
        获取开放型基金净值数据
    Parameters
    ------
        type:string
            开放基金类型:
                1. all 		所有开放基金
                2. equity	股票型开放基金
                3. mix 		混合型开放基金
                4. bond		债券型开放基金
                5. monetary	货币型开放基金
                6. qdii		QDII型开放基金
     return
     -------
        DataFrame
            开放型基金净值数据(DataFrame):
                symbol      基金代码
                sname       基金名称
                per_nav     单位净值
                total_nav   累计净值
                yesterday_nav  前一日净值
                nav_a       涨跌额
                nav_rate    增长率(%)
                nav_date    净值日期
                fund_manager 基金经理
                jjlx        基金类型
                jjzfe       基金总份额
    Thttpvsf      )ignore_indexN)ct_check_nav_oft_input_write_head_get_fund_numSINA_NAV_COUNT_URLP_TYPEDOMAINSNAV_OPEN_KEYNAV_OPEN_APINAV_OPEN_T2NAV_OPEN_T3intrange_parse_fund_dataSINA_NAV_DATA_URLpdconcat)	fund_typenumspages	limit_cntfund_dfspage r$   C/opt/alphahud/venv/lib/python3.10/site-packages/tushare/fund/nav.pyget_nav_open   s4   	r&   c                 C   s   t   tt jt jd t jd t jt jt j|  t j	| f }t
t jt jd t jd t jt jt j|t j|  t j	| f d}|S )uC  
        获取封闭型基金净值数据
    Parameters
    ------
        type:string
            封闭基金类型:
                1. all      所有封闭型基金
                2. fbqy     封闭-权益
                3. fbzq     封闭债券

        sub_type:string
            基金子类型:

                1. type=all sub_type无效
                2. type=fbqy 封闭-权益
                    *all    全部封闭权益
                    *ct     传统封基
                    *cx     创新封基

                3. type=fbzq  封闭债券
                    *all    全部封闭债券
                    *wj     稳健债券型
                    *jj     激进债券型
                    *cz     纯债债券型
     return
     -------
        DataFrame
            开放型基金净值数据(DataFrame):
                symbol      基金代码
                sname       基金名称
                per_nav     单位净值
                total_nav   累计净值
                nav_rate    增长率(%)
                discount_rate 折溢价率(%)
                nav_date    净值日期
                start_date  成立日期
                end_date    到期日期
                fund_manager 基金经理
                jjlx        基金类型
                jjzfe       基金总份额
    r   r	   close)r   r   r   r   r   r   NAV_CLOSE_KEYNAV_CLOSE_APINAV_CLOSE_T2NAV_CLOSE_T3r   r   r   NAV_DEFAULT_PAGEr   sub_typer   fund_dfr$   r$   r%   get_nav_closeO   s(   *r0   c                 C   s   t   tt jt jd t jd t jt jt j|  t j	| f }t
t jt jd t jd t jt jt j|t j|  t j	| f d}|S )u  
        获取分级子基金净值数据
    Parameters
    ------
        type:string
            封闭基金类型:
                1. all      所有分级基金
                2. fjgs     分级-固收
                3. fjgg     分级-杠杆

        sub_type:string
            基金子类型(type=all sub_type无效):
                *all    全部分级债券
                *wjzq   稳健债券型
                *czzq   纯债债券型
                *jjzq   激进债券型
                *gp     股票型
                *zs     指数型
     return
     -------
        DataFrame
            开放型基金净值数据(DataFrame):
                symbol      基金代码
                sname       基金名称
                per_nav     单位净值
                total_nav   累计净值
                nav_rate    增长率(%)
                discount_rate 折溢价率(%)
                nav_date    净值日期
                start_date  成立日期
                end_date    到期日期
                fund_manager 基金经理
                jjlx        基金类型
                jjzfe       基金总份额
    r   r	   grading)r   r   r   r   r   r   NAV_GRADING_KEYNAV_GRADING_APINAV_GRADING_T2NAV_GRADING_T3r   r   r,   r-   r$   r$   r%   get_nav_grading   s(   $r6      MbP?
   c              	   C   s   |du rt  n|}|du rt  n|}d}t| }|jd d }|ddks/|ddkr1d}t  t| |||}	t	| |||	||||}
|
S )	u  
    获取历史净值数据
    Parameters
    ------
      code:string
                  基金代码 e.g. 000001
      start:string
                  开始日期 format：YYYY-MM-DD 为空时取当前日期
      end:string
                  结束日期 format：YYYY-MM-DD 为空时取去年今日
      retry_count : int, 默认 3
                 如遇网络等问题重复执行的次数
      pause : int, 默认 0
                重复请求数据过程中暂停的秒数，防止请求间隔时间太短出现的问题
      timeout: int 默认 10s
                请求大量数据时的网络超时
    return
    -------
      DataFrame
          date 发布日期 (index)
          value 基金净值(股票/混合/QDII型基金) / 年华收益(货币/债券基金)
          total 累计净值(股票/混合/QDII型基金) / 万分收益(货币/债券基金)
          change 净值增长率(股票/混合/QDII型基金)
    NFr   	Type2Nameu	   债券型u	   货币型T)
dutoday_last_yeartodayget_fund_infolocfindr   r   _get_nav_histroy_num_parse_nav_history_data)codestartendretry_countpausetimeout
ismonetarydf_fundr   r   datar$   r$   r%   get_nav_history   s   rM   c                 C   s   t jt jd t jd | f }t|dd }|d}t|}t	|d d d }|d	kr<t
|d d d
 }t||d d }tj|t jd	gd}|d}|S )u  
    获取基金基本信息
    Parameters
    ------
      code:string
                  基金代码 e.g. 000001
    return
    -------
      DataFrame
          jjqc      基金全称
          jjjc      基金简称
          symbol    基金代码
          clrq      成立日期
          ssrq      上市日期
          xcr       存续期限
          ssdd      上市地点
          Type1Name 运作方式
          Type2Name 基金类型
          Type3Name 二级分类
          jjgm      基金规模(亿元)
          jjfe      基金总份额(亿份)
          jjltfe    上市流通份额(亿份)
          jjferq    基金份额日期
          quarter   上市季度
          glr       基金管理人
          tgr       基金托管人
    r   ssfr9   rI   gbkresultstatusrD   r   msgrL   )columnsindexsymbol)r   SINA_FUND_INFO_URLr   r   r   readdecodejsonloadsr   str
ValueErrorr   	DataFrameFUND_INFO_COLS	set_index)rD   requesttextorg_jsstatus_coderR   rL   r/   r$   r$   r%   r?      s   


r?   openc           	   
   C   s  t   zpt| }t|dd }|dkrW d S t jr |dn|}|dd dd }t	d	}|
d
|}|dd}|dd}t jrNt|}ntj|dd}t|}tjtj|dtidt j| d}|jddd |W S  ty } ztt| W Y d }~d S d }~ww )Nr9   rO   nullrP   zdata:r   z
,exec_timer   	\,(.*?)\:,"\1":z"{symbolz{"symbolz{symbolz	{"symbol")encodingrV   )dtyperT   T)inplace)r   _write_consoler   r   rX   PY3rY   splitrecompilesubreplacerZ   dumpsr[   r   r^   	read_jsonobjectNAV_COLUMNSfillna	Exceptionprintr\   )	urlr   ra   rb   regjstrrc   r/   err$   r$   r%   r     s2   

r   c              
   C   s   t   zJt| }t|dd }|d}|dkrtd|dd dd	 }t	d
}|
d|}|dd}|dd}t|}|d }t|W S  tyg } ztt| W Y d}~dS d}~ww )u    
        获取基金数量
    r9   rO   rP   rf   zget fund num errorz((r   z))r   rg   rh   z
{total_numz{"total_num"0	total_numN)r   rm   r   r   rX   rY   r]   ro   rp   rq   rr   rs   rZ   r[   r   ry   rz   r\   )r{   ra   rb   r|   rc   r   r~   r$   r$   r%   r   6  s&   



r   Fc           
      C   s   t   |rtt jt jd t jd | ||f }ntt jt jd t jd | ||f }t|dd }|	d}t
|}t|d d d }|d	krYt|d d d
 }t||d d d }	t|	S )u   
        获取基金历史净值数量

    --------
        货币和证券型基金采用的url不同，需要增加基金类型判断
    r   rN   r9   rO   rP   rQ   rR   rD   r   rS   rL   r   )r   rm   r   SINA_NAV_HISTROY_COUNT_CUR_URLr   r   SINA_NAV_HISTROY_COUNT_URLr   rX   rY   rZ   r[   r   r\   r]   )
rD   rE   rF   rJ   ra   rb   rc   rd   rR   r   r$   r$   r%   rB   O  s*   

rB   {Gz?c              	   C   s  |dkrd S t |D ]}t| t  |r+ttjtjd tjd | |||f }	nttj	tjd tjd | |||f }	t
|	|d }
|
d}
t|
}t|d d d }|dkrlt|d d d	 }t||d d
 d
 }d|d  v rtj|tjd}|d t|d< |d t|d< |jtjdd n"tj|tjd}|d t|d< |d t|d< |jtjdd |d jtjkrt|d |d< | d}|j!dd}|d "d|d< |d |d  d d |d< |j#ddd}|  S t$tj%)Nr   r   rN   rO   rP   rQ   rR   rD   rS   rL   jjjzrk   ljjzT)rT   rl   nhsyldwsydateF)	ascendingvaluer;   	pre_valuer   d   change)axis)&r   timesleepr   rm   r   SINA_NAV_HISTROY_DATA_CUR_URLr   r   SINA_NAV_HISTROY_DATA_URLr   rX   rY   rZ   r[   r   r\   r]   keysr   r^   NAV_HIS_JJJZastypefloatrenameDICT_NAV_EQUITYNAV_HIS_NHSYDICT_NAV_MONETARYdtypesnprv   to_datetimer`   
sort_indexshiftdropIOErrorNETWORK_URL_ERROR_MSG)rD   rE   rF   r   rJ   rG   rH   rI   _ra   rb   rc   rd   rR   rL   r/   r$   r$   r%   rC   n  sT   




rC   )r   )r   r   )NNr7   r8   r9   )re   )F)Fr7   r   r9   )__doc__
__future__r   r   rZ   rp   pandasr   numpyr   tushare.fundr   r   tushare.utilr   r<   urllib.requestr   r   ImportErrorurllib2r&   r0   r6   rM   r?   r   r   rB   rC   r$   r$   r$   r%   <module>   s.   

6
<
6+
-
