
    fi              	          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ZddlmZ ddlm	Z	 ddl
ZddlZddlmZ ddlmZ ddlmZ ddlmZ  ej                    Zg d	Zg d
Zddej        fdededefdZdej        fdedefdZdej        fdededefdZd>dZ d?dedefdZ!d Z"dej        fdedefdZ#dej        fdefdZ$d Z%dej        fdedefd Z&d@defd"Z'defd#Z(dAd&ededefd'Z)	 dBd&ed*ededej*        fd+Z+dCdedefd,Z,e-d-k    r0 e!d./          Z. e/e.            e!d0/          Z. e/e.            e$d1/          Z0 e/e0            ed2/          Z1 e/e1            e#d3/          Z2 e/e2            e#d4/          Z3 e/e3            e#d5/          Z4 e/e4            e#d/          Z4 e/e4            e#d6d7g8          Z5 e/e5            e&d9/          Z6 e/e6            e'd:/          Z7 e/e7            e,d;/          Z8 e/e8            ed<d=          Z9 e/e9           dS dS )Duo  
Date: 2025/7/21 15:00
Desc: 期货-中国-交易所-会员持仓数据接口
大连商品交易所、上海期货交易所、郑州商品交易所、中国金融期货交易所、广州期货交易所
采集前 20 会员持仓数据;
建议下午 16:30 以后采集当天数据, 避免交易所数据更新不稳定;
郑州商品交易所格式分为三类
大连商品交易所有具体合约的持仓排名, 通过 futures_dce_position_rank 获取
20171228
http://www.czce.com.cn/cn/DFSStaticFiles/Future/2020/20200727/FutureDataHolding.txt
20100825
http://www.czce.com.cn/cn/exchange/2014/datatradeholding/20140515.txt
    N)BytesIO)StringIO)BeautifulSoup)cons)requests_linksymbol_varieties)	vol_party_namevolvol_chglong_party_namelong_open_interestlong_open_interest_chgshort_party_nameshort_open_interestshort_open_interest_chg)r   r   r   r   r   r   20210510	start_dayend_day	vars_listc                 .   | t          j        |           nt          j                                        } |t          j        |          nAt          j        t          j        t          j                                                            }t          j                    }| |k    rt          |            | 
                    d          t          v rht          | |          }|du r;t          | 
                    d           d           |                    d          S t          j        ||gd          }n*t          j        | 
                    d           d	           | t          j        d
          z  } | |k    |                    d          S )u@  
    采集四个期货交易所前 5、前 10、前 15、前 20 会员持仓排名数据
    注1：由于上期所和中金所只公布每个品种内部的标的排名，没有公布品种的总排名;
        所以函数输出的品种排名是由品种中的每个标的加总获得，并不是真实的品种排名列表
    注2：大商所只公布了品种排名，未公布标的排名
    :param start_day: 开始日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天
    :type start_day: str
    :param end_day: 结束数据 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天
    :type end_day: str
    :param vars_list: 合约品种如 ['RB'、'AL'] 等列表为空时为所有商品
    :type vars_list: list
    :return:  会员持仓排名数据
    :rtype: pandas.DataFrame
    symbol                           标的合约                     string
    var                              商品品种                     string
    vol_top5                         成交量前5会员成交量总和         int
    vol_chg_top5                     成交量前5会员成交量变化总和      int
    long_open_interest_top5          持多单前5会员持多单总和         int
    long_open_interest_chg_top5      持多单前5会员持多单变化总和      int
    short_open_interest_top5         持空单前5会员持空单总和         int
    short_open_interest_chg_top5     持空单前5会员持空单变化总和      int
    vol_top10                        成交量前10会员成交量总和        int
    N%Y%m%dFz%Y-%m-%du   日交易所数据连接失败，已超过20次，您的地址被网站墙了，请保存好返回数据，稍后从该日期起重试Tdrop)objsignore_indexu   非交易日   )days)r   convert_datedatetimedatetodayget_latest_data_datenowpd	DataFrameprintstrftimecalendarget_rank_sumreset_indexconcatwarningswarn	timedelta)r   r   r   recordsdatas        >/usr/local/lib/python3.11/dist-packages/akshare/futures/cot.pyget_rank_sum_dailyr3   8   s   : )2(=)$$$8=CVCVCXCX 
  	'"""t89J9N9N9P9PQQRR 
 lnnG
w

ih''833	955Du}} ))*55  ~  ~  ~   ***555igt_4HHHGGMY//99GGGHHHX'Q////	 w

 D)))    20210525r!   c                    | t          j        |           nt          j                                        } |                     d          t          vr,t          j        d|                     d          z             dS d |D             }d |D             }d |D             }d |D             }d |D             }i }t          |          d	k    r+t          | |          }|d
u rd
S |                    |           t          |          d	k    r+t          | |          }|d
u rd
S |                    |           t          |          d	k    r*t          |           }|d
u rd
S |                    |           t          |          d	k    r+t          | |          }|d
u rd
S |                    |           t          |          d	k    r+t          | |          }|d
u rd
S |                    |           t!          j                    |                                D ]\  }	}
|
                    d           }
t)          |
d                   D ]}t+          |          }||v rl||v r.d |
j        D             ddgz   D ]}d |
|         D             |
|<   |
|
d         |k             }|d                             d          |d<   ||d         dk             }||d         dk             }||d         dk             }||d         dk             }i d|d|d|d                                         d|d                                         d|d                                         d|d                                         d|d                                         d |d!                                         d"|d                                         d#|d                                         d$|d                                         d%|d                                         d&|d                                         d'|d!                                         d(|d                                         d)|d                                         d*|d                                         |d                                         |d                                         |d!                                         |d                                         |d                                         |d                                         |d                                         |d                                         |d!                                         |                     d          d+
}t!          j        t!          j        |d	g,          gd-.          t          |                                          d	k    rƈfd/t           j        d0         t           j        d1         z   t           j        d2         z   D             }|D ]}d         |k             }t!          j        |                                          j        }|                     d          |d3<   ||j        ddddgf<   t!          j        |gd-.                              d-4          S )5u  
    采集五个期货交易所前5、前10、前15、前20会员持仓排名数据
    注1：由于上期所和中金所只公布每个品种内部的标的排名, 没有公布品种的总排名;
        所以函数输出的品种排名是由品种中的每个标的加总获得, 并不是真实的品种排名列表
    注2：大商所只公布了品种排名, 未公布标的排名
    :param date: 日期 format: YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天
    :type date: date
    :param vars_list: 合约品种如 ['RB', 'AL'] 等列表为空时为所有商品
    :type vars_list: list
    :return: 持仓排名数据
    :rtype: pandas.DataFrame
    symbol                           标的合约                     string
    var                              商品品种                     string
    vol_top5                         成交量前5会员成交量总和         int
    vol_chg_top5                     成交量前5会员成交量变化总和      int
    long_open_interest_top5          持多单前5会员持多单总和         int
    long_open_interest_chg_top5      持多单前5会员持多单变化总和      int
    short_open_interest_top5         持空单前5会员持空单总和         int
    short_open_interest_chg_top5     持空单前5会员持空单变化总和      int
    vol_top10                        成交量前10会员成交量总和        int
    Nr      %s非交易日c                 :    g | ]}|t           j        d          v |S dcer   market_exchange_symbols.0is     r2   
