Google Sheets股票回测:查找目标价格触发日期的函数方案
解决方案
首先纠正你使用GOOGLEFINANCE时的参数错误:函数的日期参数应该是起始日期在前,结束日期在后,正确写法是=GOOGLEFINANCE(A3,"all",B3,C3),否则会获取反向时间区间的数据。
针对你要找时段内触及目标价日期的需求,推荐以下两种实用函数方案:
方案1:用FILTER+INDEX提取最早触及日期
如果你需要第一个(最早)触及目标价的日期,可使用以下公式:
=INDEX(FILTER(GOOGLEFINANCE(A3,"date",B3,C3),GOOGLEFINANCE(A3,"high",B3,C3)>=D3,GOOGLEFINANCE(A3,"low",B3,C3)<=D3),1,1)
- 逻辑:
GOOGLEFINANCE(A3,"date",B3,C3)提取时段内所有日期;high和low字段分别提取每日最高、最低价;通过>=D3和<=D3判断目标价是否落在当日价格区间内(即当日触及过目标价);FILTER筛选出符合条件的日期,INDEX取第一个结果。
方案2:用QUERY函数灵活筛选
QUERY函数支持类SQL的条件查询,更适合复杂筛选场景:
提取最早触及日期
=INDEX(QUERY(GOOGLEFINANCE(A3,"date,high,low",B3,C3),"select Col1 where Col2 >= "&D3&" and Col3 <= "&D3&" limit 1"),2,1)
- 逻辑:
GOOGLEFINANCE返回包含日期、最高价、最低价的数组;QUERY筛选出满足价格区间条件的行并提取日期列;limit 1限制只返回第一个结果;INDEX(...,2,1)跳过数组的表头行,直接取数据行的日期。
返回所有触及日期
如果需要列出时段内所有触及目标价的日期,去掉limit 1和INDEX即可:
=QUERY(GOOGLEFINANCE(A3,"date,high,low",B3,C3),"select Col1 where Col2 >= "&D3&" and Col3 <= "&D3)
为什么VLOOKUP/MATCH不适用
VLOOKUP和MATCH是基于精确匹配或近似匹配某个值来查找位置,但你的需求是基于「价格区间包含目标价」的条件筛选日期,属于条件过滤而非值匹配,因此这类函数无法直接满足需求。
内容的提问来源于stack exchange,提问作者nachiket jadhav
相关产品推荐
相关产品推荐

