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

如何用df.resample处理离散时间,匹配交易软件30分钟K线时段?

解决自定义时段30分钟K线合成问题

你不能用简单的按索引整除30或者固定频率resample,因为交易软件的K线时段是非标准30分钟(比如10:00-10:45、11:15-13:15这种包含休市的长时段),而且最后一根必须锁定14:45-15:00。下面是直接可行的实现方案:

步骤1:定义交易软件的目标时段

先把要求的所有时段整理成明确的时间区间:

import pandas as pd

# 交易软件指定的30分钟K线时段(按顺序排列)
target_sessions = [
    ("09:00:00", "09:30:00"),
    ("09:30:00", "10:00:00"),
    ("10:00:00", "10:45:00"),
    ("10:45:00", "11:15:00"),
    ("11:15:00", "13:15:00"),
    ("13:15:00", "14:45:00"),
    ("14:45:00", "15:00:00")
]

# 转换为带日期的datetime区间(假设你的df时间列名为'date',且为datetime类型)
trade_date = df['date'].dt.date.iloc[0]
session_intervals = []
for start, end in target_sessions:
    start_dt = pd.to_datetime(f"{trade_date} {start}")
    end_dt = pd.to_datetime(f"{trade_date} {end}")
    session_intervals.append(pd.Interval(start_dt, end_dt, closed='left'))

步骤2:给1分钟K线匹配对应时段

用pd.cut将每个分钟K线的时间戳映射到目标时段:

# 添加时段标记列
df['period'] = pd.cut(df['date'], bins=session_intervals, labels=[f"{s}-{e}" for s,e in target_sessions])

# 过滤掉不在交易时段内的无效数据(如果存在)
df = df.dropna(subset=['period'])

步骤3:按时段聚合生成K线

按标记的时段分组,计算标准K线指标,同时将时段起始时间设为索引:

# 聚合计算30分钟K线数据
result = df.groupby('period').agg({
    'date': 'first',  # 用时段起始时间作为K线时间戳
    'open': 'first',
    'high': 'max',
    'low': 'min',
    'close': 'last',
    'volume': 'sum'
}).set_index('date')

# 验证最后一根K线是否为14:45-15:00
print(result.tail(1))

多交易日适配说明

如果你的数据包含多个交易日,需要按「日期+时段」组合分组,避免不同日期的同时段数据混在一起:

# 添加日期+时段的组合键
df['date_period'] = df['date'].dt.date.astype(str) + '_' + df['period']

# 按组合键聚合
result = df.groupby('date_period').agg({
    'date': 'first',
    'open': 'first',
    'high': 'max',
    'low': 'min',
    'close': 'last',
    'volume': 'sum'
}).set_index('date')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:40:28