如何将1分钟OHLC数据转换为其他时间周期(Python/Excel实现)
1分钟K线转30分钟K线的实现方案(Python+Excel)
Python实现
预处理数据
首先确保DataFrame的DateTime列是datetime类型,并将其设为索引,方便后续按时间聚合:
import pandas as pd # 假设原始数据存储在df变量中 df['DateTime'] = pd.to_datetime(df['DateTime']) df.set_index('DateTime', inplace=True)
30分钟周期聚合
使用resample按30分钟间隔分组,同时指定每个字段的聚合规则:
# 定义聚合规则:开盘价取时段第一个值,最高价取最大值,最低价取最小值,收盘价取时段最后一个值 aggregation_rules = { 'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last' } # 执行重采样与聚合,dropna移除无数据的时段 df_30min = df.resample('30T').agg(aggregation_rules).dropna() # 将时间索引重新转为列 df_30min.reset_index(inplace=True)
这段代码会自动处理跨日问题,输出的df_30min就是符合要求的30分钟周期数据。
Excel实现
生成30分钟时段标签
替换你之前的公式,用FLOOR函数生成每个分钟数据对应的30分钟时段起始时间,完美解决跨日问题:
=FLOOR(A2, TIME(0,30,0))
将公式向下填充到所有行,得到每个数据所属的30分钟时段(例如2017-01-02 23:50:00会被转为2017-01-02 23:30:00,2017-01-03 00:10:00会被转为2017-01-03 00:00:00)。
计算各时段指标
假设新生成的时段列是B列,Open/C列、High/D列、Low/E列、Close/F列,先通过高级筛选提取所有唯一的时段值到G列,然后在对应行计算指标:
- 开盘价(Open):取时段内第一个值
=INDEX(C:C, MATCH(G2, B:B, 0)) - 最高价(High):取时段内最大值(Excel 2019及以上可用)
=MAXIFS(D:D, B:B, G2) - 最低价(Low):取时段内最小值(Excel 2019及以上可用)
=MINIFS(E:E, B:B, G2) - 收盘价(Close):取时段内最后一个值
=INDEX(F:F, MAXIFS(A:A, B:B, G2))
如果使用旧版Excel(无MAXIFS/MINIFS),可以用数组公式(输入后按Ctrl+Shift+Enter确认):
- 最高价数组公式:
=MAX(IF(B:B=G2, D:D)) - 最低价数组公式:
=MIN(IF(B:B=G2, E:E))
内容的提问来源于stack exchange,提问作者Mutale
相关产品推荐
相关产品推荐