<listcomp>z get_rank_sum.<locals>.<listcomp>   s*    PPPQqD,H,O'O'Oq'O'O'Or4   c                 :    g | ]}|t           j        d          v |S )shfer;   r=   s     r2   r@   z get_rank_sum.<locals>.<listcomp>   *    RRRaT-I&-Q(Q(Q(Q(Q(Qr4   c                 :    g | ]}|t           j        d          v |S )czcer;   r=   s     r2   r@   z get_rank_sum.<locals>.<listcomp>   rC   r4   c                 :    g | ]}|t           j        d          v |S cffexr;   r=   s     r2   r@   z get_rank_sum.<locals>.<listcomp>   *    TTTqd.J7.S)S)S)S)S)Sr4   c                 :    g | ]}|t           j        d          v |S )gfexr;   r=   s     r2   r@   z get_rank_sum.<locals>.<listcomp>   rC   r4   r   Fc                     | dk    rdn| S )N r    xs    r2   <lambda>zget_rank_sum.<locals>.<lambda>   s    bAAa r4   symbolc                 D    g | ]}|                     d           dk    |S )open_interest)findr>   items     r2   r@   z get_rank_sum.<locals>.<listcomp>   s9           99_55:: :::r4   r   r   c                 d    g | ]-}|d k    r#t          |                    dd                    nd.S )-,rM   g        )floatreplace)r>   values     r2   r@   z get_rank_sum.<locals>.<listcomp>   sL     & & & % >Cc\\E%--R"8"8999s& & &r4   rankr\      
         varietyvol_top5vol_chg_top5long_open_interest_top5r   long_open_interest_chg_top5r   short_open_interest_top5r   short_open_interest_chg_top5r   	vol_top10vol_chg_top10long_open_interest_top10long_open_interest_chg_top10short_open_interest_top10short_open_interest_chg_top10	vol_top15vol_chg_top15long_open_interest_top15)
long_open_interest_chg_top15short_open_interest_top15short_open_interest_chg_top15	vol_top20vol_chg_top20long_open_interest_top20long_open_interest_chg_top20short_open_interest_top20short_open_interest_chg_top20r!   )indexT)r   c                 L    g | ] }|d                                           v |!S rd   tolist)r>   r?   r0   s     r2   r@   z get_rank_sum.<locals>.<listcomp>  sC     
 
 
 GI&--////	  0//r4   r:   rB   rH   r!   r   )r   r   r    r!   r"   r(   r)   r-   r.   lenfutures_dce_position_rankupdateget_shfe_rank_tableget_rank_table_czceget_cffex_rank_tablefutures_gfex_position_rankr%   r&   itemsmapsetr	   columnsastypesumr,   r<   Tlocr+   )r!   r   dce_varshfe_varczce_var	cffex_vargfex_varbig_dictr1   rR   tablesymbol_innervarcol	table_cuttable_cut_top5table_cut_top10table_cut_top15table_cut_top20add_varsrecords_cut
var_recordr0   s                         @r2   r*   r*   n   sg   , '+&64T"""HM<O<O<Q<QD}}Xh..&x)@)@@AAAtPP)PPPGRR9RRRHRR9RRRHTTITTTIRR9RRRHH
7||a(w775==5
8}}q"4225==5
8}}q"4((5==5
9~~#D)445==5
8}}q)$995==5lnnG!)) V V		7788h00 T	 T	L"<00Ci(??   $)M      	*	 +  
& &).s& & &c


 "%/\"AB	$-f$5$<$<W$E$E	&!!*9V+<+A!B"+If,=,C"D"+If,=,C"D"+If,=,C"D<l<s< u 5 9 9 ; ;< #N9$=$A$A$C$C	<
 .~,0cee< 2>04cee< /-1cee< 3N15cee!<"  !7!;!;!=!=#<$ $_Y%?%C%C%E%E%<& /,1cee+<, 3O05cee1<2 0-2cee7<8 4_16cee=<>  !7!;!;!=!=?<@ $_Y%?%C%C%E%EA<B /,1ceeG<H 5D05cee1@-2cee5D16cee!0!7!;!;!=!=%4Y%?%C%C%E%E0?,1cee4C05cee1@-2cee5D16cee MM(33w< < <z )bl8A3???@t  eT	l 8>>q  
 
 
 
1%8*623*734
 
 
  	J 	JC!')"4";<Kkoo&7&788:J!%x!8!8Jv7:JN111y(334i* 5DIIIGGD)))r4   returnc                    | t          j        |           nt          j                                        } | t          j        ddd          k     rt          d           i S |                     d          t          vr,t          j	        d|                     d          z             i S t           j
        |                     d          z  }t          |d	t           j        
          }	 t          j        |j                  }n	#  i cY S xY wt!          j        |d                                       dddddddddddddd          t'          j                  dk     ri S                     d                               d           d                             d           d<   d         d k             d!D ]}	 |= #  Y xY wfd"|D             }i }|D ]}d         |k             }	t/          |	d                   D ]a}
