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

如何在Pandas中为1分钟K线数据计算并添加Relative Volume Ratio指标列

实现Relative Volume Ratio指标计算步骤

1. 依赖安装与数据下载

先确保安装pandas和yfinance,然后下载AAPL的7天1分钟行情数据:

import pandas as pd
import yfinance as yf

# 下载AAPL 7天1分钟数据
symbol = "AAPL"
symbol_df = yf.download(tickers=symbol, period="7d", interval="1m")
# 重置索引并保留核心字段
symbol_df = symbol_df.reset_index()[["Datetime", "Volume"]]

2. 数据预处理:拆分日期与时段

将时间戳拆分为日期和精确到分钟的时段,方便后续匹配同一时段的历史数据:

# 提取日期和时分时段
symbol_df["Date"] = symbol_df["Datetime"].dt.date
symbol_df["Time"] = symbol_df["Datetime"].dt.time

3. 计算当日截至当前时段的累计成交量

按日期分组,对成交量做累计求和,得到每个时段当日的累计成交量:

# 按日期分组计算累计成交量
symbol_df["Daily_Cum_Volume"] = symbol_df.groupby("Date")["Volume"].cumsum()

4. 计算过去5天同一时段的累计成交量均值

先将历史数据按日期和时段做透视对齐,再对每个时段的历史累计值取滚动5天均值:

# 构建透视表:行=日期,列=时段,值=当日该时段累计成交量
cum_volume_pivot = symbol_df.pivot(index="Date", columns="Time", values="Daily_Cum_Volume")

# 对每个时段计算过去5天的滚动均值,min_periods=1避免前期无足够数据时全为空
rolling_mean = cum_volume_pivot.rolling(window=5, min_periods=1).mean()

# 转回长格式并与原数据合并
rolling_mean_long = rolling_mean.unstack().reset_index(name="Historic_5d_Avg_Cum_Volume")
symbol_df = symbol_df.merge(rolling_mean_long, on=["Date", "Time"], how="left")

5. 计算Relative Volume Ratio

用当日累计成交量除以历史均值得到指标,同时处理除以0的异常情况:

# 计算RVR,替换0值避免报错
symbol_df["Relative_Volume_Ratio"] = symbol_df["Daily_Cum_Volume"] / symbol_df["Historic_5d_Avg_Cum_Volume"].replace(0, pd.NA)

# 查看结果示例
print(symbol_df[["Datetime", "Daily_Cum_Volume", "Historic_5d_Avg_Cum_Volume", "Relative_Volume_Ratio"]].head())

关键说明

  • 若后续有10天完整数据,只需将rolling(window=5)改为rolling(window=10)即可适配原需求。
  • 拆分Time时用dt.time保证精确到分钟,确保同一时段的匹配准确性。
  • 用pd.NA标记无效值,避免除以0导致的计算错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 23:15:17