""" ZYJ-20260401-001 - edict集成测试任务 获取沪深300指数(000300.SH)最近5个交易日收盘价 计算每日涨跌幅和5日平均收盘价 """ import akshare as ak import pandas as pd from datetime import datetime # 获取沪深300指数历史数据 print("🚀 开始获取沪深300指数(000300.SH)数据...") # 用akshare获取 df = ak.stock_zh_index_daily(symbol="sh000300") # 将date列转为datetime并设置为索引 df['date'] = pd.to_datetime(df['date']) df = df.set_index('date') # 获取最近5个交易日 df_last5 = df.tail(5).copy() # 计算每日涨跌幅 df_last5['pct_change'] = df_last5['close'].pct_change() * 100 # 计算5日平均收盘价 avg_close_5d = df_last5['close'].mean() # 格式化输出 print("\n📊 沪深300指数最近5个交易日数据:") print("=" * 80) print(f"{'日期':<12} {'收盘价':>12} {'涨跌幅(%)':>10}") print("-" * 80) result_data = [] for idx, row in df_last5.iterrows(): date_str = idx.strftime("%Y-%m-%d") close = float(row['close']) pct = float(row['pct_change']) if not pd.isna(row['pct_change']) else None pct_str = f"{pct:.2f}" if pct is not None else "-" print(f"{date_str:<12} {close:>12.2f} {pct_str:>10}") result_data.append({ 'date': date_str, 'close': close, 'pct_change': pct }) print("-" * 80) print(f"{'5日平均收盘价':<12} {avg_close_5d:>12.2f}") print("=" * 80) # 分析趋势 last_close = result_data[-1]['close'] first_close = result_data[0]['close'] total_change = (last_close - first_close) / first_close * 100 print(f"\n📈 趋势分析:") print(f"- 起始日期: {result_data[0]['date']}") print(f"- 起始收盘价: {first_close:.2f}") print(f"- 最新日期: {result_data[-1]['date']}") print(f"- 最新收盘价: {last_close:.2f}") print(f"- 5日累计涨跌幅: {total_change:.2f}%") if total_change > 1: trend = "明显上行趋势" elif total_change < -1: trend = "明显下行趋势" else: trend = "横盘震荡整理" print(f"- 趋势判断: {trend}") # 保存结果到文件 output_file = "/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live/zhaoyun-data/research/task-20260401-edict-test/result.csv" df_save = pd.DataFrame(result_data) df_save.to_csv(output_file, index=False) print(f"\n💾 结果已保存到: {output_file}") # 输出json格式结果 result_json = { 'task_id': 'ZYJ-20260401-001', 'symbol': '000300.SH', 'name': '沪深300指数', 'data': result_data, 'avg_close_5d': round(avg_close_5d, 2), 'total_change_pct': round(total_change, 2), 'trend': trend, 'generated_at': datetime.now().isoformat() } print("\n📋 JSON结果:") import json print(json.dumps(result_json, indent=2, ensure_ascii=False))