|	|	d         |
k                                             }|d         j                                        |d<   |                    d#$          ||
<   b|S )%u  
    上海期货交易所会员成交及持仓排名表
    https://www.shfe.com.cn/
    https://tsite.shfe.com.cn/statements/dataview.html?paramid=kx
    注：该交易所只公布每个品种内部的标的排名，没有公布品种的总排名
    数据从 20020107 开始，每交易日 16:30 左右更新数据
    :param date: 交易日
    :type date: str
    :param vars_list: 合约品种如 RB、AL等列表; 为空时为所有商品
    :type vars_list: list
    :return: 上海期货交易所会员成交及持仓排名表
    :rtype: dict
    rank                        排名                        int
    vol_party_name              成交量排序的当前名次会员        string(中文)
    vol                         该会员成交量                  int
    vol_chg                     该会员成交量变化量             int
    long_party_name             持多单排序的当前名次会员        string(中文)
    long_open_interest          该会员持多单                  int
    long_open_interest_chg      该会员持多单变化量             int
    short_party_name            持空单排序的当前名次会员        string(中文)
    short_open_interest         该会员持空单                  int
    short_open_interest_chg     该会员持空单变化量             int
    symbol                      标的合约                     string
    var                         品种                        string
    date                        日期                        string YYYYMMDD
    Ni  r      yearmonthdayu.   shfe数据源开始日期为 20020107，跳过r   r7   utf-8)encodingheaderso_cursorr   r   r   r   r   r   r
   r   r   product1r_   rR   product2)CJ1CJ1_CHGCJ2CJ2_CHGCJ3CJ3_CHGPARTICIPANTABBR1PARTICIPANTABBR2PARTICIPANTABBR3PRODUCTNAMERANKINSTRUMENTIDPRODUCTSORTNO)r      c                 X    t          | t                    r|                                 n| S N
isinstancestrstriprO   s    r2   rQ   z%get_shfe_rank_table.<locals>.<lambda>S  s!    z!S'9'9@!'')))q r4   c                     | dk    rd n| S )NrM   rN   rO   s    r2   rQ   z%get_shfe_rank_table.<locals>.<lambda>T  s    !r''$$q r4   c                      t          |           S r   r   rO   s    r2   rQ   z%get_shfe_rank_table.<locals>.<lambda>U  s    1A!1D1D r4   rd   r   )PARTICIPANTID1PARTICIPANTID2PARTICIPANTID3r   r   c                 L    g | ] }|d                                           v |!S r   r   )r>   r   dfs     r2   r@   z'get_shfe_rank_table.<locals>.<listcomp>b  s3    JJJC2i=3G3G3I3I,I,I,I,I,Ir4   Tr   )r   r   r    r!   r"   r'   r(   r)   r-   r.   SHFE_VOL_RANK_URL_20250701r   shfe_headersjsonloadstextr%   r&   renamer   r   r   applyr   copyr   upperr+   )r!   r   urlrcontextr   get_varsr   r   df_varrR   	df_symbolr   s               @r2   r   r     s   : '+&64T"""HM<O<O<Q<QDhmQA66666>???	}}Xh..&x)@)@@AAA	

)T]]8-D-D
ECcGT5FGGGA*QV$$				gj)	*	*B	 '/(0 0 1 2%$'
 
 
 
 
B$ 2:		@@	A	AB	00	1	1BxL&&'D'DEEByM	BvJN	B 
 
	3	DJJJJyJJJHH @ @ByMS()&*++ 	@ 	@Fvh/69:??AAI"+H"5"9"?"?"A"AIh(44$4??HV	@ Os   )D D	G

Gr   c                     ddddd}t          | ||          }t          j        t          |j                  dd|d	|dd
dddddd          }|S )u   
    郑州商品交易所的网页数据
    :param header:
    :type header:
    :param url: 网站 string
    :param skip_rows: 去掉前几行 int
    :param encoding: utf-8 or gbk or gb2312
    :return: pd.DataFrame
    |text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9zrMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36zwww.czce.com.cna  XquW6dFMPxV380S=CAaD3sMkdXv3fUoaJlICIEv0MVegGq5EoMyBcxkOjCgSjmpuovYFuTLtYFcxTZGw; XquW6dFMPxV380T=5QTTjUlA6f6WiDO7fMGmqNxHBWz.hKIc8lb_tc1o4nHrJM4nsXCAI9VHaKyV_jkHh4cIVvD25kGQAh.MvLL1SHRA20HCG9mVVHPhAzktNdPK3evjm0NYbTg2Gu_XGGtPhecxLvdFQ0.JlAxy_z0C15_KdO8kOI18i4K0rFERNPxjXq5qG1Gs.QiOm976wODY.pe8XCQtAsuLYJ.N4DpTgNfHJp04jhMl0SntHhr.jhh3dFjMXBx.JEHngXBzY6gQAhER7uSKAeSktruxFeuKlebse.vrPghHqWvJm4WPTEvDQ8q)Accept
User-AgentHostCookier   z.+Nr   Fz, gbk.T)matchflavorheader	index_colskiprowsattrsparse_dates	thousandsr   decimal
converters	na_valueskeep_default_na)r   r%   	read_htmlr   r   )r   	skip_rowsr   r   r   r   r1   s          r2   _czce_df_readr   m  s    Q,!k G 	c8W555A<  D  Kr4   20251103c                    | t          j        |           nt          j                                        } ddi}t          j                    }| t          j        ddd          k     rt          d           i S |                     d          t          vr,t          j        d	|                     d          z             i S | t          j        d
dd          k    r5d| j         d|                                                     dd           d}n4d| j         d|                                                     dd           d}t          j        ||          }t          j        t%          |j                            }d ||j        dddf         j                            dd                   j                                        D             }|                    dd           |                                 |j        |df         j                            dd          j        dddf         }d |j        D             }|j                                        }i }	t;          t=          |          dz
            D ]}
|||
         dz   ||
dz            dz
           }g d|_        |                     dd            ||	||
         <   |||
