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

如何准确计算股票SMA斜率以匹配TradingView显示结果?

核心误差根源

算出的80度左右的结果,是基于“纵轴每单位价格长度=横轴每单位K线长度”的等比例数学坐标系得到的理论角度,但交易软件的K线图是双轴独立自适应拉伸的:横轴按屏幕总宽度均匀分配每根K线的像素宽度,纵轴按当前显示区间的价格高低差分配像素高度,两个轴的缩放比例完全不统一,根本不存在固定的角度映射关系。
举个最直白的例子:同样是66个交易日涨500点,把图表窗口横向拉得越宽,线看起来就越平;把窗口拉得越窄,线看起来就越接近90度垂直。TradingView截图里肉眼看到的线的倾斜角度,是随窗口大小实时变化的,和用数学公式算出的固定理论值对不上是必然结果。

代码逻辑硬伤

就算抛开坐标系的显示差异,现有计算逻辑也存在两处核心错误:

  • 对数据顺序的操作完全反向。正常从行情接口拉到的EOD数据,本来就是按时间从早到晚排序的(2014年的旧数据在前,2021年的新数据在后),rolling计算SMA本来就会从最早的日期开始攒满窗口值,最新的SMA在DataFrame最后一行,根本不需要用df.iloc[::-1]反转。强行反转之后,相当于把时间倒序,rolling窗口从最新日期往旧日期算,把本来有效的SMA值全变成了开头的NaN,计算逻辑完全颠倒。
  • 取数位置严重偏移。反转后的DataFrame里,index 0是最新的2021年5月的价格,df['SMA'][timeshort]取的是index为66的位置的SMA——这个位置按提供的样例数据,是离最新日期差了快1800行的2014年的早期数据,根本不是66个交易日前的SMA值。拿跨了好几年的两个SMA值算差值,结果自然完全不对。
  • 用np.polyfit的方法算出的结果接近80度,本质也是取数范围错误,拿到了跨极大时间范围的SMA序列做拟合,和TradingView上66根K线范围内的斜率根本不是一回事。

正确的对齐方式

如果目标不是算屏幕上随窗口变化的视觉角度,而是得到和TradingView内置指标一致的SMA斜率数值,按以下逻辑调整即可:

  • 删掉DataFrame反转的代码,保持接口返回的时间升序排列,再用rolling(window=66).mean()算SMA,得到的SMA值就会和TradingView的数值完全匹配。
  • 交易软件内置的斜率指标,本质是计算「两个时间点的SMA差值除以窗口周期数」的单位时间变动率,不是真的算几何角度。如果硬要换算成和图上视觉匹配的角度,必须先拿到当前图表窗口下的轴缩放系数:图上实际显示角度 = 反正切( (纵轴每像素代表的价格差 / 横轴每像素代表的时间差) * 实际价格变动率 )。这个数值没有固定值,会随手动调整图表大小实时变化,本身不是可离线固定计算的量化指标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 09:06:00