o
    iC                  
   @   s  d Z ddlmZ ddlZddlZddlZddlmZ ddlZ	ddl
ZddlZddlmZ ddlZddlmZ ddlmZ ddlZddlmZmZ dd	lmZ z
dd
lmZmZ W n eyi   dd
l mZmZ Y nw e	j!Z"e#e"$dd dkse#e"$dd dkrddl%m&Z& nddl'm&Z& 			d`ddZ(daddZ)		dbddZ*dcddZ+ddddZ,dd Z-d d! Z.ded"d#Z/	$	&dfd'd(Z0d)d* Z1d+d, Z2d-d. Z3d/d0 Z4d1d2 Z5	3	$	%		dgd4d5Z6	3	3	3	%	3		dhd6d7Z7			did8d9Z8ded:d;Z9d<d= Z:djd?d@Z;ddddd>d3dg g df
dAdBZ<dkdCdDZ=dldEdFZ>dd>g dfdGdHZ?dIdJ Z@dedKdLZAdedMdNZBdddOdPZCdQdRdSdTZDdedUdVZEdWdX ZFdYdZ ZGdmd\d]ZHeId^kr^e/d_ZJeKeJ dS dS )nui   
交易数据接口 
Created on 2014/07/31
@author: Jimmy Liu
@group : waditu
@contact: jimmysoa@sina.cn
    )divisionN)etree)cons)dateu)MA)get_apis
close_apis)get_stock_basics)urlopenRequest.      )StringIOD   MbP?c                 C   s$  t d t| }d}| tjv r'tjtjd tjd tj|  |f }n|tj	v r<tj
tjd tjd ||f }ntdt|D ]}t| zt|}	t|	dd }
t|
dk rbW  d	S W n tyy } z
t | W Y d	}~qDd	}~ww ttjr|
d
n|
}g }| tjv | tjv @ rtj}ntj}t|d d dkrtj}tj|d |d}| dv r|dd }d||dk< |dd	 D ]}|| t||< q|d	ur||j |k }|d	ur||j |k }| tjv |tj	v @ r|j!ddd}|"d}|j#dd}|  S t$tj%)u  
        获取个股历史交易记录
    Parameters
    ------
      code:string
                  股票代码 e.g. 600848
      start:string
                  开始日期 format：YYYY-MM-DD 为空时取到API所提供的最早日期数据
      end:string
                  结束日期 format：YYYY-MM-DD 为空时取到最近一个交易日数据
      ktype：string
                  数据类型，D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟，默认为D
      retry_count : int, 默认 3
                 如遇网络等问题重复执行的次数 
      pause : int, 默认 0
                重复请求数据过程中暂停的秒数，防止请求间隔时间太短出现的问题
    return
    -------
      DataFrame
          属性:日期 ，开盘价， 最高价， 收盘价， 最低价， 成交量， 价格变动 ，涨跌幅，5日均价，10日均价，20日均价，5日均量，10日均量，20日均量，换手率
    Z   本接口即将停止更新，请尽快使用Pro版接口：https://tushare.pro/document/2 httpifengktype input error.
   timeout   Nutf-8recordr      columns)r   WMc                 S      |  ddS )N,r   replacex r)   H/opt/alphahud/venv/lib/python3.10/site-packages/tushare/stock/trading.py<lambda>[       zget_hist_data.<locals>.<lambda>r   turnoveraxisdateF	ascending)&printct_code_to_symbolupperK_LABELSDAY_PRICE_URLP_TYPEDOMAINSK_TYPEK_MIN_LABELSDAY_PRICE_MIN_URL	TypeErrorrangetimesleepr   r
   readlen	ExceptionjsonloadsPY3decodeINDEX_LABELSINX_DAY_PRICE_COLUMNSDAY_PRICE_COLUMNSpd	DataFrameapplymapastypefloatr0   drop	set_index
sort_indexIOErrorNETWORK_URL_ERROR_MSG)codestartendktyperetry_countpausesymbolurl_requestlinesejscolsdfcolr)   r)   r*   get_hist_data#   s^   