dz            dz   d!         }g d|_        |                     dd            ||	|d!         <   i }|	!                                D ]a\  }}|"                    |"          }|"                    tG          j$        d#          %                    |          d         $          }|||<   b|S )%u  
    郑州商品交易所前 20 会员持仓排名数据明细
    https://www.czce.com.cn/cn/jysj/ccpm/H077003004index_1.htm
    注：该交易所既公布了品种排名, 也公布了标的排名
    :param date: 日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天
    :return: 持仓排名数据明细
    :rtype: pandas.DataFrame
    返回值格式
    rank                        排名                        int
    vol_party_name              成交量排序的当前名次会员        string(中文)
    vol                         该会员成交量                  int
    vol_chg                     该会员成交量变化量             int
    long_party_name             持多单排序的当前名次会员        string(中文)
    long_open_interest               该会员持多单                  int
    long_open_interest_chg           该会员持多单变化量             int
    short_party_name            持空单排序的当前名次会员        string(中文)
    short_open_interest              该会员持空单                  int
    short_open_interest_chg          该会员持空单变化量             int
    symbol                      标的合约                     string
    var                         品种                        string
    date                        日期                        string YYYYMMDD
    Nr   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36i  ra      uQ   CZCE可获取的数据源开始日期为 20151008, 请输入合适的日期参数r   r7   i     r   r   z0http://www.czce.com.cn/cn/DFSStaticFiles/Future//rZ   rM   z/FutureDataHolding.xlsxz/FutureDataHolding.xlsr   c                     g | ]}|d z   S r   rN   rW   s     r2   r@   z'get_rank_table_czce.<locals>.<listcomp>  s,        	q  r4   r   u   合计Fna Texpandc                 h    g | ]/}t          j        d                               |          d         0S )z[0-9a-zA-Z_]+r   )recompilefindallrW   s     r2   r@   z'get_rank_table_czce.<locals>.<listcomp>  sF        	
#$$,,T2215  r4      
r_   r
   r   r   r   r   r   r   r   r   inplacer   rU   )rR   z
[a-zA-Z_]+r   )&r   r   r    r!   r"   r%   r&   r'   r(   r)   r-   r.   r   	isoformatr]   requestsget
read_excelr   contentilocr   containsr}   to_listinsertpopsplitvaluesranger   r   r+   r   assignr   r   r  )r!   r   temp_dfr   r   temp_pinzhong_indextemp_symbol_indexsymbol_listtemp_symbol_index_listr   r?   inner_temp_dfnew_big_dictkeyr^   s                  r2   r   r     s   . '+&64T"""HM<O<O<Q<QD )G lnnGhmD"a((((abbb	}}Xh..&x)@)@@AAA	hmRQ77777Jty J J~~''R00J J J 	Ity I I~~''R00I I I 	 	S'***AmGAI..//G LA"++H+??

			   q!$$$(!+,066s46HHMaaaQRdS  %,  K /4<<>>H3-..233  2  2"1%),B1q5,IA,MM
!
 !
 !
 	!!$T!:::#0Q  6q1u = AB FG!
 !
 !
 	!!$T!:::$1R!!Lnn&& " "
UC((RZ%>%>%F%Fs%K%KA%NOO!Sr4   c                    d}ddddddddd	d
d
}                                 d| j        | j        dz
  | j        d                                 dd}	 	 t	          j        |||          }t          |j        d          }d |                    ddi          D             }fd|D             }|S #  t          j
        d           Y xxY w)u  
    大连商品交易所取消了品种排名，只提供标的合约排名，需要获取标的合约列表
    :param date: 日期 datetime.date 对象, 为空时为当天
    :param var: 合约品种
    :return: list 公布了持仓排名的合约列表
    Ghttp://portal.dce.com.cn/publicweb/quotesdata/memberDealPosiQuotes.htmlr   zgzip, deflatezzh-CN,zh;q=0.9,en;q=0.8zno-cacheclosezwww.dce.com.cnzhttp://portal.dce.com.cn1sMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36)
r   zAccept-EncodingzAccept-LanguagezCache-Control
Connectionr   OriginPragmazUpgrade-Insecure-Requestsr   0r   allrM   zmemberDealPosiQuotes.varietyzmemberDealPosiQuotes.trade_typer   r   r   zcontract.contract_idzcontract.variety_idcontract)paramsr   lxmlc                     g | ]I}t          j        d |d                             d                              d                    d         JS )z\d+onclickjavascript:setContract_id('');r   )r   r  r   rW   s     r2   r@   z*_get_dce_contract_list.<locals>.<listcomp>(  sg       
 	 
O))*GHHNNuUU    r4   namer'  r   c                 >    g | ]}                                 |z   S rN   lower)r>   rX   r   s     r2   r@   z*_get_dce_contract_list.<locals>.<listcomp>/  s&    JJJDSYY[[4/JJJr4   r`   )r2  r   r   r   r  postr   r   find_alltimesleep)r!   r   r   r   r(  r   soupcontract_lists    `      r2   _get_dce_contract_listr9    s    TC7*4# ,%(- G ),		+.	ax %"yy{{	 	F	c&'BBBA 00D 
 !MM0DMEE  M KJJJMJJJM  	JqMMMHs   AB2 2C
20230706c                 $
   t          d           | }| t          j        |           nt          j                                        } | t          j        ddd          k     rt          t          d                     i S |                     d          t          vr,t          j
        d|                     d          z             i S d	 |D             }i }|D ]8}t          | |          }|D ]!}t          j        |                                ||                                | j        | j        dz
  | j        fz  }	 t#          j        |dd
         dz   dd          }|                    ddd           |                    d           }|d= |d= |                    ddddddddddd
d            |                                |d!<   ||d"<   ||d#<   |                    d$           }t/          dt1          |          dz             |d<   |d                             t4                    |d<   |d                             t4                    |d<   |d                             t4                    |d<   |d                             t4                    |d<   |d                             t4                    |d<   |d                             t4                    |d<   |||<   #  d%}	|                                d&| j        | j        dz
  t7          | j                                      d'          ||                                d(d)}
