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

基于WILL5000指数数据计算股指翻倍间隔时长的实现方法

美股翻倍时长统计复现方案

前置数据处理

首先对从FRED导出的WILL5000指数原始数据做清洗:

import pandas as pd

# 读入原始数据,将日期列解析为datetime格式并设为索引
df = pd.read_csv('WILL5000原始数据路径.csv', parse_dates=['DATE'], index_col='DATE')
# 剔除指数为空的无效行,按日期升序排序
df = df.dropna(subset=['WILL5000']).sort_index()

核心计算逻辑

方法1:逐行检索法(易理解,适配小数据集)

完全匹配你提出的思路,实现逻辑简单直观:

# 新增指数半值列
df['half_val'] = df['WILL5000'] / 2

def get_match_date(current_date, half_val):
    # 筛选当前日期之前的所有历史数据,找到最后一个指数小于等于半值的日期
    historical_data = df.loc[df.index < current_date, 'WILL5000']
    return historical_data[historical_data <= half_val].last_valid_index()

# 逐行计算匹配的历史低点日期
df['low_date'] = df.apply(lambda x: get_match_date(x.name, x['half_val']), axis=1)
# 计算翻倍耗时(天数)
df['double_days'] = (df.index - df['low_date']).dt.days

方法2:merge_asof高效计算(适配1970年至今全量时序数据,速度提升10倍以上)

利用pandas内置的邻近匹配能力,避免逐行遍历,适合长时序数据计算:

# 构造匹配用的左右表
left_table = df[['WILL5000']].reset_index().rename(columns={'DATE':'current_date', 'WILL5000':'current_val'})
left_table['half_val'] = left_table['current_val'] / 2
right_table = df[['WILL5000']].reset_index().rename(columns={'DATE':'low_date', 'WILL5000':'low_val'})

# 按半值做邻近匹配,自动找小于等于半值的最近历史指数对应的日期
match_result = pd.merge_asof(
    left_table.sort_values('half_val'),
    right_table.sort_values('low_val'),
    left_on='half_val',
    right_on='low_val',
    direction='backward'
)

# 筛选低点日期早于当前日期的有效记录,计算翻倍天数
match_result = match_result[match_result['low_date'] < match_result['current_date']]
match_result['double_days'] = (match_result['current_date'] - match_result['low_date']).dt.days
match_result = match_result.sort_values('current_date').set_index('current_date')

结论验证

计算完成后直接检索最短翻倍时长即可验证统计结论:

min_days = match_result['double_days'].min()
min_record = match_result[match_result['double_days'] == min_days].iloc[0]
print(f"历史最短翻倍天数:{min_days}")
print(f"翻倍终点日期:{min_record.name.date()},起点日期:{min_record['low_date'].date()}")

其他可选实现思路

  • 滑动窗口法:遍历不同长度的时间窗口,计算窗口首尾指数涨幅,筛选涨幅≥100%的窗口后找最小长度
  • 局部低点回溯法:先筛选历史所有局部低点,再计算每个低点之后指数首次翻倍的间隔天数,取最小值
  • 向量化运算:用numpy构造全量比较矩阵,批量匹配满足翻倍条件的日期对,再筛选最小间隔,适合算力充足的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:21:00