rf   c                 C   s   t   tt jt jd t jd t jd | |f }t|dd }|dkr'dS t	
d}|d	t jr7|d
n|}|dd}|dd}|dd}|dd}t jr[t|}ntj|dd}t|}tjtj|dtidt jd}|jddd}|S )u   
           处理当日行情分页数据，格式为json
     Parameters
     ------
        pageNum:页码
     return
     -------
        DataFrame 当日所有股票交易数据(DataFrame)
    r   vsfjvr   r   nullNz	\,(.*?)\:z,"\1":gbkz"{symbolz{"symbolz{symbolz	{"symbol"z"""z"{"{"GBK)encodingrV   dtyper   r\   r   r.   )r4   _write_consoler   SINA_DAY_PRICE_URLr9   r:   PAGESr
   rB   recompilesubrG   rH   r&   rE   dumpsrF   rL   rM   	read_jsonobjectDAY_TRADING_COLUMNSrQ   )typespager_   textregrb   rd   r)   r)   r*   _parsing_dayprice_jsonk   s,   


r   snc                 C   s  |  tjvrttj dS t| }t| }|dd}tjd tjtj	d tj
d tjd ||f tjd tjtj	d tj
d	 tjd
 ||f tjd tjtj	d tj
d |dd ||f i}t|D ]c}	t| zF|tjd krt|| }
tj|
_n.t|| }t|dd }|d}t|dk rW  dS tjt|tjdgd}
W |
  S W |
  S  ty } z
t| W Y d}~qgd}~ww ttj)u  
        获取分笔数据
    Parameters
    ------
        code:string
                  股票代码 e.g. 600848
        date:string
                  日期 format: YYYY-MM-DD
        retry_count : int, 默认 3
                  如遇网络等问题重复执行的次数
        pause : int, 默认 0
                 重复请求数据过程中暂停的秒数，防止请求间隔时间太短出现的问题
        src : 数据源选择，可输入sn(新浪)、tt(腾讯)、nt(网易)，默认sn
     return
     -------
        DataFrame 当日所有股票交易数据(DataFrame)
              属性:成交时间、成交价格、价格变动，成交手、成交金额(元)，买卖类型
    N-r   r   r   sfdlr   ttidx   163   r   r   rm      namesskiprows)stripr4   	TICK_SRCSr3   TICK_SRC_ERRORr5   _code_to_symbol_dgtr&   TICK_PRICE_URLr9   r:   rs   TICK_PRICE_URL_TTTICK_PRICE_URL_NTr?   r@   rA   rL   
read_excelTICK_COLUMNSr    r   r
   rB   rH   rC   
read_tabler   rD   rT   rU   )rV   r0   rZ   r[   srcr\   
symbol_dgtdatestrr]   r^   rd   rt   r`   ra   r)   r)   r*   get_tick_data   sL   


$$&



r     c                 C   s$  | du st | dks|du rdS t| }|d }t|D ]o}t| zRttjtjd tj	d tj
d |||f }t|dd }|d	}t |dk rRW  dS tjt|tjd
gd}	|	durr|	d dd |	d< W |	  S W |	  S  ty }
 z
t|
 W Y d}
~
qd}
~
ww ttj)u  
        获取sina大单数据
    Parameters
    ------
        code:string
                  股票代码 e.g. 600848
        date:string
                  日期 format：YYYY-MM-DD
        retry_count : int, 默认 3
                  如遇网络等问题重复执行的次数
        pause : int, 默认 0
                 重复请求数据过程中暂停的秒数，防止请求间隔时间太短出现的问题
     return
     -------
        DataFrame 当日所有股票交易数据(DataFrame)
              属性:股票代码    股票名称    交易时间    价格    成交量    前一笔价格    类型（买、卖、中性盘）
    N   d   r   rg   sinaddr   r   rm   r   r   rV   c                 S   s   | dd  S )Nr   r)   r'   r)   r)   r*   r+      r,   zget_sina_dd.<locals>.<lambda>)rC   r4   r5   r?   r@   rA   r   SINA_DDr9   r:   rs   r
   rB   rH   rL   read_csvr   SINA_DD_COLSmaprD   r3   rT   rU   )rV   r0   volrZ   r[   r\   r^   rt   r`   rd   ra   r)   r)   r*   get_sina_dd   s6   



r   c                 C   sT  | du s
t | dkrdS t| }t }t|D ]}t| zlttj	tj
d tjd tjd ||f }t|dd }|d}|d	d
 }t|tdtftdd d }t|}t|}t |d }t }	t  td	|d	 D ]}
|	jt|||
||dd}	qxW |	  S  ty } ztt| W Y d}~qd}~ww ttj)u4  
        获取当日分笔明细数据
    Parameters
    ------
        code:string
                  股票代码 e.g. 600848
        retry_count : int, 默认 3
                  如遇网络等问题重复执行的次数
        pause : int, 默认 0
                 重复请求数据过程中暂停的秒数，防止请求间隔时间太短出现的问题
     return
     -------
        DataFrame 当日所有股票交易数据(DataFrame)
              属性:成交时间、成交价格、价格变动，成交手、成交金额(元)，买卖类型
    Nr   r   rg   rh   r   r   rm   r   Dummyc                 S   s   |S Nr)   )snr)   r)   r*   r+     s    z"get_today_tickss.<locals>.<lambda>)__getitem__detailPagesTignore_index) rC   r4   r5   dutodayr?   r@   rA   r   TODAY_TICKS_PAGE_URLr9   r:   rs   r
   rB   rH   evaltypedictrE   rw   rF   rL   rM   _write_headappend_today_ticksrD   r3   strrT   rU   )rV   rZ   r[   r\   r0   r^   r_   data_strpagesdatapNoerr)   r)   r*   get_today_tickss   sF   






r   c                 C   s  t   t|D ]z}t| z]tjt jt j	d t j
d t jd | ||f }|d}t jr8dd |D }ndd |D }d|}d	| }|d
d}tjt|ddd }	t j|	_|	d dd |	d< W |	  S  ty }
 z
t|
 W Y d }
~
qd }
~
ww tt j)Nr   rg   t_ticksz//table[@id="datatbl"]/tbody/trc                 S      g | ]
}t |d qS r   r   tostringrH   .0noder)   r)   r*   
<listcomp>(      z _today_ticks.<locals>.<listcomp>c                 S      g | ]}t |qS r)   r   r   r   r)   r)   r*   r   *      r   z<table>%s</table>z--0F)parse_datesr   pchangec                 S   r#   )N%r   r%   r'   r)   r)   r*   r+   0  r,   z_today_ticks.<locals>.<lambda>)r4   rq   r?   r@   rA   lxmlhtmlparseTODAY_TICKS_URLr9   r:   rs   xpathrG   joinr&   rL   	read_htmlr   TODAY_TICK_COLUMNSr    r   rD   r3   rT   rU   )r\   tdatepageNorZ   r[   r^   r   ressarrrd   ra   r)   r)   r*   r     s0   



r   c                  C   sp   t   tdd} | dur,tdt jd D ]}td|}|jd dkr+| j|dd} q | jtdddd} | S )	u=  
        一次性获取最近一个日交易日所有股票的交易数据
    return
    -------
      DataFrame
           属性：代码，名称，涨跌幅，现价，开盘价，最高价，最低价，最日收盘价，成交量，换手率，成交额，市盈率，市净率，总市值，流通市值
    hs_ar   Nr   r   Tr   shfxjs)r4   r   r   r?   PAGE_NUMshaper   )rd   inewdfr)   r)   r*   get_today_all8  s   

r   c                 C   s  d}t | tst | tst | tst | tjr&| D ]}|t|d 7 }qnt| }t|dkr7|dd n|}t	tj
tjd tjd t |f dd	d
d}t|dd }|d}td}||}td}||}g }	g }
t|D ]"\}}t|dkr|	dd |ddd D  |
||  qyt|
dkrdS tj|	tjd}|jddd}|
|d< dd |jD }|D ]}|| dd ||< q|S )um  
        获取实时交易数据 getting real time quotes data
       用于跟踪交易情况（本次执行的结果-上一次执行的数据）
    Parameters
    ------
        symbols : string, array-like object (list, tuple, Series).
        
    return
    -------
        DataFrame 实时交易数据
              属性:0：name，股票名字
            1：open，今日开盘价
            2：pre_close，昨日收盘价
            3：price，当前价格
            4：high，今日最高价
            5：low，今日最低价
            6：bid，竞买价，即“买一”报价
            7：ask，竞卖价，即“卖一”报价
            8：volumn，成交量 maybe you need do volumn/100
            9：amount，成交金额（元 CNY）
            10：b1_v，委买一（笔数 bid volume）
            11：b1_p，委买一（价格 bid price）
            12：b2_v，“买二”
            13：b2_p，“买二”
            14：b3_v，“买三”
            15：b3_p，“买三”
            16：b4_v，“买四”
            17：b4_p，“买四”
            18：b5_v，“买五”
            19：b5_p，“买五”
            20：a1_v，委卖一（笔数 ask volume）
            21：a1_p，委卖一（价格 ask price）
            ...
            30：date，日期；
            31：time，时间；
    r   r$      Nr   r   sinahqzhq.sinajs.cnzhttps://finance.sina.com.cn/)hostreferer)headersr   r   rm   z\="(.*?)\";z(?:sh|sz)(.*?)\=r   c                 S   s   g | ]}|qS r)   r)   )r   astrr)   r)   r*   r         z'get_realtime_quotes.<locals>.<listcomp>!   r   r   r   r.   rV   c                 S   s   g | ]}d |v r|qS )_vr)   )r   clsr)   r)   r*   r     s    c                 S   s   | d d S )Nr)   r'   r)   r)   r*   r+     r,   z%get_realtime_quotes.<locals>.<lambda>)
isinstancelistsettuplerL   Seriesr4   r5   rC   r   LIVE_DATA_URLr9   r:   _randomr
   rB   rH   rt   ru   findall	enumerater   splitrM   LIVE_DATA_COLSrQ   r    r   )symbolssymbols_listrV   r_   r}   r~   r   regSymsyms	data_list	syms_listindexrowrd   lstxtr)   r)   r*   get_realtime_quotesN  sB   %*
 





"r  qfqFTc                 C   s  t d |du rt n|}|du rt n|}t||}|d }	t  tt|| |	|||}
|
du r9t	
 }
t|dkritdt|D ]"}|| }	t  tt|| |	|||}|du ra n|
j|dd}
qFt|
dkst|
|
j|k|
j|k@  dkrt	
 S |
d}
|r|
|
j|k|
j|k@  }
|
d}
|
jdd	}
|
S |d
kr|r|
jddd}
|
|
j|k|
j|k@  }
dD ]}|
| tj|
|< |
| t|
|< q|
d}
|
jdd	}
|
S |dkr|r|
jddd}
t| ||}|d}|jddd	}|
dd }||j|d k }t| }|du rt	
 S t|d dkt|d dk@ r6t|d }n)tt rEt|d }nt dkt dk @ rYt|d }nt|d }t|d | }|
|
j|k|
j|k@  }
dD ]}|
| | |
|< |
| tj|
|< |
| t|
|< qu|
d}
|
jdd	}
|
S dD ]}|
| |
d  |
|< q|r|
jddd}
|
|
j|k|
j|k@  }
dD ]}|
| tj|
|< q|
d}
|
jdd	}
|
t}
|
S )uO  
    获取历史复权数据
    Parameters
    ------
      code:string
                  股票代码 e.g. 600848
      start:string
                  开始日期 format：YYYY-MM-DD 为空时取当前日期
      end:string
                  结束日期 format：YYYY-MM-DD 为空时取去年今日
      autype:string
                  复权类型，qfq-前复权 hfq-后复权 None-不复权，默认为qfq
      retry_count : int, 默认 3
                 如遇网络等问题重复执行的次数 
      pause : int, 默认 0
                重复请求数据过程中暂停的秒数，防止请求间隔时间太短出现的问题
      drop_factor : bool, 默认 True
                是否移除复权因子，在分析过程中可能复权因子意义不大，但是如需要先储存到数据库之后再分析的话，有该项目会更加灵活
    return
    -------
      DataFrame
          date 交易日期 (index)
          open 开盘价
          high  最高价
          close 收盘价
          low 最低价
          volume 成交量
          amount 成交金额
    r   Nr   r   Tr   r0   Fr1   hfqfactorr.   )openhighcloselowr  r  r	  	pre_closeprice	      r  r  r	  r  )r3   r   today_last_yearr   
get_quartsr4   r   _parse_fq_data_get_index_urlrL   rM   rC   r?   rq   r   r0   drop_duplicatesrR   rS   rQ   r   FORMATrO   rP   _parase_fq_factorsort_valuesheadr  
is_holidayget_hour)rV   rW   rX   autyper   rZ   r[   drop_factorqsqtr   drd   label	firstDatefrowrtpreCloserater)   r)   r*   
get_h_data  s   ,





"


r%  c                 C   s0  t | }tt jt jd t jd |f }t|dd }|dt|d  }t j	r/|
dn|}|dd}|d	d
}|dd}|dd}|dd}|dd}t|}tt|d  t|d  d}|d t|d< |d jtjkrt|d |d< |d}|d t|d< |S )Nr   rg   r   r   r   r   z{_rl   totalz"total"r   z"data"z:"z":"z",_z","r^   r   )r0   r  r0   r  )r4   r5   r   HIST_FQ_FACTOR_URLr9   r:   r
   rB   rC   rG   rH   r&   rE   rF   rL   rM   r   keysvaluesr   _fun_exceptdtypesnpry   to_datetimer  rO   rP   )rV   rW   rX   r\   r_   r}   rd   r)   r)   r*   r    s*   


(
r  c                 C   s   t | dkr| dd  S | S )Nr   i)rC   r'   r)   r)   r*   r*    s   r*  c                 C   sr  t |D ]}t| zt| }t|dd }|d}tj	t
|}|d}tjr5dd |D }	ndd |D }	d|	}	|	dkrIW  d S tj|	d	d
gdd	 }
t|
d	krat W   S |rltjd	d |
_ntj|
_|
d jtjkrt|
d |
d< |
d}
W |
  S  ty } zW Y d }~ d S d }~w ty } z
t| W Y d }~qd }~ww ttj)Nr   r   rm   z"//table[@id="FundHoldSharesTable"]c                 S   r   r   r   r   r)   r)   r*   r   0  r   z"_parse_fq_data.<locals>.<listcomp>c                 S   r   r)   r   r   r)   r)   r*   r   2  r   r   r   r   )r      r0   )r?   r@   rA   r   r
   rB   rH   r   r   r   r   r   r4   rG   r   rL   r   rC   rM   HIST_FQ_COLSr    r+  r,  ry   r-  r  
ValueErrorrD   r3   rT   rU   )r]   r   rZ   r[   r^   r_   r}   r   r   r   rd   ra   r)   r)   r*   r  &  s@   




r  c                  C   s&  t tjtjd tjd f } t| dd }|d}|dddd}|d	dd
ddd}dtj	|f }t
jt|ddd}|d |d  d d |d< |d d |d< |d tj|d< |d tj|d< |tj }|d dd |d< |d t|d< |d t|d< |S )um  
    获取大盘指数行情
    return
    -------
      DataFrame
          code:指数代码
          name:指数名称
          change:涨跌幅
          open:开盘价
          preclose:昨日收盘价
          close:收盘价
          high:最高价
          low:最低价
          volume:成交量(手)
          amount:成交金额（亿元）
    r   r   r   r   rm   zvar hq_str_shr   zvar hq_str_szz";rk   =r$   %s%s)sep	thousandsr  precloser   r   changeamounti rV   c                 S      t | dS Nr   r   zfillr'   r)   r)   r*   r+   h      zget_index.<locals>.<lambda>)r   r4   INDEX_HQ_URLr9   r:   r
   rB   rH   r&   INDEX_HEADERrL   r   r   r   r  FORMAT4
INDEX_COLSrO   rP   )r_   r}   rd   r)   r)   r*   	get_indexJ  s$   

rA  c                 C   s\   | rt jt jd t jd ||d |d f }|S t jt jd t jd ||d |d f }|S )Nr   rg   r   r   )r4   HIST_INDEX_URLr9   r:   HIST_FQ_URL)r   rV   r  r]   r)   r)   r*   r  n  s   r  r   c                 C   sj  t d |rtj|  nt| }d}	d}
|du rdn|}|du|dk@ r2|du s,|dkr0t n|}| tjv r|dur?|nd}| dd dv sK|rMd}|du rSdnd}|du p\|dk|du pc|dk@ rtjtj	d tj
d |||tj|  |||td	f
 g}n@t||}g }|D ]5}t|d
 }t|d d }tjtj	d tj
d ||t| |tj|  |||td	f
 }	||	 qd|tj|  f }
n"|tjv rtjtj	d tj
d |||tdf g}d| }
ntdt }|D ]}	|jt|	|
|| ||||dd}q|tjvr3|du|dk@ |du|dk@ @ r3|jdkr3||j|k|j|k@  }|S )u:  
    获取k线数据
    ---------
    Parameters:
      code:string
                  股票代码 e.g. 600848
      start:string
                  开始日期 format：YYYY-MM-DD 为空时取上市首日
      end:string
                  结束日期 format：YYYY-MM-DD 为空时取最近一个交易日
      autype:string
                  复权类型，qfq-前复权 hfq-后复权 None-不复权，默认为qfq
      ktype：string
                  数据类型，D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟，默认为D
      retry_count : int, 默认 3
                 如遇网络等问题重复执行的次数 
      pause : int, 默认 0
                重复请求数据过程中暂停的秒数，防止请求间隔时间太短出现的问题
    return
    -------
      DataFrame
          date 交易日期 (index)
          open 开盘价
          high  最高价
          close 收盘价
          low 最低价
          volume 成交量
          amount 成交额
          turnoverratio 换手率
          code 股票代码
    r   r   Nr   )15fqr   r      z-01-01z-12-31r2     zm%sr   Tr   F)r3   r4   INDEX_SYMBOLr5   r   r   r6   r7   KLINE_TT_URLr9   r:   	TT_K_TYPEr   tt_datesr   r   r<   KLINE_TT_MIN_URLr>   rL   rM   _get_k_dataemptyr0   rT   rU   )rV   rW   rX   rY   r  r   rZ   r[   r\   r]   dataflagrF  klineurlsyearsyear	startdateenddater   r)   r)   r*   
get_k_datax  sf   $ 



"rW  c                 C   s  t |D ]}t| zt| }	t|	dd }
t|
dk r"W  d S W n ty9 } z
t| W Y d }~qd }~ww t	j
rB|
dn|
}
|
dd }
td}t|d|
}
t|
d	 }|t|d
 |  v rl|nt	j|  }t|d
 | | d	kr d S t|d
 | | d	 dkrtj|d
 | | t	jd}ntj|d
 | | t	jd}|r|n||d< |t	jv r|d dd |d< |jdd D ]}|| t||< q|  S d S )Nr   r   r   r   r1  r   z	,{"nd.*?}r   r   r   r   r   rV   r0   c                 S   s:   d| dd | dd | dd | dd | dd f S )Nz%s-%s-%s %s:%sr   r   r   r   r      r)   r'   r)   r)   r*   r+     s    
z_get_k_data.<locals>.<lambda>)r?   r@   rA   r   r
   rB   rC   rD   r3   r4   rG   rH   r   rt   ru   subnrE   rF   r   r(  rK  r6   rL   rM   KLINE_TT_COLS_MINSKLINE_TT_COLSr<   r   r    rO   rP   )r]   rP  r\   rV   r   rY   rZ   r[   r^   r_   r`   ra   r~   rb   rd   re   r)   r)   r*   rN    sD   

*
rN  c           	   	   C   sn   t  }t| tst| tst| tst| t jr5| D ]}t||||||d}||d< |j|dd}q|S dS )uh   
    批量获取历史行情数据，具体参数和返回数据类型请参考get_hist_data接口
    )rW   rX   rY   rZ   r[   rV   Tr   N)	rL   rM   r   r   r   r   r   rf   r   )	r   rW   rX   rY   rZ   r[   rd   r\   r   r)   r)   r*   	get_hists  s   *r\  c                 C   s   | du rt  n| }|dd}|dk rdS | du rdn|dd |dd  d }tjtj|| du r5d	n|f d
did}|S )u  
    获取每日收盘行情
    Parameters:
    -------------
    date:交易日期，格式:YYYY-MM-DD
    
    Return:
    -------------
    DataFrame
    code 代码, name 名称, p_change 涨幅%,
    price 现价, change 涨跌, open 今开, high 最高,
    low 最低, preprice 昨收, pe 市盈(动),
    volratio 量比, turnover 换手%, range 振幅%%,
    volume 总量, selling 内盘, buying 外盘,
    amount 总金额, totals 总股本(万), industry 细分行业,
    area 地区, floats 流通股本(万), fvalues 流通市值,
    abvalues AB股总市值, avgprice 均价, strength 强弱度%,
    activity 活跃度, avgturnover 笔换手, attack 攻击波%,
    interval3 近3月涨幅 ，interval 近6月涨幅
    Nr   r   20170614r   r   r   /hqrV   ry   ro   )r   last_tddater&   rL   r   r4   ALL_DAY_FILE)r0   wdatedateprerd   r)   r)   r*   get_day_all
  s   (
rd  c                 C   s(   t | d d }|dddd}|S )Nr   r   r   :)r   r&   )ttstrr)   r)   r*   get_dt_time*  s   rh  Ec              
   C   s  t  }t }d|| ||f }t|d}| dv r| dkr-|j|jjd dkd d f }n| dkrA|j|jjd dkd d f }nd}| dkrId	nd} |jD ]}	d
|	 }
d|v rt|	||||| |d}|j|d< |d t	|d< |d |_|j
ddgd	dd |jddidd |jddidd |jddidd |jddidd |jddidd |jddidd |jd d df d|jd d df< |jd d df d|jd d df< |jd d df d|jd d df< |jd d df d|jd d df< |jd d df d|jd d df< |jd d df d|jd d df< |jd d df  d9  < |jd d df  d9  < |jd d df  d9  < |jd d df  d9  < d|jd d d f< d|jd d d!f< d|jd d d"f< d|jd d d#f< d|jd d d$f< d|jd d d%f< d|jd d d&f< d|jd d d'f< d|jd d d(f< d|jd d d)f< d|jd d d*f< d|jd d d+f< d|jd d d,f< d|jd d d-f< d|jd d d.f< d|jd d d/f< d|jd d d0f< d|jd d d1f< d|jd d d2f< d|jd d d3f< d|jd d d4f< d|jd d d5f< d|jd d d6f< d|jd d d7f< d|jd d d8f< d|jd d d9f< d|jd d d:f< d|jd d d;f< d|jd d d<f< d|jd d d=f< d|jd d d>f< d|jd d d?f< d|jd d d@f< d|jd d dAf< d|jd d dBf< d|jd d dCf< d|jd d dDf< d|jd d dEf< d|jd d dFf< d|jd d dGf< dH|jd d dIf< dH|jd d dJf< dH|jd d dKf< dH|jd d dLf< dH|jd d dMf< t| |||
< qN|  t| d S )NNz%s%s%sbar%s.h5a)SHSZrk  r   6rl  r   r   z%s.SHmin)conn
start_dateend_datefreqmarketassetTimerV   T)r/   inplacer  OPEN)r    rv  r  CLOSEr	  LOWr  HIGHr   VOLUMEr7  TURNOVERint64i'  	ASKPRICE1	ASKPRICE2	ASKPRICE3	ASKPRICE4	ASKPRICE5	ASKPRICE6	ASKPRICE7	ASKPRICE8	ASKPRICE9
ASKPRICE10	BIDPRICE1	BIDPRICE2	BIDPRICE3	BIDPRICE4	BIDPRICE5	BIDPRICE6	BIDPRICE7	BIDPRICE8	BIDPRICE9
BIDPRICE10ASKVOL1ASKVOL2ASKVOL3ASKVOL4ASKVOL5ASKVOL6ASKVOL7ASKVOL8ASKVOL9ASKVOL10BIDVOL1BIDVOL2BIDVOL3BIDVOL4BIDVOL5BIDVOL6BIDVOL7BIDVOL8BIDVOL9BIDVOL10g        VWAPVOL30TOTAL_VOLUMETOTAL_TURNOVERINTEREST)r   r	   rL   HDFStorelocr   r   barapplyrh  rQ   renamerO   r3   r  r   )rs  r0   rr  rt  filepathr   stksfnamestorestkr\   rd   r)   r)   r*   bar2h50  s   
  


&&&&&&
r  c                    s  t d |   } t|
D ]}z|du r t tj W  dS |\}}|  }|  }|dkr;t| ||dn|}|dv rJt|tj| }n|dkrPdn|}t|tjd }|tj	v rt
 }td	D ],}|tj| || |d
 d
}|| |dkr| n j|dd}t|d
k r nqg|d dd |d< |tjv rt
 }td	D ],}|tj| || |d
 d
}|| |dkr| n j|dd}t|d
k r nqt
|d |d< |jt| djddddjtjdd|dkrdn||dkrdn| }|jdd}|dv r&|tj }|tjv r%|d d	 |d< n!|tj }|dv r:tj|_|tj }n|jddgdd}tj|_|dkrY|durt|  |tj	v rn|j  ddd}|d j!dd|d< n fd d!|j"#fd"d|d< tjdd# D ]/}|d$kr|| |d  ||< n|| |d  t$ d d  ||< || #tj%||< q|jddd}|	durYt|	dkrYd%|	v r"t&|  |tj	v r|j  ddd}|d& j!dd|d&< n fd'd!|j"#fd(d|d&< |d |d&  |d%< |d% #tj%|d%< |d% 't$|d%< |jd&dd}d)|	v rYt(|d d#|d*< |d* )d+|d,< |d |d,  #tj%|d)< |d) 't$|d)< |jd*d,gdd}|durt|dkr|D ]+}t*|t+rt(|d- |#tj%)|d  |d.| < |d.|  't$|d.| < qgd/D ]}|| 't$||< q|d- ,d0d	 |d1< |d1 #tj%'t$|d1< |W   S    Y  dS t-tj.)2u  
    BAR数据
    Parameters:
    ------------
    code:证券代码，支持股票,ETF/LOF,期货/期权,港股
    con:服务器连接 ，通过ts.api()或者ts.xpi()获得
    start_date:开始日期  YYYY-MM-DD/YYYYMMDD
    end_date:结束日期 YYYY-MM-DD/YYYYMMDD
    freq:支持1/5/15/30/60分钟,周/月/季/年
    asset:证券类型 E:股票和交易所基金，INDEX:沪深指数,X:期货/期权/港股/中概美国/中证指数/国际指数
    market:市场代码，通过ts.get_markets()获取
    adj:复权类型,None不复权,qfq:前复权,hfq:后复权
    ma:均线,支持自定义均线频度，如：ma5/ma10/ma20/ma60/maN
    factors因子数据，目前支持以下两种：
        vr:量比,默认不返回，返回需指定：factor=['vr']
        tor:换手率，默认不返回，返回需指定：factor=['tor']
                    以上两种都需要：factor=['vr', 'tor']
    retry_count:网络重试次数
    
    Return
    ----------
    DataFrame
    code:代码
    open：开盘close/high/low/vol成交量/amount成交额/maN均价/vr量比/tor换手率
    
         期货(asset='X')
    code/open/close/high/low/avg_price：均价  position：持仓量  vol：成交总量
    r   Nr   rt  xapiri  INDEXr   XDXr   i   r   Tr   datetimec                 S   s   t | dd S Nr   r   r   r'   r)   r)   r*   r+     r   zbar.<locals>.<lambda>)rV   F)rQ   rv  r   r.   r1   r            /   <   r  positionri  )
left_indexright_index
adj_factorbfill)methodc                        j |  d S )Nr  r  dayrd   r)   r*   get_val     zbar.<locals>.get_valc                        t | dd S r  r  r'   r  r)   r*   r+            r  torfloatsc                    r  )Nr  r  r  r  r)   r*   r    r  c                    r  r  r  r'   r  r)   r*   r+     r  vrvol5meanr  zma%sr  r   p_change)/r3   r   r6   r?   r4   MSG_NOT_CONNECTED_get_mkcodegetattrASSETKTYPE_LOW_COLSrL   rM   KTYPEto_dfr   rC   r  	KTYPE_ARRr-  assignr   rR   rQ   T_DROP_COLSrS   
BAR_E_COLS
BAR_X_COLSBAR_X_FUTURE_COLSr    BAR_X_FUTURE_RL_COLSBAR_X_OTHER_COLS
factor_adjmergefillnar   r   rP   r  factor_sharesrO   r   shiftr   int
pct_changerT   rU   )rV   ro  rp  rq  rr  rt  rs  adjmafactorsrZ   r^   apir  rY   mkcodefuncr   r   dsre   rj  r)   )rd   r  r*   r    s   "


 

 






$

*

r  c                 C   s|   d}|dkrt | }|S |dkrt | }|S tjt jr&tt j}n
t	|}|
t j ||j| k d jd }|S )Nr   ri  r  rs  r   )r4   _market_code_idx_market_codeospathexists
INST_PLK_FrL   read_pickleget_instrument	to_picklerV   r)  )rV   rt  r  r  mksr)   r)   r*   r    s   


r  c                 C   s  |    } t|dd}ttt dd}t|D ]'}z|du r0tt	j
 W  dS |\}}	t }
|dkrCt| ||	dn|}|dv rK|n|	}tdD ];}||krc|j|| |d dd}n|j|| ||d dd	}||}|d
kr}|
|n|j|
dd}
t|dk r nqQ|dv r||
d< |
d dd |
d< |
d |
d  |
d< |
g d }
g d|
_nk|dv r||kr|
jg ddd}
n	|
jg ddd}
d|
j|
jdkdf< d|
j|
jdkdf< |
d}
g d|
_n6|dv r||kr|
jg ddd}
n	|
jg d dd}
g d!|
_n|
jg d"dd}
W |
  S W |
  S W |
  S W |
  S  tyF } z
t| W Y d}~qd}~ww dS )#u|  
    tick数据
    Parameters:
    ------------
    code:证券代码，支持股票,ETF/LOF,期货/期权,港股
    conn:服务器连接 ，通过ts.api()或者ts.xpi()获得
    date:日期
    asset:证券品种，E:沪深交易所股票和基金, INDEX:沪深交易所指数， X:其他证券品种，大致如下：
                     支持的扩展行情包括(asset='X')：
                            郑州商品期权         OZ 大连商品期权         OD 上海商品期权         OS
                            上海个股期权         QQ 香港指数         FH 郑州商品         QZ 大连商品         QD 上海期货         QS
                            香港主板         KH 香港权证         KR 开放式基金         FU 货币型基金         FB
                            招商理财产品         LC 招商货币产品         LB 国际指数         FW 国内宏观指标         HG 中国概念股         CH
                            美股知名公司         MG B股转H股         HB 股份转让         SB 股指期货         CZ 香港创业板         KG 香港信托基金         KT
                             国债预发行         GY 主力期货合约         MA
                              中证指数         ZZ 港股通         GH
    market:市场代码，通过ts.get_markets()获取
                  
    Return
    ----------
    DataFrame
    date:日期
    time:时间
    price:成交价
    vol:成交量
    type:买卖方向，0-买入 1-卖出 2-集合竞价成交
            期货  0:开仓  1:多开   -1:空开
         期货多一列数据oi_change:增仓数据

    r   r   Nr  r     ,  )rs  rV   rW   count)rs  rV   r0   rW   r  r   Tr   r0   c                 S   s2   dt | dd t | dd t | dd f S )Nz	%s-%s-%s r   r   r   r   r  r'   r)   r)   r*   r+   `  s   2 ztick.<locals>.<lambda>r@   r  )r  r  r   	buyorsell)r  r  r   r   )   G   )hourminutenature_namezengcang	directionsecondnature_marknature_valuer   r.   )r
  r  r  r  r  r   i   nature   )r0   r  r   r   r  )r
  r  r  r  r  r  r  )r
  r  r  r  )r0   r  r   	oi_changer   )r
  r  r  r  r  r  )r   r6   r  r&   r   r   r   r?   r3   r4   r  rL   rM   r  get_transaction_dataget_history_transaction_datar  r   rC   r   r    rQ   r  r  r  rD   )rV   ro  r0   rt  rs  rZ   r   r^   r  r  r   r  conr   r  rd   ra   r)   r)   r*   tick*  sr   

 




r  c                 C   s  t |D ]}z|du rttj W  dS |\}}t }t| ts1t| ts1t| t	s1t| tj
rl| D ]7}	t|	||d}
|dkrL|||
|	fg}n|dkr\|||
|	fg}n	|||
|	}||}q3n0t| ||d}
|dkr|||
| fg}n|dkr|||
| fg}n	|||
| }|dv r|jg ddd}n|jd	gdd}W |  S W |  S  ty } z
t| W Y d}~qd}~ww ttj)
u   
        获取实时快照
    Parameters
    ------
        symbols : string, array-like object (list, tuple, Series).
        
    return
    -------
        DataFrame 实时快照，5档行情
    Nr  ri  r  r  )rs  active1active2reversed_bytes0reversed_bytes1reversed_bytes2reversed_bytes3reversed_bytes4reversed_bytes5reversed_bytes6reversed_bytes7reversed_bytes8reversed_bytes9r   r.   rs  )r?   r3   r4   r  rL   rM   r   r   r   r   r   r  r  get_security_quotesget_instrument_quoter   rQ   rD   rT   rU   )r   ro  rt  rs  rZ   r^   r  r  r   rV   r  rd   ra   r)   r)   r*   quotes  sH   
*

	
r'  c                 C   sH   g }t dD ]}| d|d }||7 }t|dk r nq| |}|S )u$   
            获取股票列表
    r   r     )r?   get_security_listrC   r  )r  r   pr  r)   r)   r*   get_security  s   
r+  c                 C   sz   ddl m  m} | du r| n| } g }tdD ]}| |d d}||7 }t|dk r/ nq| |}|t	j
 |S )u0   
            重新设置本地证券列表
    r   Nr  r  )tushare.util.connsutilconnsxapi_xr?   get_instrument_inforC   r  r  r4   r  r  csr   r   r  r)   r)   r*   reset_instrument  s   
r3  c                 C   s   t d ddlm  m} | du r| n| } | du r"t tj dS g }tdD ]}| |d d}||7 }t	|dk r> nq(| 
|}|S )u$   
            获取证券列表
    r   r   Nr  r  )r3   r,  r-  r.  r/  r4   r  r?   r0  rC   r  r1  r)   r)   r*   r    s   

r  c           	      C   s  d}t |D ]v}t| zYt|| | t f }t|dd }t|}|d d }t	
|}|jddddd	d
}|g d }|d dd |d< |d dd |d< |d dd |d< W |  S  ty| } z
t| W Y d}~qd}~ww ttj)u]  
        获取分笔数据
    Parameters
    ------
        code:string
                  股票代码 e.g. 600848
                  如遇网络等问题重复执行的次数
        pause : int, 默认 0
                 重复请求数据过程中暂停的秒数，防止请求间隔时间太短出现的问题
        src : 数据源选择，可输入sn(新浪)、tt(腾讯)、nt(网易)，默认sn
     return
     -------
        DataFrame 当日所有股票交易数据(DataFrame)
              属性:成交时间、成交价格、价格变动，成交手、成交金额(元)，买卖类型
    zhttp://push2ex.eastmoney.com/getStockFenShi?pagesize=6644&ut=7eea3edcaed734bea9cbfc24409ed989&dpt=wzfscj&pageindex=0&id=%s&sort=1&ft=1&code=%s&market=1&_=%sr   r   r   r@   r  r   r   )rf  r*  vbsr   )r@   r  r   r   c                 S   s   | d S )Nr(  r)   r'   r)   r)   r*   r+     s    z!get_today_ticks.<locals>.<lambda>c                 S   s   t t|  S r   )bs_typer   r'   r)   r)   r*   r+   	  r,   c                 S   r8  r9  r:  r'   r)   r)   r*   r+   
  r<  N)r?   r@   rA   r   r   r
   rB   rE   rF   rL   rM   r  r   rD   r3   rT   r4   rU   )	rV   rZ   r[   r]   r^   rt   r`   rd   ra   r)   r)   r*   get_today_ticks  s(   



r7  u   买入u   卖出r   )rD  24c                 C   s,   | du rt tj dS |  }| |}|S )u$   
            获取市场代码
    N)r3   r4   r  get_marketsr  )r  r   r)   r)   r*   r:    s   

r:  c                 C   s0   t tjtjd tjd | f }|d}|S )Nr   ossr  )rL   r   r4   ADJ_FAC_URLr9   r:   rR   rV   rd   r)   r)   r*   r  !  s
   

r  c                 C   s8   t tjtjd tjd | f ddg }|d}|S )Nr   r;  r  r  )rL   r   r4   SHS_FAC_URLr9   r:   rR   r=  r)   r)   r*   r  (  s   

r     c                 C   s2   ddl m} d| d  }d|  d }t|||S )Nr   )randintr   r   )randomr@  r   )r   r@  rW   rX   r)   r)   r*   r   0  s   r   __main__600000)NNNr   r   r   )Nr   )NNr   r   r   )NNr   r   r   )Nr   r   r   )NNr  Fr   r   T)Nr   r   r   r  Fr   r   )r   r   r   Fr   r   r   )NNr   r   r   )r   r   r   ri  r   )r   ri  N)Nr   ri  r   r   )r?  )L__doc__
__future__r   r@   rE   	lxml.htmlr   r   pandasrL   numpyr,  r  tushare.stockr   r4   rt   tushare.utilr   r   tushare.util.formular   r  r,  r   r   tushare.stock.fundamentalr	   urllib.requestr
   r   ImportErrorurllib2__version__r4  r  r   ior   pandas.compatrf   r   r   r   r   r   r   r  r%  r  r*  r  rA  r  rW  rN  r\  rd  rh  r  r  r  r  r'  r+  r3  r  r7  r6  r:  r  r  r   __name__rd   r3   r)   r)   r)   r*   <module>   s   ,

H#

7
*.
G
s$$

W
(

 

]
 

V7


&


