95 lines
2.7 KiB
Python
95 lines
2.7 KiB
Python
"""
|
|
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))
|