o
    iw]                     @   s  d 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	m
Z
 ddl	mZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZmZmZmZ d5ddZdd Zedddd6ddZi ad7ddZ dd Z!dd Z"eddddd di fd!ee# d"ee$ d#ee$ d$ee% d%ej&f
d&dZ'di fd#ee$ d$ee% d%ej&fd'd(Z(d%e$fd)d*Z)d di fd"ee$ d#ee$ d$ee% d%ej&fd+d,Z*d7d-d.Z+d/d0 Z,d1d2 Z-e.d3kre'dd4Z/e0e/ dS dS )8uc   
所有 A 股的实时行情数据
Created on 2023/12/06
@author: Monday
@group : waditu
@contact:
    N)tqdm)Optional)symbol_verify)format_stock_codeverify_stock_or_index)timestemp_to_time)rtq_vars)require_permission)cons)zh_sina_a_stock_payloadzh_sina_a_stock_urlzh_sina_a_stock_count_urlzh_sina_a_stock_headerszh_sina_a_stock_cookies   c                 C   s2   ddl m} d| d  }d|  d }t|||S )Nr   )randint
      )randomr   str)nr   startend r   D/opt/alphahud/venv/lib/python3.10/site-packages/tushare/stock/rtq.py_random    s   r   c                   C   s   t tt d S )Ni  )r   inttimer   r   r   r   _get_current_timestamp'   s   r   realtime_quoteu   个股实时交易数据)
event_nameevent_detail	688553.SHsinac                 C   s    t | }|dkrt|S t|S )uX  
        获取实时交易数据 getting real time quotes data
       用于跟踪交易情况（本次执行的结果-上一次执行的数据）
    Parameters
    ------
        ts_code : string
        src : sina ，dc

    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   get_realtime_quotes_sinaget_realtime_quotes_dc)ts_codesrcsymbolsr   r   r   r   +   s   '688553c                 C   sH  g }g }dd |  dD D ]%}| d}|d  t|d < ||d  |d   ||d  qd}t|tsKt|tsKt|tsKt|t	j
rW|D ]}||d 7 }qMn|}t|dkre|d d	 n|}tjtjd
 tjd t |f }tj|ddddd}|jd}	td}
