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

如何用Excel STOCKHISTORY函数计算满足条件的50日成交量简单移动平均

在Excel中计算符合条件的成交量50日简单移动平均(SMA)

核心思路

要实现需求,需同时获取收盘价和成交量两组数据,先筛选出「当日收盘价高于前一日收盘价」的交易日,再对这些交易日的成交量计算50日简单移动平均。

分步实现公式

1. 拉取完整的收盘价与成交量数据

用STOCKHISTORY函数提取指定股票(A2单元格为股票代码)近50天的收盘价和成交量:

=STOCKHISTORY(A2, TODAY()-50, TODAY(), 0, 0, 1, 5)

参数说明:

  • 末尾的1,5分别对应提取收盘价(第1列)和成交量(第2列)
  • 0,0表示返回日期+数据,按时间升序排列(旧日期在前,新日期在后)

2. 筛选符合条件的成交量

通过FILTER结合INDEX对比当日与前一日收盘价,提取符合条件的成交量:

=FILTER(
  INDEX(STOCKHISTORY(A2, TODAY()-50, TODAY(), 0, 0, 1, 5),,2),
  INDEX(STOCKHISTORY(A2, TODAY()-50, TODAY(), 0, 0, 1, 5),2:,1) 
  > INDEX(STOCKHISTORY(A2, TODAY()-50, TODAY(), 0, 0, 1, 5),1:ROWS(STOCKHISTORY(A2, TODAY()-50, TODAY(), 0, 0, 1, 5))-1,1)
)

逻辑说明:

  • INDEX(...,2)提取成交量列
  • INDEX(...,2:,1)是从第2行开始的当日收盘价,INDEX(...,1:ROWS(...)-1,1)是前一日收盘价,两者对比筛选出符合条件的成交量

3. 计算50日简单移动平均

直接对筛选后的成交量用AVERAGE计算;若需严格取最近50个符合条件的交易日,可结合TAKE函数:

# 计算所有符合条件的成交量的平均值
=AVERAGE(
  FILTER(
    INDEX(STOCKHISTORY(A2, TODAY()-50, TODAY(), 0, 0, 1, 5),,2),
    INDEX(STOCKHISTORY(A2, TODAY()-50, TODAY(), 0, 0, 1, 5),2:,1) 
    > INDEX(STOCKHISTORY(A2, TODAY()-50, TODAY(), 0, 0, 1, 5),1:ROWS(STOCKHISTORY(A2, TODAY()-50, TODAY(), 0, 0, 1, 5))-1,1)
  )
)

# 仅取最近50个符合条件的成交量计算平均值
=AVERAGE(
  TAKE(
    FILTER(
      INDEX(STOCKHISTORY(A2, TODAY()-50, TODAY(), 0, 0, 1, 5),,2),
      INDEX(STOCKHISTORY(A2, TODAY()-50, TODAY(), 0, 0, 1, 5),2:,1) 
      > INDEX(STOCKHISTORY(A2, TODAY()-50, TODAY(), 0, 0, 1, 5),1:ROWS(STOCKHISTORY(A2, TODAY()-50, TODAY(), 0, 0, 1, 5))-1,1)
    ),
    -50
  )
)

原公式的问题修正

你之前的SCAN公式仅处理了收盘价数据,未关联成交量维度,无法筛选出符合条件的成交量。SCAN的遍历逻辑需要同时绑定收盘价和成交量两组数据,单独处理收盘价无法实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:16:09