t;          j        |	|
*          }|j        d+k    ri ||<   nt#          j         tC          |j"                            d         j#        dd,ddf         }|d= |d= |                    ddddddddddd
d            |                                |d!<   ||d"<   ||d#<   |                    d-           }t/          dt1          |          dz             |d<   |d                             t4                    |d<   |d                             t4                    |d<   |d                             t4                    |d<   |d                             t4                    |d<   |d                             t4                    |d<   |d                             t4                    |d<   |||<   Y  xY w:|S ).u  
    大连商品交易所前 20 会员持仓排名数据明细, 由于交易所网站问题, 需要 20200720 之后才有数据
    注: 该交易所只公布标的合约排名
    :param date: 日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date 对象, 为空时为当天
    :param vars_list: 合约品种如 RB、AL 等列表为空时为所有商品, 数据从 20060104 开始，每交易日 16:30 左右更新数据
    :return: 持仓排名
    :rtype: pandas.DataFrame

    返回值格式
    rank                        排名                        int
    vol_party_name              成交量排序的当前名次会员      string(中文)
    vol                         该会员成交量                 int
    vol_chg                     该会员成交量变化量            int
    long_party_name             持多单排序的当前名次会员      string(中文)
    long_open_interest          该会员持多单                 int
    long_open_interest_chg      该会员持多单变化量            int
    short_party_name            持空单排序的当前名次会员       string(中文)
    short_open_interest         该会员持空单                  int
    short_open_interest_chg     该会员持空单变化量             int
    symbol                      标的合约                     string
    var                         品种                        string
    date                        日期                        string YYYYMMDD
    uJ   如果本接口不可用，请使用 ak.futures_dce_position_rank() 接口Ni  r      u?   大连商品交易所数据源开始日期为 20060104，跳过r   r7   c                 :    g | ]}|t           j        d          v |S r9   r;   r=   s     r2   r@   z&get_dce_rank_table.<locals>.<listcomp>W  s*    RRRqd.J5.Q)Q)Q)Q)Q)Qr4   excelr   r   )r   r   anyT)howaxisr  c                 H    t          |                               dd          S Nr[   rM   r   r]   rO   s    r2   rQ   z$get_dce_rank_table.<locals>.<lambda>i      AsB0G0G r4   u   名次.1u   名次.2r_   r
   r   r   r   r   r   r   r   r   )
   名次   会员简称	   成交量   增减u   会员简称.1   持买单量u   增减.1u   会员简称.2   持卖单量u   增减.2r   r  rR   r   r!   c                 X    | dk    r#t          |                               dd          n| S NrZ   r$  rE  rO   s    r2   rQ   z$get_dce_rank_table.<locals>.<lambda>  s'    !s((c!ffnnS#666 r4   r  r$  r  rM   r&  r1      rU   c                 X    | dk    r#t          |                               dd          n| S rO  rE  rO   s    r2   rQ   z$get_dce_rank_table.<locals>.<lambda>  s'    a3hh#a&&..c":":":A r4   )$r'   r   r   r    r!   r"   	Exceptionr(   r)   r-   r.   r9  DCE_VOL_RANK_URL_1r2  r   r   r   r%   r	  dropnar   r   r   r  r   r   r\   r   zfillr  r3  status_coder   r   r   r  )r!   r   date_stringr   r   r  rR   r   r  temp_urlpayloadr   s               r2   get_dce_rank_tabler[  6  sx   0 

