使用yfinance与lightweight-charts时出现数据下载失败问题求助
解决方案:修复lightweight-charts-python代码中的错误
问题分析
你的代码存在三个核心问题:
- yfinance下载参数错误:你传入了字符串
"stocks"而非定义好的列表变量stocks,导致yfinance尝试下载不存在的STOCKS股票,触发时区错误。 - Chart实例未初始化:直接调用
chart.set(df1)但从未创建Chart对象,会引发未定义错误。 - Tick数据格式问题:从CSV读取的tick时间是字符串,需要转换为datetime类型才能被
update_from_tick正确识别。
修正后的完整代码
import datetime as dt from time import sleep from lightweight_charts import Chart import pandas as pd import numpy as np import yfinance as yf # 初始化Chart实例(关键修复) chart = Chart() ticker = yf.Ticker('MSFT') hist = ticker.history(period="max") stocks = ['TSLA', 'MSFT', 'NIO', 'AAPL', 'AMD', 'ADBE', 'ALGN', 'AMZN', 'AMGN', 'AEP', 'ADI', 'ANSS', 'AMAT', 'ASML', 'TEAM', 'ADSK'] # 修复:传入列表变量stocks而非字符串"stocks" data = yf.download(stocks, start="2023-01-01", end="2023-11-15", interval = "3mo") df1 = pd.read_csv('/Users/cilincilin/lightweight_chart/ohlc.csv') # 确保OHLC数据的时间列是datetime格式 df1['time'] = pd.to_datetime(df1['time']) df2 = pd.read_csv('/Users/cilincilin/lightweight_chart/ticks.csv') # 修复tick数据的时间格式,移除无用列 df2 = df2.drop(columns=['Unnamed: 0']) df2['time'] = pd.to_datetime(df2['time']) print(df2) chart.set(df1) # 先显示基础图表 chart.show() for i, tick in df2.iterrows(): # 转换为update_from_tick要求的字典格式 chart.update_from_tick({ 'time': tick['time'], 'price': tick['price'] }) sleep(0.03) chart.show(block=True)
关键修复点说明
- Chart初始化:添加
chart = Chart()创建图表实例,避免出现NameError。 - yfinance参数修正:将字符串参数改为预定义的股票列表变量,确保正确批量下载股票数据。
- 时间格式转换:对OHLC和tick数据的
time列执行类型转换,保证图表能正确解析时间戳。 - Tick数据格式适配:
update_from_tick需要传入包含time和price键的字典,直接传入DataFrame行数据会导致格式不兼容。
内容的提问来源于stack exchange,提问作者Jane Oliver
相关产品推荐
相关产品推荐

