| 12345678910111213141516171819202122232425262728293031323334 |
- import pandas as pd
- import sys
- # 读取本地 parquet 数据
- df = pd.read_parquet('/home/erwin/.openclaw/workspace/cyb50-quant/index-rotation/data/features/chinext50/daily.parquet')
- print(f"原始数据列: {df.columns.tolist()}")
- print(f"数据条数: {len(df)}")
- print(f"日期范围: {df['trade_date'].min()} 至 {df['trade_date'].max()}")
- # 转换为 backtrader 格式
- df_bt = df.rename(columns={
- 'trade_date': 'datetime',
- 'close': 'close',
- }).copy()
- # backtrader 需要 open/high/low/close/volume
- # 如果原始数据有这些列,直接使用;如果没有,用 close 填充
- if 'open' not in df_bt.columns:
- df_bt['open'] = df_bt['close']
- if 'high' not in df_bt.columns:
- df_bt['high'] = df_bt['close']
- if 'low' not in df_bt.columns:
- df_bt['low'] = df_bt['close']
- if 'volume' not in df_bt.columns:
- df_bt['volume'] = 0
- df_bt['datetime'] = pd.to_datetime(df_bt['datetime'])
- df_bt.set_index('datetime', inplace=True)
- # 保存为 CSV
- df_bt.to_csv('/home/erwin/.openclaw/workspace/cyb50-quant/backtrader-lab/chinext50.csv')
- print(f"\n数据已转换并保存到 backtrader-lab/chinext50.csv")
- print(f"共 {len(df_bt)} 条记录")
|