#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 创业板50指数数据获取脚本 数据来源:baostock (证券宝) - http://www.baostock.com """ import baostock as bs import pandas as pd from datetime import datetime def fetch_cyb50_data(): """ 获取创业板50指数历史数据 指数代码:sz.399673 """ # 登录baostock lg = bs.login() if lg.error_code != '0': print(f"登录失败: {lg.error_msg}") return None print("登录成功,开始获取数据...") # 获取创业板50指数日线数据 # 参数说明: # - code: 指数代码 sz.399673 (深圳.创业板50) # - fields: 获取的字段 (日期, 开盘价, 最高价, 最低价, 收盘价, 成交量) # - start_date: 开始日期 # - end_date: 结束日期 rs = bs.query_history_k_data_plus( "sz.399673", "date,open,high,low,close,volume", start_date='2017-01-01', end_date='2025-12-31', frequency='d', # 日频 adjustflag='3' # 不复权 (指数不需要复权) ) if rs.error_code != '0': print(f"数据获取失败: {rs.error_msg}") bs.logout() return None # 解析数据 data_list = [] while rs.next(): data_list.append(rs.get_row_data()) # 转换为DataFrame df = pd.DataFrame(data_list, columns=['date', 'open', 'high', 'low', 'close', 'volume']) # 数据类型转换 for col in ['open', 'high', 'low', 'close', 'volume']: df[col] = pd.to_numeric(df[col], errors='coerce') # 保存为CSV df.to_csv('cyb50_baostock.csv', index=False) print(f"数据获取成功!") print(f" 数据区间: {df['date'].iloc[0]} ~ {df['date'].iloc[-1]}") print(f" 总交易日: {len(df)} 天") print(f" 保存文件: cyb50_baostock.csv") # 登出 bs.logout() return df if __name__ == "__main__": df = fetch_cyb50_data() if df is not None: print("\n数据预览:") print(df.head()) print("...") print(df.tail())