|
|	}g }g }t|D ]"\}}t|dkr|dd | dd d D  |||  qt|dkrd S t	j|tjd}|jddd}||d< dd |jD }|D ]}|| dd ||< qtj|_|d t |d< |d t!|d< tj"}|| }g d}|| jt	j#dd ||< |$d}|S )!Nc                 S      g | ]}|qS r   r   ).0jr   r   r   
<listcomp>`       z,get_realtime_quotes_sina.<locals>.<listcomp>,.r   r       httpsinahqz}Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0zhq.sinajs.cnzhttps://finance.sina.com.cn/)z
user-agenthostreferer)headersGBKz\="(.*?)\";c                 S   r*   r   r   )r+   astrr   r   r   r-   |   r.   !   columnss)axiscodec                 S   s   g | ]}d |v r|qS )_vr   )r+   clsr   r   r   r-      s    c                 S   s   | d d S )Nr   xr   r   r   <lambda>   s    z*get_realtime_quotes_sina.<locals>.<lambda>TS_CODEDATE)OPEN	PRE_CLOSEPRICEHIGHLOWBIDASKVOLUMEAMOUNTB1_VB1_PB2_VB2_PB3_VB3_PB4_VB4_PB5_VB5_PA1_VA1_PA2_VA2_PA3_VA3_PA4_VA4_PA5_VA5_Pcoerceerrors)%splituppersina_stock_codeappendlower
isinstancelistsettuplepdSerieslenctLIVE_DATA_URLP_TYPEDOMAINSr   requestsgetcontentdecoderecompilefindall	enumerate	DataFrameLIVE_DATA_COLSdropr=   maprtqvapplyformat_sina_stock_codeformat_date_strLIVE_DATA_COLS_REINDEX
to_numericfillna)symbolr(   symsir>   symbols_listr@   root_urlresponsetextregdata	data_list	syms_listindexrowdflstxt	new_ordercols_to_convert	df_filledr   r   r   r$   \   sh   

 

"
r$   c                 C   s   |  dt |   }|S )Nr0   )rk   )rE   r&   r   r   r   r      s   r   c                 C   s   |  ddS )N-r1   )replace)date_strr   r   r   r      s   r   realtime_listu   A股所有实时交易数据   r'   interval
page_countproxiesreturnc                 C   s0   | dkr	t ||S | dkrt|||S t ||S )u=  
    沪深京 A 股 all -实时行情
    @param src:  数据源 新浪sina |东方财富 dc
    @param interval:  分页采集时间间隔（默认3秒翻译一夜）
    @param page_count:  限制抓取的页数（仅对新浪有效）
    @param proxies:  设置代理 防止被封禁
    @return: 按涨跌幅 倒序排序
    -------
        DataFrame 实时交易数据
        东方财富：
            2、代码:TS_CODE
            3、名称:NAME
            4、最新价:CLOSE
            5、涨跌幅:PCT_CHANGE
            6、涨跌额:CHANGE
            7、成交量:VOLUME
            8、成交额:AMOUNT
            9、振幅:SWING
            10、最高:HIGH
            11、最低:LOW
            12、今开:OPEN
            13、昨收:PRICE
            14、量比:VOL_RATIO
            15、换手率:TURNOVER_RATE
            16、市盈率-动态:PE
            17、市净率:PB
            18、总市值:TOTAL_MV
            19、流通市值:FLOAT_MV
            20、涨速:RISE
            21、5分钟涨跌:5MIN
            22、60日涨跌幅:60DAY
            23、年初至今涨跌幅:1YEAR
        新浪财经：
            1、代码:TS_CODE
            2、名称:NAME
            3、最新价:CLOSE
            4、涨跌额:CHANGE
            5、涨跌幅:PCT_CHANGE
            6、买入:BUY
            7、卖出:SALE
            8、昨收:CLOSE
            9、今开:OPEN
            10、最高:HIGH
            11、最低:LOW
            12、成交量:VOLUME
            13、成交额:AMOUNT
            14、时间戳:TIME

    dcr#   )get_stock_all_a_dcget_stock_all_a_sina)r'   r   r   r   r   r   r   r      s
   4

c                 C   s  g }t ddD ]I}d}|dddddddd	d
dd}| r d|d< tj|||d}| }|d s3 nt|d d }g d|_|jdd |g d }|d t	|d< tj
|d dd|d< tj
|d dd|d< tj
|d dd|d< tj
|d dd|d< tj
|d dd|d< tj
|d dd|d< tj
|d dd|d< tj
|d  dd|d < tj
|d! dd|d!< tj
|d" dd|d"< tj
|d# dd|d#< tj
|d$ dd|d$< tj
|d% dd|d%< tj
|d& dd|d&< tj
|d' dd|d'< tj
|d( dd|d(< tj
|d) dd|d)< tj
|d* dd|d*< tj
|d+ dd|d+< tj
|d, dd|d,< g d-|_g d.}	||	 jtj
dd||	< || | rQ nqtj|dd/}
|
d0}|jd1d2d3jdd4}|S )5uN  
    东方财富网-沪深京 A 股-实时行情
    https://quote.eastmoney.com/center/gridlist.html#hs_a_board
    :return: 实时行情
    :rtype: pandas.DataFrame
        1、序号:RANK
        2、代码:TS_CODE
        3、名称:NAME
        4、最新价:PRICE
        5、涨跌幅:PCT_CHANGE
        6、涨跌额:CHANGE
        7、成交量:VOLUME
        8、成交额:AMOUNT
        9、振幅:SWING
        10、最高:HIGH
        11、最低:LOW
        12、今开:OPEN
        13、昨收:CLOSE
        14、量比:VOL_RATIO
        15、换手率:TURNOVER_RATE
        16、市盈率-动态:PE
        17、市净率:PB
        18、总市值:TOTAL_MV
        19、流通市值:FLOAT_MV
        20、涨速:RISE
        21、5分钟涨跌:5MIN
        22、60日涨跌幅:60DAY
        23、年初至今涨跌幅:1YEAR
    r   i  z.http://82.push2.eastmoney.com/api/qt/clist/get2001 bd1d9ddb04089700cf9c27f6f74262812f3z1m:0 t:6,m:0 t:80,m:1 t:2,m:1 t:23,m:0 t:81 s:2048znf1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f1521623833739532)pnpzponputflttinvtfidfsfields_   r   )paramsr   r   diff)r   	   最新价	   涨跌幅	   涨跌额	   成交量	   成交额   振幅	   换手率   市盈率-动态   量比   5分钟涨跌   代码r      名称   最高   最低   今开   昨收	   总市值   流通市值   涨速	   市净率   60日涨跌幅   年初至今涨跌幅r   r   r   r   r   r   r   T)inplace)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rf   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rG   NAMErK   
PCT_CHANGECHANGErP   rQ   SWINGrL   rM   rI   CLOSE	VOL_RATIOTURNOVER_RATEPEPBTOTAL_MVFLOAT_MVRISE5MIN60DAY1YEAR)rK   r   r   rP   rQ   r   rL   rM   rI   r   r   r   r   r   r   r   r   r   r   r   ignore_indexr   r   Fby	ascendingr   )rangery   rz   jsonrr   r   r=   reset_indexr   r   r   rl   concatr   sort_values)r   r   dfspageurlr   r	data_jsontemp_dfr   	result_dfr   	df_sortedr   r   r   r      sz   
!

r   c                  C   sD   t t} tttd| jd d }t|tr|S t|d S )u   
    所有股票的总页数
    https://vip.stock.finance.sina.com.cn/mkt/#hs_a
    :return: 需要采集的股票总页数
    :rtype: int
    z\d+r   P   r   )	ry   rz   r   r   r}   r   r~   r   rn   )resr   r   r   r   _get_zh_a_page_count  s
   
 
r   c           	      C   s:  t  }|s	t }t }ttd|d dddD ](}|d|i tj	t
tt||d}| }t j|t |gdd}t|  q|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
}g d|_|g d }|d t|d< g d|_|jdddjdd }|S )!u  
    新浪财经-所有 A 股的实时行情数据; 重复运行本函数会被新浪暂时封 IP
    https://vip.stock.finance.sina.com.cn/mkt/#hs_a
    :param interval:请求间隔时间
    :param page_count:限制抓取页数
    :param proxies: 代理ip {}
    :return: 所有股票的实时行情数据
    :rtype: pandas.DataFrame
        1、代码:TS_CODE
        2、名称:NAME
        3、最新价:PRICE
        4、涨跌额:CHANGE
        5、涨跌幅:PCT_CHANGE
        6、买入:BUY
        7、卖出:SALE
        8、昨收:CLOSE
        9、今开:OPEN
        10、最高:HIGH
        11、最低:LOW
        12、成交量:VOLUME
        13、成交额:AMOUNT
        14、时间戳:TIME

    r   FzPlease wait for a moment)leavedescr   )r8   cookiesr   r   Tr   tradefloatpricechangechangepercentbuysell
settlementopenhighlowvolumeamountperpbmktcapnmcturnoverratio)r   r   r   r   r   r      买入   卖出r   r   r   r   r   r   	   时间戳r   r   r   r   r   )r   r   r   r   r   r  r  r   r   r   r   r   r   r  r   )rG   r   rK   r   r   BUYSALEr   rI   rL   rM   rP   rQ   TIMEr   r   r   )rr   r   r   r   copyr   r   updatery   rz   r   r   r   r   r   r   sleepastyper=   r   r   r   r   )	r   r   r   big_dfzh_sina_stock_payload_copyr   r   r   r   r   r   r   r     s|   
	


r   c           +      C   s  t | dd } d}td| tjtjB d}dddd	| d
dt d}t| s2d| |d< t	j
|tjtj|d}| d }|sIt S |d }|d }|d }|d }	|d }
|d }t|d }|d }t|d }|d }t|d }|d }t|d }|d }t|d }|d  }t|d! }|d" }t|d# }|d$ }t|d% }|d& }t|d' }|d( }t|d) }|d* }t|d+ } | dd, }!| d,d- }"t|d. }#t|d/ }$t|d  }%t|d* }&| }'g |||	|||
|%|&|#|$|||||||||||||||||||||!|"|'g}(tj|(tjd0})|)d1 t|)d1< |)d2 t|)d2< |)d3 t|)d3< |)d4 t|)d4< |)d5 t|)d5< |)d6 t|)d6< |)d7 t|)d7< |)d8 t|)d8< |)d9 t|)d9< |)d: t|)d:< |)d; t|)d;< |)d< t|)d<< |)d= t|)d=< |)d> t|)d>< |)d? t|)d?< |)d@ t|)d@< |)dA t|)dA< |)dB t|)dB< tj}*|)|* })|)S )Cz3
    https://quote.eastmoney.com/sh601096.html
    r/   r   z,https://push2.eastmoney.com/api/qt/stock/getz(\d+)r   r   r   ar  f58,f734,f107,f57,f43,f59,f169,f301,f60,f170,f152,f177,f111,f46,f44,f45,f47,f260,f48,f261,f279,f277,f278,f288,f19,f17,f531,f15,f13,f11,f20,f18,f16,f14,f12,f39,f37,f35,f33,f31,f40,f38,f36,f34,f32,f211,f212,f213,f214,f215,f210,f209,f208,f207,f206,f161,f49,f171,f50,f86,f84,f85,f168,f108,f116,f167,f164,f162,f163,f92,f71,f117,f292,f51,f52,f191,f192,f262,f294,f295,f748,f747z0. fa5fd1943c7b386f172d6893dbfba10bz
|0|0|0|web)r   r   r   secidr   wbp2ur   z1.r  )r8   r   r   r   f58f46f44f60f45f43f12f11f14f13f16f15f18f17f20f19f32f31f34f33f36f35f38f37f40f39f86r   Nf47f48r<   rH   rO   rI   rL   rM   rJ   rN   r]   r_   ra   rc   re   rK   rS   rU   rW   rY   r[   )r   ri   r}   searchSMgroupr   r   ry   rz   r   
dc_cookies
dc_headersr   rr   r   format_str_to_floatr   r   r   r   format_dc_strr   )+r(   r   r   r   r   	data_infonamer  r  	pre_closer  priceb5_vb5_pb4_vb4_pb3_vb3_pb2_vb2_pb1_vb1_pa5_va5_pa4_va4_pa3_va3_pa2_va2_pa1_va1_p	date_timedatetimesr  r	  bidaskr@   r   r   r   r   r   r   r%   %  s   
*r%   c                 C   s   | dkr
t | d S dS )Nr   d   r   r   rD   r   r   r   rB  {  s   rB  c                 C   s&   z| dkr
t | W S dW S    Y dS )Nr1   r   ra  rD   r   r   r   rA    s   rA  __main__)r'   )r   )r"   r#   )r)   )1__doc__r   pandasrr   ry   r   typingr   r}   tushare.util.format_stock_coder   r   r   tushare.util.form_dater   tushare.stockr   r   tushare.util.verify_tokenr	   r
   ru   tushare.stock.rtq_varsr   r   r   r   r   r   r   r   rk   r$   r   r   r   r   dictr   r   r   r   r   r%   rB  rA  __name__r   printr   r   r   r   <module>   sp   


-
<
;
 9
 
V
