You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用yfinance与lightweight-charts时出现数据下载失败问题求助

解决方案:修复lightweight-charts-python代码中的错误

问题分析

你的代码存在三个核心问题:

  1. yfinance下载参数错误:你传入了字符串"stocks"而非定义好的列表变量stocks,导致yfinance尝试下载不存在的STOCKS股票,触发时区错误。
  2. Chart实例未初始化:直接调用chart.set(df1)但从未创建Chart对象,会引发未定义错误。
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:10:33