金融科技专业学习 python之获取日K数据

金融科技专业学习 python之获取日K数据

asmcosasmcos
1 次阅读
Python金融科技数据获取
文章目录

根据你提供的腾讯财经API接口,下面是一个完整的Python示例,演示如何获取股票日K线数据并转换为Pandas DataFrame。


📦 完整代码示例

python
import requestsimport pandas as pdimport jsonimport redef fetch_stock_kline(stock_code, days=320):    """    从腾讯财经API获取股票日K线数据        参数:        stock_code: 股票代码,如 'sz002129' 或 'sh600000'        days: 获取的天数,默认320天        返回:        Pandas DataFrame,包含日期、开盘、收盘、最高、最低、成交量等    """    # 1. 构建请求URL    url = (        f"https://proxy.finance.qq.com/ifzqgtimg/appstock/app/newfqkline/get"        f"?_var=kline_dayqfq&param={stock_code},day,,,{days},qfq"        f"&r={__import__('random').random()}"    )        # 2. 发送请求    headers = {        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'    }    response = requests.get(url, headers=headers)        # 3. 解析JSONP响应 (去除开头的 "kline_dayqfq=")    raw_text = response.text    json_text = raw_text.replace('kline_dayqfq=', '')    data = json.loads(json_text)        # 4. 提取K线数据    kline_data = data['data'][stock_code]['qfqday']        # 5. 转换为DataFrame    columns = ['日期', '开盘', '收盘', '最高', '最低', '成交量', '未知', '涨跌幅', '成交额', '未知2']    df = pd.DataFrame(kline_data, columns=columns)        # 6. 只保留需要的列    df = df[['日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额', '涨跌幅']]        # 7. 转换数据类型    df['日期'] = pd.to_datetime(df['日期'])    df['开盘'] = df['开盘'].astype(float)    df['收盘'] = df['收盘'].astype(float)    df['最高'] = df['最高'].astype(float)    df['最低'] = df['最低'].astype(float)    df['成交量'] = df['成交量'].astype(float)    df['成交额'] = df['成交额'].astype(float)    df['涨跌幅'] = df['涨跌幅'].astype(float)        # 8. 按日期升序排列(API返回的是从新到旧)    df = df.sort_values('日期', ascending=True).reset_index(drop=True)        return df# ========== 使用示例 ==========if __name__ == '__main__':    # 获取 TCL中环 (sz002129) 的K线数据    df = fetch_stock_kline('sz002129', days=320)        print("数据概览:")    print(df.head())    print("\n数据信息:")    print(df.info())    print("\n统计描述:")    print(df.describe())

📊 数据字段说明

API返回的每一条数据是一个数组,各字段含义如下:

索引字段名说明
0日期交易日期,格式 YYYY-MM-DD
1开盘开盘价
2收盘收盘价(前复权)
3最高最高价
4最低最低价
5成交量成交量(手)
6未知空对象 {},可忽略
7涨跌幅当日涨跌幅(百分比)
8成交额成交额(万元)
9未知2空字符串,可忽略

注意:API返回的数据是从最近日期到较远日期倒序排列的,代码中已做了升序处理。


🎨 结合 mplfinance 绘制K线图

获取数据后,可以直接用 mplfinance 绘制K线图:

python
import mplfinance as mpf# 获取数据df = fetch_stock_kline('sz002129', days=120)# mplfinance 要求列名为 Open, High, Low, Close, Volume# 并且索引为 DatetimeIndexdf_plot = df[['日期', '开盘', '最高', '最低', '收盘', '成交量']].copy()df_plot.columns = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume']df_plot = df_plot.set_index('Date')# 绘制K线图mpf.plot(df_plot, type='candle', style='yahoo',          title='TCL中环 (002129) 日K线图',         volume=True, figsize=(12, 8))

📝 URL参数解读

bash
https://proxy.finance.qq.com/ifzqgtimg/appstock/app/newfqkline/get    ?_var=kline_dayqfq          # 变量名,用于JSONP回调    &param=sz002129,day,,,320,qfq  # 参数:股票代码,周期,开始,结束,天数,复权类型    &r=0.48251696632573515      # 随机数,防止缓存

参数 param 各字段含义:

  • sz002129:股票代码(深市以 sz 开头,沪市以 sh 开头)
  • day:周期,day=日K,week=周K,month=月K
  • ,,:起始和结束日期(留空表示取最新数据)
  • 320:获取的天数
  • qfq:复权类型,qfq=前复权,hfq=后复权,空=不复权

💡 小贴士

  1. 股票代码前缀:深市用 sz(如 sz000001),沪市用 sh(如 sh600000)。
  2. 成交量单位:API返回的成交量是(1手=100股),成交额单位是万元
  3. 频率限制:该接口为公开接口,但频繁请求可能被限制,建议适当增加延时或缓存数据。

评论区0

还没有评论,快来抢沙发吧~

登录 后可发表评论