| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- import akshare as ak
- import pandas as pd
- from datetime import datetime, timedelta
- import os
- def get_cyb50_60min_data():
- """获取创业板50指数最近3个月的60分钟K线数据"""
- try:
- print("正在获取创业板50指数(399673)的60分钟K线数据...")
-
- # 获取创业板50指数的60分钟K线数据
- # 使用东方财富接口获取分钟级数据
- data = ak.index_zh_a_hist_min_em(symbol="399673", period="60")
-
- if data.empty:
- print("未获取到数据,请检查网络连接或接口是否可用")
- return None
-
- # 筛选最近3个月的数据
- three_months_ago = datetime.now() - timedelta(days=90)
- data['时间'] = pd.to_datetime(data['时间'])
- data_filtered = data[data['时间'] >= three_months_ago].copy()
-
- print(f"成功获取数据,共 {len(data_filtered)} 条记录")
- print(f"数据时间范围: {data_filtered['时间'].min()} 至 {data_filtered['时间'].max()}")
- print(f"数据列: {list(data_filtered.columns)}")
-
- return data_filtered
-
- except Exception as e:
- print(f"获取数据时出错: {str(e)}")
- return None
- def export_to_csv(data, filename=None):
- """将数据导出到CSV文件"""
- if data is None or data.empty:
- print("没有数据可导出")
- return False
-
- try:
- # 生成文件名
- if filename is None:
- timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
- filename = f"cyb50_60min_kline_{timestamp}.csv"
-
- # 导出到CSV
- data.to_csv(filename, index=False, encoding='utf-8-sig')
- print(f"数据已成功导出到: {filename}")
- print(f"文件大小: {os.path.getsize(filename) / 1024:.2f} KB")
-
- return True
-
- except Exception as e:
- print(f"导出CSV时出错: {str(e)}")
- return False
- def get_cyb50_30min_data():
- """获取创业板50指数最近3个月的30分钟K线数据"""
- try:
- print("正在获取创业板50指数(399673)的30分钟K线数据...")
-
- # 获取创业板50指数的30分钟K线数据
- data = ak.index_zh_a_hist_min_em(symbol="399673", period="30")
-
- if data.empty:
- print("未获取到数据,请检查网络连接或接口是否可用")
- return None
-
- # 筛选最近3个月的数据
- three_months_ago = datetime.now() - timedelta(days=90)
- data['时间'] = pd.to_datetime(data['时间'])
- data_filtered = data[data['时间'] >= three_months_ago].copy()
-
- print(f"成功获取数据,共 {len(data_filtered)} 条记录")
- print(f"数据时间范围: {data_filtered['时间'].min()} 至 {data_filtered['时间'].max()}")
- print(f"数据列: {list(data_filtered.columns)}")
-
- return data_filtered
-
- except Exception as e:
- print(f"获取数据时出错: {str(e)}")
- return None
- def get_cyb50_15min_data():
- """获取创业板50指数最近1个月的15分钟K线数据"""
- try:
- print("正在获取创业板50指数(399673)的15分钟K线数据...")
-
- # 获取创业板50指数的15分钟K线数据
- data = ak.index_zh_a_hist_min_em(symbol="399673", period="15")
-
- if data.empty:
- print("未获取到数据,请检查网络连接或接口是否可用")
- return None
-
- # 筛选最近1个月的数据
- one_month_ago = datetime.now() - timedelta(days=30)
- data['时间'] = pd.to_datetime(data['时间'])
- data_filtered = data[data['时间'] >= one_month_ago].copy()
-
- print(f"成功获取数据,共 {len(data_filtered)} 条记录")
- print(f"数据时间范围: {data_filtered['时间'].min()} 至 {data_filtered['时间'].max()}")
- print(f"数据列: {list(data_filtered.columns)}")
-
- return data_filtered
-
- except Exception as e:
- print(f"获取数据时出错: {str(e)}")
- return None
- def main():
- """主函数"""
- print("=" * 50)
- print("创业板50指数K线数据获取工具")
- print("=" * 50)
-
- # 获取60分钟数据
- print("\n【60分钟K线数据】")
- data_60 = get_cyb50_60min_data()
-
- if data_60 is not None:
- # 显示前5条数据预览
- print("\n数据预览:")
- print(data_60.head())
-
- # 导出到CSV
- export_to_csv(data_60)
-
- print("\n数据统计信息:")
- print(data_60.describe())
- else:
- print("60分钟数据获取失败")
-
- # 获取30分钟数据
- print("\n" + "=" * 50)
- print("【30分钟K线数据】")
- data_30 = get_cyb50_30min_data()
-
- if data_30 is not None:
- # 显示前5条数据预览
- print("\n数据预览:")
- print(data_30.head())
-
- # 导出到CSV(带30分钟标识)
- export_to_csv(data_30, filename=f"cyb50_30min_kline_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv")
-
- print("\n数据统计信息:")
- print(data_30.describe())
- else:
- print("30分钟数据获取失败")
-
- # 获取15分钟数据
- print("\n" + "=" * 50)
- print("【15分钟K线数据】")
- data_15 = get_cyb50_15min_data()
-
- if data_15 is not None:
- # 显示前5条数据预览
- print("\n数据预览:")
- print(data_15.head())
-
- # 导出到CSV(带15分钟标识)
- export_to_csv(data_15, filename=f"cyb50_15min_kline_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv")
-
- print("\n数据统计信息:")
- print(data_15.describe())
- else:
- print("15分钟数据获取失败")
- if __name__ == "__main__":
- main()
|