如何用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
相关产品推荐
相关产品推荐