VWWWK&*&64T"""HM<O<O<Q<QDhmD!Q''''iYZZ[[[	}}Xh..&x)@)@@AAA	RRIRRRIH o/ o/,T377! l	/ l	/F)					
Q- Cb/-CRC7(:1qQQQ5q$???!++&G&GHHJ'J'"((8%*"+*;(<$<*<(=$=  !     %+LLNN!!$"-!++II  #(3w<<!+;"<"<!(!6!6u!=!=%,Y%7%>%>u%E%E	"078L0M0T0T1 1,- 5<,5&-- 01 299N1O1V1V2 2-. 6=-6&-- 12 $+  7/d47IIKK7: I!Z!^tx==..q11,2+.99;; "	 	 M(999=C''')HV$$ l8AF+;+;<<Q?DSbS!!!VLG
+
+NN&,,<).&/.?,@(@.@,A(A! ! !% #    )/GH%%(GEN&1GFO%kkMM G ',As7||a/?&@&@GFO%,U^%:%:5%A%AGEN)0);)B)B5)I)IGI&4;,5fUmm 01 9@09fUmm 45 6=-6fUmm 12 :A1:fUmm 56 (/HV$Yl	/Z Os   :F)K%%H#T20190805c                    d |D             }| t          j        |           nt          j                                        } | t          j        ddd          k     rt          t          d                     i S |                     d          t          vr,t          j
        d|                     d          z             i S d	d
i}i }|D ]+}t           j        |                     d          |                     d          |fz  }t          j        ||          }|j        dk    r&	 t          j        t#          |j                  dd          }n#  Y xY w|j        dddf         j                            d          }t-          |          dk    r|j        ||         j        d         ddf         j                            dd          }	|	j        dddf         |	_        |	j        ddddf                                         }	|	                    dd           n,t          j        t#          |j                  d          }	n dS |	                    d          }	|	                    d           }	|	d= t?          |	d                   D ]`}
|	|	d         |
k             }ddgt@          z   |_        tC          t          j"        |          |
          }|                    d           ||
<   a-|S )!u  
    中国金融期货交易所前 20 会员持仓排名数据明细
    http://www.cffex.com.cn/ccpm/
    注：该交易所既公布品种排名，也公布标的排名
    :param date: 日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天
    :param vars_list: 合约品种如RB、AL等列表 为空时为所有商品, 数据从20100416开始，每交易日16:30左右更新数据
    :return: 持仓排名
    :rtype: pandas.DataFrame
    :rfield:
    rank                        排名                        int
    vol_party_name              成交量排序的当前名次会员        string(中文)
    vol                         该会员成交量                  int
    vol_chg                     该会员成交量变化量             int
    long_party_name             持多单排序的当前名次会员        string(中文)
    long_open_interest          该会员持多单                  int
    long_open_interest_chg      该会员持多单变化量             int
    short_party_name            持空单排序的当前名次会员        string(中文)
    short_open_interest         该会员持空单                  int
    short_open_interest_chg     该会员持空单变化量             int
    symbol                      标的合约                     string
    var                         品种                        string
    date                        日期                        string YYYYMMDD

    c                 :    g | ]}|t           j        d          v |S rG   r;   r=   s     r2   r@   z(get_cffex_rank_table.<locals>.<listcomp>  rI   r4   Ni  r<     u0   CFFEX 数据源开始日期为 20100416，跳过r   r7   r   r   z%Y%mz%dr   rQ  r   )r   r   r   u	   交易日r  r   r[   Tr   r  )r   r@  )rA  c                 X    t          | t                    r|                                 n| S r   r   rO   s    r2   rQ   z&get_cffex_rank_table.<locals>.<lambda>  s!    As1C1C$JAGGIII r4   u   合约rR   r_   r   )#r   r   r    r!   r"   r'   rS  r(   r)   r-   r.   CFFEX_VOL_RANK_URLr  r  rW  r%   
read_tabler   r
  r  r   r  r   r}   r  r   r   r+   read_csvrU  r   r   rank_columns_table_cut_calr&   )r!   r   r   r   r   r   r   r  
need_indexr   rR   r   s               r2   r   r     s   2 UTITTTI&*&64T"""HM<O<O<Q<QDhmD!R((((iJKKLLL	}}Xh..&x)@)@@AAA	 -G H %@ %@ %MM&!!MM$)
 
 Lg...=C-	(:(:USWXXX aaad+/88EEJ:""WZ%8%>q%A%C%CQ%FGKQQ R   !&
1aaa4 0
122qqq5)..00!!$T!::::GAI$6$6GGGFF''		JJKK+%/** 	@ 	@FeHo78I!)6 2\ AI&r|I'>'>GGI(44$4??HV		@
 Os   ')EEc                    t          |          }| t          dgz                                t                    | t          dgz   <   |                                 }d|d<   dD ]}d||<   t          j        | t          j        |          j        gd          } || d<   || d<   | t          dgz                                t                    | t          dgz   <   | S )	u   
    表格切分
    :param table_cut: 需要切分的表格
    :type table_cut: pandas.DataFrame
    :param symbol: 具体合约的代码
    :type symbol: str
    :return: 表格切分后的结果
    :rtype: pandas.DataFrame
    r_   i  )r
   r   r   NT)sortrR   rd   )	r	   
intColumnsr   intr   r%   r,   r&   r   )r   rR   r   table_cut_sumr   s        r2   re  re    s     6
"
"C'0vh1F'G'N'Ns'S'SIjF8#$MMOOMM&H " "!c	9bl=&A&A&CD4PPPI IhIi'0vh1F'G'N'Ns'S'SIjF8#$r4   20160919c                 r   | t          j        |           nt          j                                        } |                     d          t          vr,t          j        d|                     d          z             i S |                     d          }d}|ddddd	}t          j
        ||
          }t                      }t          j        t          |j                  d          5 }|                                D ]}|}	|	                    |          s	 t%          j        |                    |          dd          }
t+          |
j        dddf         j                            d          dk              dk    r|
j        dd         }
t3          |
          dk     r0t%          j                    ||	                    d          d         <   |
|
j        dddf         j                            d          dk             j                                        }|d         |d         z
  dk     r1t%          j                    ||	                    d          d         <   f|
|
j        dddf         j                            d          dk             j                                        }|
j        |d         d|
j        |
j        |d         ddf                                                  f         }
|
                     dd           |
|
j        dddf         j                            d          dk             j                                        }|
|
j        dddf         j        !                    dd                   j                                        }|
|d         |d                  j        ddddf         }|
|d         |d                  j        ddddf         }|
|d         |d                  j        ddddf         }t%          j"        |                     d          |                     d          |                     d          gdd          }g d|_        tG          dt3          |          dz             |d <   |d= g d!|_        |	                    d          d         $                                |d"<   |	                    d          d         dd#         $                                |d$<   |g d%         }|%                    d&           }t%          j&        |d'         d()          |d'<   t%          j&        |d*         d()          |d*<   t%          j&        |d          d()          |d <   t%          j&        |d+         d()          |d+<   t%          j&        |d,         d()          |d,<   t%          j&        |d-         d()          |d-<   t%          j&        |d.         d()          |d.<   |||	                    d          d         <   &# tN          $ r{ 	 t%          j        |                    |          dd/d0d12          }
n3#  t%          j        |                    |          dd/d0d32          }
Y nxY w|
|
j        dddf         j                            d          dk             j                                        }|
|
j        dddf         j                            d4          dk             j                                        }|
|d         |d                  j        ddddf         }|
|d         |d                  j        ddddf         }|
|d         |d                  j        ddddf         }t%          j"        |                     d          |                     d          |                     d          gdd          }g d|_        tG          dt3          |          dz             |d <   |d= g d!|_        |	                    d          d         $                                |d"<   |	                    d          d         dd#         $                                |d$<   |g d%         }|%                    d5           }t%          j&        |d'         d()          |d'<   t%          j&        |d*         d()          |d*<   t%          j&        |d          d()          |d <   t%          j&        |d+         d()          |d+<   t%          j&        |d,         d()          |d,<   t%          j&        |d-         d()          |d-<   t%          j&        |d.         d()          |d.<   |||	                    d          d         <   Y w xY w	 ddd           n# 1 swxY w Y   tQ          |)                                          }|D ]1}tU          j+        d6d7|          }|$                                |vr||= 2d8 |,                                D             }|S )9u[  
    大连商品交易所-每日持仓排名-具体合约
    http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/rtj/rcjccpm/index.html
    :param date: 指定交易日; e.g., "20200511"
    :type date: str
    :param vars_list: 品种列表
    :type vars_list: list
    :return: 指定日期的持仓排名数据
    :rtype: pandas.DataFrame
    Nr   r7   zPhttp://www.dce.com.cn/dcereport/publicweb/dailystat/memberDealPosi/batchDownloadaa2601r  zh)	tradeDate	varietyId
contractId	tradeTypelang)r   r   )mode	)r   sepr   u   会员类别i   _r   rG  r`   Tr  u   (?:总计|合计)Fr   r  r   r   rB  r   )rG  rH  rI  rJ  rG  rH  rK  rJ  rG  rH  rL  rJ  r_   )
r
   r   r   r   r   r   r   r   r   r_   rR   rd   r   r   r   r_   r   r   r   r   r   r
   rR   rd   c                 H    t          |                               dd          S rD  rE  rO   s    r2   rQ   z+futures_dce_position_rank.<locals>.<lambda>  rF  r4   r   coerceerrorsr   r   r   r   r   z\s+gb2312r   )r   rx  r   r   r<  u   总计c                 H    t          |                               dd          S rD  rE  rO   s    r2   rQ   z+futures_dce_position_rank.<locals>.<lambda>  rF  r4   z\drM   c                 @    i | ]\  }}t          |          d k    ||S r   )r   )r>   kvs      r2   
<dictcomp>z-futures_dce_position_rank.<locals>.<dictcomp>  s)    EEEda#a&&1**Q***r4   )-r   r   r    r!   r"   r(   r)   r-   r.   r  r3  dictzipfileZipFiler   r
  namelist
startswithr%   rb  openr   r  r   rV   r   r&   r  r}   r   r   notnullr+   r  r,   r  r   r   
to_numericUnicodeDecodeErrorlistkeysr   subr   )r!   r   date_strr   rZ  r   r   zr?   	file_namer1   temp_filter
start_listend_listpart_onepart_two
part_threer  	dict_keysrX   resultfiltered_dicts                         r2   r   r   2  s
    '+&64T"""HM<O<O<Q<QD}}Xh..&x)@)@@AAA	}}X&&H
\C G 	c(((AvvH	++#	6	6	6 D<! C	< C	<AI''11 <}QVVAYYtFFFtyA*//??1DEEII9SbS>Dt99r>>8:HY__S11!45"49QQQT?#6#;#;H#E#E#JKQXXZZN[^3a778:HY__S11!45!$)AAAqD/"5":":8"D"D"IJPWWYY
yqMOOL:a=!!!+;!<!D!D!F!FGI   D 999!$)AAAqD/"5":":8"D"D"IJPWWYY
IaaadO'001E%0PP   
1 ;<A!""aaa%H
1 ;<A!""aaa%H!*Q-(1+"=>CABBEJ
) ,,$,77 ,,$,77"..D.99
 !%  # # # #(3w<<!+;"<"<H%# # # %.OOC$8$8$;$A$A$C$C!%.__S%9%9!%<SbS%A%G%G%I%I	"!    "++&G&GHH0201(1 1 1,- 57M45h5 5 501 #%-"Q"Q"Q131282 2 2-. 68]56x6 6 612 "$wu~h!O!O!O%']793Eh%W%W%W	"4;--a011% ]< ]< ]<=q		#"!)!"  DD=q		#"!)!"  DDD "$)AAAqD/"5":":8"D"D"IJPWWYY
	!!!Q$ 3 8 8 B Ba GHNUUWW
