
    fi                     0   d Z ddlZddlZddlZ	 	 	 	 	 ddej        fd	Z	 ddededej        fdZ	dej        dej        fdZ
edk    rM e	d
d          Z e
e          Z ee            eddddd          Z e
e          Z ee           dS dS )u   
Yang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python
https://github.com/hugogobato/Yang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python
论文地址：https://www.jstor.org/stable/10.1086/209650
    N0000012021-10-20 09:30:002024-11-01 15:00:001hfqreturnc                     ddl m}  || ||||          }|                    dddddd	d
           ||d         dk             }t          j        |d                   |d<   |                    dd
           |S )u  
    从东方财富网获取股票的分钟级历史行情数据,并进行数据清洗和格式化为计算 yz 已实现波动率所需的数据格式
    https://quote.eastmoney.com/concept/sh603777.html?from=classic
    :param symbol: 股票代码,如"000001"
    :type symbol: str
    :param start_date: 开始日期时间,格式"YYYY-MM-DD HH:MM:SS"
    :type start_date: str
    :param end_date: 结束日期时间,格式"YYYY-MM-DD HH:MM:SS"
    :type end_date: str
    :param period: 时间周期,可选{'1','5','15','30','60'}分钟
    :type period: str
    :param adjust: 复权方式,可选{'','qfq'(前复权),'hfq'(后复权)}
    :type adjust: str
    :return: 整理后的分钟行情数据,包含Date(索引),Open,High,Low,Close列
    :rtype: pandas.DataFrame
    r   )stock_zh_a_hist_min_emsymbol
start_dateend_dateperiodadjustDateOpenHighLowClose)u   时间u   开盘u   最高u   最低u   收盘Tcolumnsinplacekeysr   )#akshare.stock_feature.stock_hist_emr
   renamepdto_datetime	set_index)r   r   r   r   r   r
   temp_dfs          9/usr/local/lib/python3.11/dist-packages/akshare/cal/rv.pyrv_from_stock_zh_a_hist_min_emr"      s    . KJJJJJ$$  G NN
 
   	 	 	 gfo*+GnWV_55GFO64000N    IF20085r   r   c                     ddl m}  || |          }|                    dddddd	d
           t          j        |d                   |d<   |                    dd
           |S )u  
    从新浪财经获取期货的分钟级历史行情数据,并进行数据清洗和格式化
    https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_3
    :param symbol: 期货合约代码,如"IF2008"代表沪深300期货2020年8月合约
    :type symbol: str
    :param period: 时间周期,可选{'1','5','15','30','60'}分钟
    :type period: str
    :return: 整理后的分钟行情数据,包含Date(索引),Open,High,Low,Close列
    :rtype: pandas.DataFrame
    r   )futures_zh_minute_sinar   r   r   r   r   r   r   )datetimeopenhighlowcloseTr   r   )akshare.futures.futures_zh_sinar'   r   r   r   r   )r   r   r'   r    s       r!   rv_from_futures_zh_minute_sinar/   =   s     GFFFFF$$F6BBBGNN
 
   	 	 	 nWV_55GFO64000Nr#   datac           
         t          j        d           t          j        t          j        | d         dd         | d         dd                             | d<   t          j        t          j        | d         dd         | d         dd                             | d<   t          j        t          j        | d	         dd         | d         dd                             | d
<   t          j        t          j        | d         dd         | d         dt          |           dz
                               | d<   | dd         } | d         | d         | d         z
  z  | d
         | d
         | d         z
  z  z   | d<   | d                             t          j        d                    	                                
                                }| ddg                             t          j        d                                                    
                                }t          t          |           t          |          z            }dd|dz   |dz
  z  z   z  }t          j        d|z
  |z  |d         z   |d         |z  z             }t          j        |          }|                    ddid           |                    d           ddg|_        t          j        |d         d          j        j        |d<   |S )u"  
    波动率-已实现波动率-Yang-Zhang 已实现波动率(Yang-Zhang Realized Volatility)
    https://github.com/hugogobato/Yang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python
    论文地址：https://www.jstor.org/stable/10.1086/209650
    基于以下公式计算:
    RV^2 = Vo + k*Vc + (1-k)*Vrs
    其中:
    - Vo: 隔夜波动率, Vo = 1/(n-1)*sum(Oi-Obar)^2
        Oi为标准化开盘价, Obar为标准化开盘价均值
    - Vc: 收盘波动率, Vc = 1/(n-1)*sum(ci-Cbar)^2
        ci为标准化收盘价, Cbar为标准化收盘价均值
    - k: 权重系数, k = 0.34/(1.34+(n+1)/(n-1))
        n为样本数量
    - Vrs: Rogers-Satchell波动率代理, Vrs = ui(ui-ci)+di(di-ci)
        ui = ln(Hi/Oi), ci = ln(Ci/Oi), di = ln(Li/Oi), oi = ln(Oi/Ci-1)
        Hi/Li/Ci/Oi分别为最高价/最低价/收盘价/开盘价

    :param data: 包含 OHLC(开高低收) 价格的 pandas.DataFrame
    :type data: pandas.DataFrame
    :return: 包含 Yang-Zhang 实现波动率的 pandas.DataFrame
    :rtype: pandas.DataFrame

    要求输入数据包含以下列:
    - Open: 开盘价
    - High: 最高价
    - Low: 最低价
    - Close: 收盘价
    # yang_zhang_rv formula is give as:
    # RV^2 = Vo + k*Vc + (1-k)*Vrs
    # where Vo = 1/(n-1)*sum(Oi-Obar)^2
    # with oi = normalized opening price at time t and Obar = mean of normalized opening prices
    # Vc = = 1/(n-1)*sum(ci-Cbar)^2
    # with ci = normalized close price at time t and Cbar = mean of normalized close prices
    # k = 0.34/(1.34+(n+1)/(n-1))
    # with n = total number of days or time periods considered
    # Vrs (Rogers & Satchell RV proxy) = ui(ui-ci)+di(di-ci)
    # with ui = ln(Hi/Oi), ci = ln(Ci/Oi), di=(Li/Oi), oi = ln(Oi/Ci-1)
    # where Hi = high price at time t and Li = low price at time t
    ignorer      Nr   uir   cir   dioiRS1D)freqg(\?gq=
ףp?r   yz_rvTr   )r   datervcoerce)errors)warningsfilterwarningsnplogdividelengroupbyr   Groupermeandropnavarintsqrt	DataFramer   reset_indexr   r   dtr<   )r0   rs_var	vc_and_vonkyang_zhang_rvyang_zhang_rv_dfs          r!   volatility_yz_rvrV   \   s   V H%%%	$v,qrr"2DL4DEEFFDJ	$w-"3T&\!""5EFFGGDJ	$u+abb/4<3CDDEEDJ	$v,qrr"2DM/CIIPQM/4RSSTTDJ8DdtDzDJ67$t*T
T$Z; DJ $Z
 5 5 566;;==DDFFFdD\"**2:4+@+@+@AAEEGGNNPPICIIF#$$AA!a%(()AGQUf,y>4STATTUUM|M22QL$???   ... &~!~       V r#   __main__r(   )r0    r   )r   r   r   r   r   )r$   r%   )__doc__r@   numpyrB   pandasr   rM   r"   strr/   rV   __name__
futures_dfvolatility_yz_rv_dfprintstock_df r#   r!   <module>rc      sp             $"- - \- - - -b +. $'\   >A2< ABL A A A AH z//xLLLJ**
;;;	E
--(&  H +*999	E
 r#   