日线怎么合成周线:按交易日聚合并保留未结束的一周
股票日线合成周线,应在明确周边界下分组实际交易日,取首日开盘、末日收盘、组内最高最低,再加总同单位成交量和同币种成交额。之后对照市场日历核查覆盖。只有两条日线的周,可以是正常未结束周,也可以是历史缺数周,单看OHLCV数字无法分辨。
本文实际聚合单只虚构股票,并生成周线CSV字符串,区分完整、未结束和缺数据三种状态,不运行CoTrading频率转换服务,也不把一个市场日历用于全球。输入日线假设已经清洗、合法,并在声明日级截止时点完成;聚合检查不能替代上游每根行情质量核验。
先冻结聚合约定
记录证券、市场时区、原始或复权口径、成交量单位、成交额币种与日线交易时段。同组所有行满足同一约定,复权收盘混原始开盘不会因为聚合就变成一致周线。股、手和货币金额分别处理,不把不同市场的量额直接相加。公司行动跨周时也要先确定整组价格基础。
样例为虚构USD股票,量为股,额为USD。周标签采用周一日期,但标签不一定是首个真实交易日。周一休市时,首开可以来自后续有效日,标签仍为周一。若使用周末标签,应另外声明,不让读者把显示日期误认成可交易时点。
pandas重采样参考说明频率转换需要注意分箱边界与标签。本例用标准库明确实现分组,不运行pandas。另一个工具的默认闭区间或周标签可能不同,比较结果前先核对约定,不能只因为都叫周线就认为每根包含相同日期。
提供市场日历与观察截止日
第一周实际日期为2026年11月23、24、25、27日。NYSE日历列明26日感恩节休市、次日提前收盘。我们不为假日造日线,也不把提前收盘成交量按比例放大成想象中的完整时段。那天仍是一条实际日级观测,量额保留其真实测量含义。
给定日历继续包含11月30日及12月1至4日。模拟观察截止在12月1日完整日线之后,因此第二周已有两行、未来还应有三个会话,是未结束而不是历史完整。不能因文件当前只有这些日期,就把文件末尾自动视为周末。
脚本日历是小型显式列表,不是交易所日历生成器。A股、港股和不同美股市场分别取得适用日历及时区;工作日列表不能代替节假日安排,市场日历也不能单独证明个股是否停牌或已经上市。此处先处理单市场已接受日线,个股状态缺口在另题实际诊断。
为每个字段规定聚合方法
| 周线字段 | 有序日线上的操作 |
|---|---|
| 开盘 | 首个有效会话开盘 |
| 最高 | 日最高的最大值 |
| 最低 | 日最低的最小值 |
| 收盘 | 最后有效会话收盘 |
| 成交量 | 同单位日成交量求和 |
| 成交额 | 同币种日成交额求和 |
不要平均日开盘或收盘得到周OHLC,也不加总价格。成交额是独立提供的交易金额,周收盘乘周成交量通常回答另一问题。保留首末贡献日,开收盘就能直接回查。若某日价格缺字段,不应悄悄跳过后还宣称完整周,应回到接受行规则或标记缺数。
周键通过日期减去星期偏移生成,Python datetime文档支持这类日期运算。真实时间戳应先转目标会话日期,未转换UTC日期可能把行情放错本地周。周线生成时间也不等于该周首日,后续信号使用必须保留真正完成边界。
实际聚合并计算状态
values = sorted(values)
weekly_open = values[0][1]
weekly_high = max(row[2] for row in values)
weekly_low = min(row[3] for row in values)
weekly_close = values[-1][4]
weekly_volume = sum(row[5] for row in values)
weekly_amount = sum(row[6] for row in values)
完整例拒绝重复日键、日历外或截止日后的输入,并比较已经到期的预期日期。过去应有日缺失标missing_data;过去无缺口但未来会话未完标open_week;已结束且全部观测齐全标complete。不能只依据周标签或末行存在来决定完成。
下载完整示例。使用Python 3.12+、标准库及合成输入,运行python R533.py。作者文件为docs/growth/research/round-5/examples/R533.py。
首周实际开10、高15、低9、收14、量750、额8750,四条观测对应四条预期,状态完整。第二周开14、高17、低13、收16、量210、额3050,五个预期会话中只观察两条,保持未结束。所有数字由输入行聚合产生,不是事先填入周线常量。
脚本实际在内存写CSV再读回,断言两条输出,并将日线输入倒序后重算,结果不变。排序因此是方法的一部分,不依赖供应商返回顺序。CSV含状态与覆盖列,采用它的消费者要保留并执行过滤,不应导入时只挑价格列就忽略未完成标记。
用缺过去一日的反例区分未结束
反例删除第一周11月24日。该周在模拟截止日前已经结束,却缺一条应有历史日线;脚本标缺数据,并给出具体日期,不因为存在周五收盘就宣布完整。OHLC数值仍可能看起来正常,因此状态检查必须独立于聚合是否能算出数字。
第二周未来的周三到周五还没发生,性质不同。可以保留临时周值用于观察,但不能当成已完成周信号。过去缺口与未来会话同时存在时,本例优先标缺数据并保留缺日清单。后续若补回,重算整周,而不是只修改状态文字。
假日又是第三种情况。感恩节不在预期列表,不产生补拉任务。前值加零量填假日会引入合成观测,即使某些聚合数恰巧未变,来源链已经改变。保持没有那根日线,比造一条看似无害的行更符合原始数据含义。
对账后分开交付完整与临时周
每周保留贡献日期、已见与预期数量、状态、单位和输入版本。审阅者从原日线找首开末收和极值,再独立加量额。字段计算与会话覆盖分别检查,不能互相替代。一个最高价改错可能不影响收盘,抽查只看收盘会漏掉聚合错误。
消费者要求最终数据时,只接受完整周,临时和缺数周另表或明确标识。本例组合CSV方便核对,不表示所有行都可以直接用于回测。真实周线文件还需写盘后读回、检查字段类型和顺序;内存写出证明的是转换结构,最终文件交接由采用流程继续验收。
日线更正后重建所在整周,比较每个聚合字段。中间一天最高价修订会改变周高却不改周收,因此只重算最后日不够。新增完成会话逐步扩展临时周的末日与量额,直到日历边界满足。保留已经被研究引用的旧周线版本,才能重现原运行。
交付聚合配置、周线CSV、贡献日映射、字段对账与状态结果,实际完成从日到周的数据操作。它不只是泛频率对齐说明,也不证明底层股票历史全量无缺。更新条件与完成边界明确,下一位研究者才知道哪根周线可以用、哪根仍需等待或补数。
核贡献关系及整周缺席
输出周集合应从给定日历建立,不只从价格文件现有日期建立,否则历史某周一行都没有,就可能连缺数记录也消失。完整例额外删掉首周全部观测,断言该周仍存在,状态缺数据、价格字段为空,不造零收盘或零量。没有观测与测得零交易是不同含义,状态表必须保留这种区别。
分组标签、最后观察会话和完成决定分别保存。标签可以写周一,最后接受行可能周五,也可能在另一假期模式下是周四。下游使用完成元数据,不从标签猜何时可用。若导出工具自动给周末标签,还应保留实际首末日,避免不同工具看似同日期却聚合了不同交易范围。
更正时对比旧新字段贡献。成交量修订改变加总;日高变化只有改掉最大值时才影响周高。贡献日映射让审阅者直接定位,不必重新读全部文件。某日后来被撤销,也要重建所在周并重开覆盖状态,不能只从总量减一个数字,却继续保留失效首开或末收。
每次发布版本连接原日线快照,旧研究继续引用旧版,新研究明确选择修订版。周线计算不是一次性图表操作,而是有输入依赖的数据产物。维护这些关系,才能在底层日线变化后知道哪些周需要重新验收,也能证明未受影响周没有被无关重写。
批量股票还需按证券独立分组,同一周标签不代表每股有相同覆盖。个股缺数不能由其他股票的正常日线补上;市场日历只提供共同参考,最后完成状态仍须对应每个证券的实际接受观测。
常见问题
假日要填零量日线吗?
本方法不填,只聚合实际接受会话,并保留日历证据。
有周五收盘就能判完整吗?
不能,还要核对全部预期会话与观察截止时点。