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)} 条记录")