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

如何从yf.download返回的DataFrame中提取拟合所需的X、Y值

股票价格回归与求导分析实现方案

数据提取转换

yfinance返回的DataFrame索引为datetime格式,需要先转为numpy.polyfit支持的数值型X轴:

import numpy as np

# Y轴取收盘价作为价格走势指标
Y = df['Close'].values
# X轴转为从统计起始日开始的天数(整数格式)
X = (df.index - df.index[0]).days.values

多项式回归拟合

通过np.polyfit实现拟合,阶数建议选1-3阶,阶数过高容易出现过拟合:

# 以2阶多项式拟合为例,返回系数按高次到低次排列
coeffs = np.polyfit(X, Y, deg=2)
# 生成可直接调用的多项式拟合函数
poly_func = np.poly1d(coeffs)
# 计算拟合后的价格序列用于绘图对比
Y_fit = poly_func(X)

拟合结果可视化

plt.figure(figsize=(12,6))
plt.scatter(df.index, Y, label='原始收盘价', s=8, alpha=0.6)
plt.plot(df.index, Y_fit, label='2阶拟合曲线', color='red', linewidth=2)
plt.title(f'{stock} 价格走势拟合')
plt.xlabel('日期')
plt.ylabel('价格(美元)')
plt.legend()
plt.grid(alpha=0.3)
plt.show()

拟合函数求导分析

直接调用np.poly1d内置的求导方法即可,一阶导对应价格涨跌速度,二阶导对应涨跌加速度:

# 计算一阶导、二阶导函数
first_deriv = poly_func.deriv(m=1)
second_deriv = poly_func.deriv(m=2)

# 生成每日的导数值序列
daily_speed = first_deriv(X)
daily_accel = second_deriv(X)

# 可视化一阶导(涨跌速度)
plt.figure(figsize=(12,4))
plt.plot(df.index, daily_speed, label='价格涨跌速度(一阶导)', color='orange')
plt.axhline(y=0, color='gray', linestyle='--')
plt.title(f'{stock} 拟合价格一阶导数走势')
plt.legend()
plt.grid(alpha=0.3)
plt.show()

注意事项

  • 多项式阶数不建议超过3,阶数过高会导致拟合曲线过度贴合历史波动,失去趋势参考价值
  • 一阶导持续大于0说明拟合区间内价格整体处于上升趋势,数值由正转负可作为趋势反转的参考信号
  • 本方法仅为历史走势拟合工具,不构成任何投资建议

内容的提问来源于stack exchange,提问作者BenjaminDiLorenzo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:57:05