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

如何计算指数首次突破20后两周的平均资产价格路径?

解决方法:捕捉指数突破20后两周的资产价格路径

步骤1:数据预处理

先把日期列转成可计算的时间格式,并设置为索引(方便后续时间切片操作):

import pandas as pd

# 转换日期格式为datetime
df['date'] = pd.to_datetime(df['date'])
# 按日期排序并设为索引
df = df.set_index('date').sort_index()

步骤2:识别首次突破20的事件

标记那些前一天指数低于20、当天首次达到/超过20的关键日期:

# 生成突破标记列:当天指数≥20,且前一天指数<20
df['breakout'] = (df['Some index'] >= 20) & (df['Some index'].shift(1) < 20)
# 提取所有突破日期
breakout_dates = df[df['breakout']].index.tolist()

步骤3:提取每个突破后两周的价格数据

这里分两种常见场景处理:

场景A:按交易日计算两周(通常为10个交易日)

# 存储所有突破后的价格路径
paths = []

for breakout_date in breakout_dates:
    # 截取突破当天及之后9个交易日(共10天)的资产价格
    path = df.loc[breakout_date:].iloc[:10]['Asset price'].reset_index(drop=True)
    # 给每条路径命名,方便后续识别
    path.name = f'breakout_{breakout_date.date()}'
    paths.append(path)

# 合并所有路径,按突破后的天数对齐
all_paths = pd.concat(paths, axis=1)

场景B:按自然日计算两周(14天)

paths = []

for breakout_date in breakout_dates:
    # 计算两周后的自然日
    end_date = breakout_date + pd.Timedelta(days=14)
    # 截取突破日到两周后区间内的资产价格
    path = df.loc[breakout_date:end_date]['Asset price'].reset_index(drop=True)
    path.name = f'breakout_{breakout_date.date()}'
    paths.append(path)

all_paths = pd.concat(paths, axis=1)

步骤4:计算平均价格路径

对齐所有路径后,按行求均值就能得到突破后的平均价格走势:

# 计算每天的平均资产价格
average_path = all_paths.mean(axis=1).reset_index()
average_path.columns = ['day', 'avg_asset_price']
# day列代表突破后的第n天(0=突破当天,1=次日...)

补充提示

  • 如果只需要分析第一次突破的情况,直接取breakout_dates[0]即可,不用遍历所有突破日期
  • 若要计算累计收益,可通过average_path['avg_asset_price'] / average_path['avg_asset_price'].iloc[0] - 1得到相对收益曲线

内容的提问来源于stack exchange,提问作者coder-shmoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:33:19