1 ;<A!""aaa%H
1 ;<A!""aaa%H!*Q-(1+"=>CABBEJ
) ,,$,77 ,,$,77"..D.99
 !%  # # # #(3w<<!+;"<"<H%# # # %.OOC$8$8$;$A$A$C$C!%.__S%9%9!%<SbS%A%G%G%I%I	"!    "++&G&GHH0201(1 1 1,- 57M45h5 5 501 #%-"Q"Q"Q131282 2 2-. 68]56x6 6 612 "$wu~h!O!O!O%']793Eh%W%W%W	"4;--a0111{]<MC	<D< D< D< D< D< D< D< D< D< D< D< D< D< D< D<J X]]__%%I  r4((<<>>**EEhnn&6&6EEEMsj   (0f9B9X#f9BX#!f9#N>X#!f9#f)/,Yf).Z	
Lf)%f9(f))f99f= f=20160104c                   
 | t          j        |           nt          j                                        } |                     d          t          vr,t          j        d|                     d          z             i S d}dd| j	        | j
        dz
  | j        ddd	d
}t          j        ||          }t          |j        d          }d |                    ddi          d                             d          D             }t#                      }|D ]@

d| j	        | j
        dz
  | j        d
d	d
}t          j        ||          }t          |j        d          }d |                    ddi          D             }|rt%          |d                   dk    r
fd|D             }|D ]}
d| j	        | j
        dz
  | j        |
d	d
}t          j        ||          }t'          j        t+          |j                            d         j        ddddf         }	g d|	_        
                                |	d<   ||	d<   |	g d         }	|	||<   B|S )u   
    大连商品交易所-每日持仓排名-具体合约-补充
    http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/rtj/rcjccpm/index.html
    :param date: 交易日
    :type date: str
    :return: 合约具体名称列表
    :rtype: list
    Nr   r7   zDhttp://www.dce.com.cn/publicweb/quotesdata/memberDealPosiQuotes.htmlcr$  r   r%  rM   r&  rP  r)  )featuresc                 j    g | ]0}|d                               d                               d          1S )r+  zjavascript:setVariety(r-  r   rW   s     r2   r@   z3futures_dce_position_rank_other.<locals>.<listcomp>6  sI        	Y677==eDD  r4   classselBoxr/  r>  inputc                 j    g | ]0}|d                               d                               d          1S )r+  r,  r-  r  rW   s     r2   r@   z3futures_dce_position_rank_other.<locals>.<listcomp>H  sI     
 
 
 O!!"?@@FFuMM
 
 
r4   r.  r'  r   r<  c                     g | ]}|z   S rN   rN   )r>   rX   rR   s     r2   r@   z3futures_dce_position_rank_other.<locals>.<listcomp>N  s     I I I4$ I I Ir4   rU   )r_   r
   r   r   rz  r   r   r   rz  r   r   r   rd   rR   r}  )r   r   r    r!   r"   r(   r)   r-   r.   r   r   r   r  r3  r   r   r4  r  r   r%   r   r   r  r   r   )r!   r   rZ  r   r7  r  big_dfr8  r'  r  rR   s             @r2   futures_dce_position_rank_otherr    s    '+&64T"""HM<O<O<Q<QD}}Xh..&x)@)@@AAA	
PC(++.	ax %"	 	G 	c(((A&111D MM((;M<<R@II'RR  K VVF A/ A/,2/2IZ!^8$)#)	
 	
 M#G,,,QVf555
 
VZ,@AA
 
 
  0	/=#$$)) I I I I= I I I - -/ -/H8>;> $	!%a#x08/5$&	 	G !c888A l8AF+;+;<<Q?DSbS!!!VLG' ' 'GO *0GI&(0GH%%  G  (/F8$$Mr4   c                      d} ddi}t          j        | |          }|                                }t          j        |d                   }|d                                         }|S )u   
    广州期货交易所-合约品种名称列表
    http://www.gfex.com.cn/gfex/rcjccpm/hqsj_tjsj.shtml
    :return: 合约品种名称列表
    :rtype: list
    z6http://www.gfex.com.cn/u/interfacesWebVariety/loadListr   oMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36)r   r   r1   rr  )r  r3  r   r%   r&   r   )r   r   r   	data_jsonr  var_lists         r2   __futures_gfex_vars_listr    sk     CC )G 	#w///AIl9V,--G{#**,,HOr4   si20240729rR   c                     d}| |d}ddi}t          j        |||          }|                                }t          j        |d                   }|j        rg S |j        dddf                                         }|S )	u  
    广州期货交易所-合约具体名称列表
    http://www.gfex.com.cn/gfex/rcjccpm/hqsj_tjsj.shtml
    :param symbol: 品种
    :type symbol: str
    :param date: 交易日
    :type date: str
    :return: 合约具体名称列表
    :rtype: list
    zPhttp://www.gfex.com.cn/u/interfacesWebTiMemberDealPosiQuotes/loadListContract_id)rd   
trade_dater   r  r   r1   r   r1   Nr   )r  r3  r   r%   r&   emptyr  r   )	rR   r!   r   rZ  r   r   r  r  r8  s	            r2   __futures_gfex_contract_listr    s     ]C G
 	 )G 	#GW===AIl9V,--G} 	LA&--//Mr4   si231220231113contract_idc                 <   d}|d| |dd}ddi}t          j                    }t          dd          D ]}|                    d	|i           t	          j        |||
          }|                                }	t          j        |	d                   }
