
    fi                     L   d 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
 ddlmZmZ  ej                    ZddZ	 	 	 	 	 ddededededef
dZedk    rL edd	dd          Z ee            edd          Z ee            edd          Z ee           dS dS )u   
Date: 2025/7/16 17:40
Desc: 中国期货各合约展期收益率
日线数据从 daily_bar 函数获取, 需要在收盘后运行
    N)cons)get_futures_daily)symbol_marketsymbol_varietiesBBc                    | t          j        |           nt          j                                        } |                     d          t          vr,t          j        d|                     d          z             dS |rt          |          }t          |t          j                  s!t          |          }t          | | |          }|r||d         j                            d                    }||d         |k                                 dgd	
          }t          j        |d                   |d<   t'          |d                   dk     rdS |d                                         d         }|d                                         d         }|d         |d         |k                                             d         }|d         |d         |k                                             d         }t+          j        dd|          }t/          |dd                   }	t/          |dd                   }
t+          j        dd|          }t/          |dd                   }t/          |dd                   }|	|z
  dz  |
|z
  z   }|dk    s|dk    rd	S |dk    r t1          j        ||z            |z  dz  ||fS t1          j        ||z            |z  dz  ||fS )u  
    指定交易日指定品种（主力和次主力）或任意两个合约的展期收益率
    Parameters
    ------
    date: string 某一天日期 format： YYYYMMDD
    var: string 合约品种如 RB、AL 等
    symbol1: string 合约 1 如 rb1810
    symbol2: string 合约 2 如 rb1812
    df: DataFrame或None 从dailyBar得到合约价格，如果为空就在函数内部抓dailyBar，直接喂给数据可以让计算加快
    Nz%Y%m%du   %s非交易日
start_dateend_datemarketsymbolefpvarietyopen_interestF)by	ascendingclose   r      z\D    )r   convert_datedatetimedatetodaystrftimecalendarwarningswarnr   
isinstancepd	DataFramer   r   strcontainssort_values
to_numericlentolistresubintmathlog)r   varsymbol1symbol2dfr   close1close2aa_1a_2bb_1b_2cs                  M/usr/local/lib/python3.11/dist-packages/akshare/futures/futures_roll_yield.pyget_roll_yieldr=      s    '+&64T"""HM<O<O<Q<QD}}Xh..&x)@)@@AAAt (w''b",'' Ns##$fMMM
 
+\&&u---
 9$%11o5FRW1XXmBwK007r'{a4X,%%''*X,%%''*[H0188::1=F[H0188::1=F
ub'""A
af++C
af++C
ub'""A
af++C
af++C	sbC#I&A{{fkku1uux((1,r17GCCx((1,r17GCC    r/   RB20201030type_methodr   	start_dayend_dayc           
          |t          j        |          nt          j                                        }|t          j        |          nt          j                                        }|t          j        |          nAt          j        t          j        t          j                                                            }| dk    r3t          ||t          |                    }||d         |k             }|S | dk    rt          j
                    }dD ](}t          j        |t          |||          g          })t          t          |d                             }dD ]}||v r|                    |           t          j
                    }	|D ]E}t          |||          }
|
r/t          j        |	t          j
        |
g|gg d	
          g          }	F||	d<   |	                    d          }	|	S | dk    rt          j
                    }	||k    rh	 t          ||          }
|
r/t          j        |	t          j
        |
g|gg d	
          g          }	n#  Y nxY w|t          j        d          z  }||k    h|	S dS )u  
    展期收益率
    :param type_method: 'symbol': 获取指定交易日指定品种所有交割月合约的收盘价; 'var': 获取指定交易日所有品种两个主力合约的展期收益率(展期收益率横截面); 'date': 获取指定品种每天的两个主力合约的展期收益率(展期收益率时间序列)
    :param var: 合约品种如 "RB", "AL" 等
    :param date: 指定交易日 format： YYYYMMDD
    :param start_day: 开始日期 format：YYYYMMDD
    :param end_day: 结束日期 format：YYYYMMDD
    :return: pandas.DataFrame
    展期收益率数据(DataFrame)
    ry      展期收益率
    index   日期或品种
    Nr   r	   r   r/   )dcecffexshfeczcegfex)IOMOHO)r2   )
roll_yieldnear_bydeferred)indexcolumnsr   rM   r   )days)r   r   r   r   r   get_latest_data_datenowr   r   r"   r#   concatlistsetremover=   r&   	timedelta)rA   r/   r   rB   rC   r2   r   var_listi_removedf_lrys              r<   get_roll_yield_barr^   J   s   & '+&64T"""HM<O<O<Q<QD(1(=)$$$8=CVCVCXCX 
  	'"""t89J9N9N9P9PQQRR  hd=3E3E
 
 
 9$%	e\^^> 	 	F%VTTT BB ByM**++* 	* 	*H8##)))|~~ 	 	Ccb111B 
yD#&%$I$I$I  	 	 V--f|~~7""#Is33 
9 L!#'0k(M(M(M  	 	D+3333I! 7""" ' s   AI I__main__2023080120230810)rA   r/   rB   rC   20191008)rA   r   20210201)Nr   NNN)r/   r?   r@   NN)__doc__r   r*   r   r-   pandasr"   akshare.futuresr   !akshare.futures.futures_daily_barr   akshare.futures.symbol_varr   r   get_calendarr   r=   r$   r^   __name__get_roll_yield_bar_range_dfprintget_roll_yield_bar_symbol r>   r<   <module>ro      s     				                   ? ? ? ? ? ? F F F F F F F F40D 0D 0D 0Dh V VV	V V 	V
 V V V Vr z"4"4	# # # 
E
%&&&"4"4# # # 
E
%&&& 2 2u: V V V	E
#$$$$$! r>   