使用Alpaca Paper Markets获取股票数据时遇AttributeError求助
解决Alpaca API的AttributeError: 'REST' object has no attribute 'get_barset'问题
错误原因
你使用的是Alpaca API v2,但get_barset是v1版本专属的历史数据获取方法,v2版本已移除该接口,改用get_bars方法替代。
修正后的代码实现
1. 保留原有初始化代码(无需修改)
import os import pandas as pd import alpaca_trade_api as tradeapi from dotenv import load_dotenv load_dotenv('.env') alpaca_api_key = os.getenv("ALPACA_API_KEY") alpaca_secret_key = os.getenv("ALPACA_SECRET_KEY") alpaca = tradeapi.REST( alpaca_api_key, alpaca_secret_key, api_version="v2" )
2. 调整历史数据获取逻辑
替换原get_barset调用,改用v2兼容的get_bars方法,并适配结果转换逻辑:
ticker = ["TSLA", "KO"] # 替换为你的目标股票列表 timeframe = "1D" start_date = pd.Timestamp("2021-07-26", tz="America/New_York").isoformat() end_date = pd.Timestamp("2022-07-26", tz="America/New_York").isoformat() # 使用v2接口获取数据 bars = alpaca.get_bars( tickers=ticker, timeframe=timeframe, start=start_date, end=end_date, limit=1000 ) # 转换为Pandas DataFrame(两种可选方式) # 方式1:直接调用BarSet的df属性,生成多层索引DataFrame(最接近原逻辑) df_ticker = bars.df # 方式2:手动拼接,自定义结构(适合需要调整列顺序/新增字段的场景) # df_list = [] # for symbol in ticker: # symbol_df = pd.DataFrame(bars[symbol], columns=['timestamp', 'open', 'high', 'low', 'close', 'volume']) # symbol_df['symbol'] = symbol # df_list.append(symbol_df) # df_ticker = pd.concat(df_list).set_index(['symbol', 'timestamp'])
关键注意点
get_bars参数需用tickers指定标的列表(原get_barset用第一个位置参数)- 返回的
BarSet对象仍保留.df属性,直接生成外层为标的代码、内层为时间戳的多层索引DataFrame - 如需自定义数据结构,可遍历每个标的的Bar数据手动拼接
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