d|
j        v r|
                    ddddd           n|
                    ddddd           |
g d         }
t          j	        ||
gdd          }|
                    d           |d         dz   |d<   g d|_        |                                |d<   |                                 |d<   |j        ddddf         }t          j        |d         d          |d<   t          j        |d         d          |d<   t          j        |d         d          |d<   t          j        |d          d          |d <   t          j        |d!         d          |d!<   t          j        |d"         d          |d"<   |S )#uF  
    广州期货交易所-合约具体数据
    http://www.gfex.com.cn/gfex/rcjccpm/hqsj_tjsj.shtml
    :param symbol: 品种
    :type symbol: str
    :param contract_id: 具体合约
    :type contract_id: str
    :param date: 交易日
    :type date: str
    :return: 合约具体数据
    :rtype: pandas.DataFrame
    zEhttp://www.gfex.com.cn/u/interfacesWebTiMemberDealPosiQuotes/loadListr$  r  )r  
trade_typerd   r  	data_typer   r  r   r<  r  r  r1   qtySubr
   r   r   )abbrtodayQtyr  TrM  )r  r  todayQtyChg)r
   r   r   r{  )r  r}   r  rR   rd   NrU   r  r  r   r   r   r   )r%   r&   r  r   r  r3  r   r   r   r,   r+   r   r  r  )rR   r  r!   r   rZ  r   r  pager   r  r  s              r2   __futures_gfex_contract_datar    s    RC" G 	 )G \^^Fa N NT	
 	
 	

 McAAAFFHH	,y011w&&NN, %' 
       NN, %#, 
      >>>? 1MMM
t$$$Wo)F7O  FN #((**F8F9["aaa FM&-AAAF5MfY&7IIIF9#%=#$X$ $ $F  (*}'(( ( (F#$ %'M$%h% % %F ! )+()() ) )F$% Mr4   c                 H   | t          j        |           nt          j                                        } |                     d          t          vr,t          j        d|                     d          z             i S |                     d          } |t                      }nd |D             }i }|D ]n}	 t          |                                |           }n#  |cY c S xY w|D ]9}	 t          |                                ||           }|||<   -#  |cY c c S xY wo|S )ud  
    广州期货交易所-日成交持仓排名
    http://www.gfex.com.cn/gfex/rcjccpm/hqsj_tjsj.shtml
    :param date: 开始日期; 广州期货交易所的日成交持仓排名从 20231110 开始
    :type date: str
    :param vars_list: 商品代码列表
    :type vars_list: list
    :return: 日成交持仓排名
    :rtype: pandas.DataFrame
    Nr   r7   c                 6    g | ]}|                                 S rN   r1  rW   s     r2   r@   z.futures_gfex_position_rank.<locals>.<listcomp>  s     888dTZZ\\888r4   )rR   r!   )rR   r  r!   )r   r   r    r!   r"   r(   r)   r-   r.   r  r  r2  r  )r!   r   r   rX   futures_contract_listr.  r  s          r2   r   r     s_    '+&64T"""HM<O<O<Q<QD}}Xh..&x)@)@@AAA	==""D,..		88i888	H    	$@zz||$% % %!!	OOOOO) 	  	 D 6::<<T   ") 	  Os   6#CC"*)DD__main__20230109)r!   20201026202507212024050920131227201712272020092920210517V)r!   r   20240517202007272025071820251031)r   r   )r   r   )r   )r  )r  r  )r  r  r  )r  N):__doc__r    r   r   r5  r-   r  ior   r   pandasr%   r  bs4r   akshare.futuresr   akshare.futures.requests_funr   akshare.futures.symbol_varr	   get_calendarr)   rd  ri  contract_symbolsr   r  r3   r*   r  r   r   r   r9  r[  r   re  r   r  r  r  r&   r  r   __name__get_rank_table_czce_dfr'   get_cffex_rank_table_dfget_shfe_rank_table_dfget_dce_rank_table_first_dfget_dce_rank_table_second_dfget_dce_rank_table_third_dfget_dce_rank_table_fourth_dffutures_dce_detail_dict"futures_dce_position_rank_other_dffutures_gfex_position_rank_dfget_rank_sum_daily_dfrN   r4   r2   <module>r     s      				                                       6 6 6 6 6 6 7 7 7 7 7 74
 
 
  
  +3* 3*3*3* 3* 3* 3* 3*l (4;P b* b*s b*D b* b* b* b*L (=W W
W!%W	W W W Wt( ( ( (Vh hc h4 h h h hV0 0 0f $.9N S SS SSW S S S Sl &04;P L Ls L L L L^  0 d&;g g
g	g g g gTa a# a a a aH$    &  3 PT    < BLY YY%(Y;>Y\Y Y Y Yx$ $S $$ $ $ $ $N z00jAAA	E
 !!!00jAAA	E
 !!! 32
CCC	E
!""" 10jAAA	E
 !!! #5"4*"E"E"E	E
%&&&#5#5:#F#F#F 	E
&'''"4"4*"E"E"E	E
%&&&"4"4*"E"E"E	E
%&&&#5#5:RUQV#W#W#W 	E
&''' 87ZHHH	E
!""")H)H* * *& 
E
,--- %?$>J$O$O$O!	E
'((( /.   
E
     e r4   