chan-lun-core
缠论结构识别与理论辅助计算库。输入单标的、单周期的行情或结构序列, 输出分型、笔、线段、中枢、背驰、买卖点,以及多级分解和辅助状态。 算法用 Python 实现,第三方运行依赖只有 numpy 与 pandas;MACD 内置计算。
| 项目 | 约定 |
|---|---|
| 发行名 / 导入名 | chan-lun-core / chan |
| 当前源码版本 | 1.0.1;安装环境以 chan.__version__ 和实际导入路径为准 |
| 运行兼容目标 | Python 3.6、numpy 1.14、pandas 0.23 及以上;验证范围见下文 |
| 开发与构建 | Python 3.10+,使用本仓库 requirements-dev.txt |
| 仓库 / 许可证 | lushi78778/chan-lun / MIT |
本库维护算法、公开契约、包测试及仓库验收资产。调用方负责行情获取、交易日历、 复权、标的和周期管理、策略调度、组合风控与下单。跨级别和板块接口需要调用方 提供多组已对齐的输入;理论级别由结构关系和输入声明确定,不按分钟周期自动映射。
阅读入口
下列链接指向仓库当前主干文档,安装版本及升级差异按版本记录核对。
| 要完成的事 | 入口 |
|---|---|
| 安装并完成第一次计算 | 安装、快速开始 |
| 根据现有数据选择接口 | 按输入选择入口 |
| 接入自己的行情、分步计算或使用辅助模块 | 使用指南 |
| 排查 Notebook 安装、版本或同名目录遮蔽 | 安装与环境排错 |
| 查字段、身份、原因码、空值与兼容规则 | API 契约 |
| 了解架构、维护代码或执行验收 | 架构、开发流程、目录索引 |
| 查理论实现进度与真实证据 | 正式计划 §6、验收记录 |
| 长期维护与剩余工作的次序 | 正式计划 §12 |
| 评估版本升级 | 迁移指南、变更记录 |
安装
安装示例固定本版 1.0.1;发行产物可用性与升级差异按版本记录核对。
使用将要运行程序的解释器安装,固定版本便于复现:
python -m pip install 'chan-lun-core==1.0.1'
python -c "import chan; print(chan.__version__); print(chan.__file__)"
发行名与导入名不同。安装后的包应来自预期环境,工作区中的 chan.py 或同名
目录可能遮蔽它。Notebook 安装后若此前已导入过包,应重启内核再核对。
聚宽、离线 wheel 安装和导入诊断见安装指南。
运行依赖下限与现代开发依赖分别管理。旧 Python 环境优先安装已构建的 wheel;
requirements-dev.txt 用于维护和构建,不用于升级平台内置环境。源码版本相同
不代表提交或发行产物相同,工程维护和发布记录分别核验。
快速开始
下面生成单标的、单周期的合成行情,无需行情账号,复制后即可运行:
import json
import math
from datetime import datetime, timedelta
import pandas as pd
from chan import normalize_bars, analyze_bars
closes = [20.0 + 3.0 * math.sin(i / 6.0) + i / 80.0 for i in range(160)]
df = pd.DataFrame({
"open": closes,
"close": closes,
"high": [price + 0.3 for price in closes],
"low": [price - 0.3 for price in closes],
"volume": [1000.0] * len(closes),
}, index=[datetime(2025, 1, 1) + timedelta(days=i) for i in range(160)])
bars = normalize_bars(df)
result = analyze_bars(bars)
summary = {
"as_of": str(result.as_of),
"fxs": len(result.fxs),
"bis": len(result.bis),
"xds": len(result.xds),
"bi_zss": len(result.bi_zss),
"xd_zss": len(result.xd_zss),
"buy_points": len(result.buy_points),
"sell_points": len(result.sell_points),
}
print(json.dumps(summary, ensure_ascii=False, indent=2))
snapshot = result.to_dict()
json_text = json.dumps(snapshot, ensure_ascii=False, allow_nan=False)
按当前默认参数,摘要为:
{
"as_of": "2025-06-09 00:00:00",
"fxs": 8,
"bis": 7,
"xds": 1,
"bi_zss": 1,
"xd_zss": 0,
"buy_points": 0,
"sell_points": 0
}
这个输入识别出分型、笔和线段,笔级中枢与线段级中枢分别统计;买卖候选为空 是正常结果,不表示程序失败,也不证明价格安全或全部理论分支已经检查。 示例只用于说明调用与结果,不是行情案例或策略验证。
analyze_bars 组合基础识别链,默认采用 81 课笔标准。需要 106 课标准时用
analyze_bars(bars, bi_standard="106")。自定义 MACD、背驰、买卖点参数或使用
严格条件、递归、谱系及其他辅助模块时,按模块示例
另行组合;这些能力不会全部由 analyze_bars 自动执行。
输入与结果
标准输入是时间严格递增、唯一的 dict 列表或元组,每条包含
dt/open/high/low/close/volume。OHLC 必须有限且严格为正,成交量有限且非负,
并满足 low <= open/close <= high。一个序列对应一个标的、一个周期及同一价格基准。
DataFrame 可先经 normalize_bars 映射列名、转数值并排序;它默认剔除
volume == 0 且 high == low 的行。该适配不代替行情校验。
analyze_bars 会校验输入;底层函数各有前提,直接组合时可先调用
validate_bars。重复时间、缺失值、复权、时区与停牌处理方式须由调用方明确。
完整规则见行情输入契约。
AnalysisResult 按级别保留结果:
| 字段 | 含义 |
|---|---|
as_of |
最后一根输入 bar 的时间;空输入为 None |
new_bars、fxs、bis、xds |
包含处理后的 K 线、分型、笔和线段 |
bi_zss / xd_zss |
分别由笔 / 线段构造的中枢 |
bi_trends |
笔级中枢的走势分类 |
trend_bc / pan_bc |
笔级趋势 / 盘整背驰候选 |
buy_points / sell_points |
基础链的笔级简化买卖候选 |
dif、dea、hist |
与原始输入 bars 等长的 MACD 数组,默认 12/26/9 |
结果字段不能重新绑定,内部列表、数组与结构对象仍可修改。每次批量计算独立
分配结果,AnalysisResult.to_dict() 生成独立的 JSON 可写快照。底层对象按各自
契约序列化,例如 NewBar.to_dict() 保留原时间类型,不能据此假定任意对象均可
直接 json.dumps。
空行情也是合法输入:
from chan import analyze_bars
empty = analyze_bars([])
assert empty.as_of is None
assert empty.bis == []
assert empty.buy_points == []
字段 None、空结果、条件否决与证据不足有不同含义。扫描入口还可返回
exclusions、skipped、conditions 和 completed_types,用于解释未产生点位的
原因;它们的范围见 API 与排错指南。
按输入选择入口
| 你已经具备的输入 / 目的 | 入口 | 结果与前提 |
|---|---|---|
| 单标的单周期原始行情 | analyze_bars |
基础结构、笔级候选和指标;只计算提供的前缀 |
| 已保证收盘的行情与历史观察时点 | analyze_at、replay_bars |
先按时间截断,再计算;回放追踪出现、修订与撤销 |
| 含收盘与实际到达时间的行情 | analyze_available、replay_available |
按 closed_dt/available_dt 门控;回放另给保守结构观察 |
| 需要自定义基础链参数 | chan_fx_bi、find_xds、find_zs、find_*_bc 等 |
显式分步组合;保持笔级与线段级输入一致 |
| 已确认次级走势与反转 / 中枢上下文 | find_second_points、find_third_points |
已确认输入上的条件判定,保留必要证据时间 |
| 已确认次级走势与对应行情 | find_first_points、scan_first_points、analyze_point_chain |
MACD 辅助一类候选及组合链;候选性质沿链保留 |
| 已确认走势、相邻级别与力度方法 | scan_strict_divergence、strict_nested_chain、strict_completion_cascade |
严格结构与显式证据判定;力度方法和级别声明仍是输入前提 |
| 已确认类型的递归完成、中枢演化与轮次 | confirm_level_up、track_center_lineage、track_rounds |
完成证据、稳定身份、版本链和轮次移交 |
| 均线、分型区间或成员状态等专项输入 | 各辅助模块 | 返回定义内的状态或候选;阈值性质见模块说明 |
公开入口经 import chan 或 from chan import ... 使用;完整导出以
chan.__all__ 为准,字段与稳定性以 API 为准。
笔级简化买卖候选、已确认输入上的条件判定、严格结构判定和工程辅助状态分别
解释。将任意笔或线段包装为 ConfirmedMove,不能证明它是真实完成的次级走势。
confirmed 也须结合所属接口的条件、力度方法与证据理解,不能统一视为理论证明
或交易指令。输入、示例与模块边界见使用指南。
时间、回放与证据边界
结构位置、证据确认时间、行情可用时间分别记录。 分型中心、笔端点和点位
dt 表达结构位置;as_of 表达输入截止,并不证明末根 bar 已收盘。
XD.evidence_dt 是最后证据笔的端点,也不能当作实际行情确认时间。
历史计算先确定观察时点可见的输入,再计算结构。已经保证收盘的离线行情可以用:
from chan import analyze_at, replay_bars
# 复用快速开始的 bars;真实接入时由调用方保证相应时点的收盘与价格基准。
cutoff = bars[-1]["dt"]
current = analyze_at(bars, cutoff)
for observed in replay_bars(bars, observations=[cutoff]):
print(observed.observed_dt, len(observed.changes))
盘中或存在数据延迟时,应提供收盘与实际到达时间,使用
analyze_available。调用方还须按相应观察
时刻截断跨周期输入,并使用当时可得的复权基准;库不下载行情或复权。
固定输入历史版本、固定观察时点时,视野之外的未来价格不应影响当前结果。
观察时点推进后,未完成尾部和候选允许修订或撤销;first_seen 只代表在给定
观察网格中首次出现。用全样本最终结果按端点时间过滤,无法还原历史可见状态。
回放规则与账本身份见时间指南。
当前使用边界包括:同侧多轮独立真实样本缺口、课 77 历史 OHLC 缺失和课 106 图文歧义、辅助模块的工程阈值,以及调用方对最低类型、级别和供应历史版本的 证明责任。接口实现、真实样本覆盖、平台可运行和策略有效性是不同结论。 当前理论能力与剩余缺口只在正式计划 §6 维护;分支证据和随版声明见验收记录。
项目结构与维护
本仓库独立开发和验收,采用 src 布局;也可由研究项目作为 Git 子模块引用。
仓库根的 src/chan/ 是可安装包,仓库本身不是运行时包目录。
.
├── pyproject.toml # 包元数据、运行依赖与包发现配置
├── requirements-dev.txt # 现代开发与构建依赖
├── src/chan/ # 算法、数据对象、公开导出与运行时版本
├── tests/ # 自包含包测试;fixtures 为最小冻结输入与预期
├── tools/ # 包测试、诊断、产物检查与基准工具
├── docs/ # 用法、架构导航、正式计划与治理文档
├── validation/ # 仓库验收资产、资产测试与数据工具
└── .github/ # CI 与随版声明
| 交付形态 | 范围 |
|---|---|
| wheel | 可安装算法包、发行元数据与许可证;不含仓库验收资产 |
| sdist | 包源码、包测试与最小 fixtures、工程工具及维护文档;不含 validation/ |
| 完整仓库 | 另含 validation/ 的原始输入、独立标注、收据和资产工具 |
| 维护者私有材料 | 108 课 PDF、逐课原文及笔记;理论核验须显式提供,不随仓库分发 |
算法与包测试分别以 src/chan/、tests/ 为真源;工程入口在 tools/,资产工具
在 validation/tools/。独立包开发不读取外层研究项目。研究集成与平台接线由
调用方另行验收,冻结脚本和历史产物保留各自版本。
在核心库仓库根准备现代开发环境后执行:
python -m pip install -r requirements-dev.txt
python tools/check_core.py # 自包含包测试
python tools/check_core.py --pattern test_contracts.py # 文档示例与工程契约
python tools/check_core.py --scope validation # 完整仓库资产验收
python tools/check_core.py --scope all # 两层合跑
包测试可从解包 sdist 执行;资产验收需要完整仓库,缺失输入或空测试集明确失败。 README 和使用指南的基础链、回放及独立辅助示例随契约测试执行。文档移动或示例 修改时,须同步示例定位和源码包内容,保持相同的执行验证。
| 验证层 | 能证明的范围 |
|---|---|
| Python 3.6 语法检查 | 包源码符合目标语法;不能代替旧解释器和旧依赖实跑 |
| 现代环境包测试 | 理论分支、输入边界、API、回放与组合契约在该环境下通过 |
| 旧解释器 / 旧依赖实跑 | 对应环境的运行结果;不能代替平台取数与数据时效验证 |
| wheel / 解包 sdist | 安装导入与源码分发完整性;单独检查产物而非仅从源码导入 |
| 原文与独立真实标注 | 所核验定义、样本和价格版本的证据;不扩大到未覆盖分支 |
| 平台与策略验证 | 调用方环境、取数、调度和研究结论的专项证据 |
CI 定义现代 Python 3.10 / 3.13、Python 3.6 旧依赖及仓库资产验收,并分别检查 wheel 与解包 sdist;某次提交是否通过,以该提交的运行记录为准。仓库历史结果见 验收索引,不把旧测试数量写成当前全量通过结论。
目录和文档职责见 docs/README.md。架构、原文核验、开发流程与 工程命令分别维护在 ARCHITECTURE、CONTRIBUTING、 AGENTS 与工具索引,README 不另维护开发规则或理论进度表。
版本与升级
1.x 的公开入口、字段、时间、身份及异常契约见 API。算法 修正需要固定输入与逐前缀差异证据;输入历史被修订或候选随新证据变化,按对应 输入版本和时间契约解释。升级前保留旧结果,按迁移指南逐项核对。
版本号在 pyproject.toml 与 src/chan/__init__.py 保持一致。工程治理按变更影响
纳入修订、次或主版本;只有内部维护的提交可暂不发布,已发布产物不覆盖。本地提交、标签、远端推送、CI、GitHub
Release 和 PyPI 分别核验;已有标签保持原指向,新增阶段标签须有明确的交付或
复现价值,推送单独评估。版本事实见 CHANGELOG,历史收据保留当时记录。
许可证与使用责任
本项目采用 MIT 许可证。计算结果用于结构研究与辅助分析,不构成投资 建议;交易决策、风控与执行由调用方负责。
Metadata
Release files for chan-lun-core 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| chan_lun_core-1.0.1.tar.gz | 1.3 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| chan_lun_core-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.5 MB
Release files / chan_lun_core-1.0.1.tar.gz
| Download URL | chan_lun_core-1.0.1.tar.gz |
|---|---|
| Size | 1.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cae60b5def8ffaa0aba8666b4d3eb7bf6838a6275afefa4a3c0cc08ed9858b5e
|
|
BLAKE2b-256 checksum How to use checksums |
7811a70c37faf392fe83b65e6e8a361bfb7ab81b12ad54aa05e397115802cceb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / chan_lun_core-1.0.1-py3-none-any.whl
| Download URL | chan_lun_core-1.0.1-py3-none-any.whl |
|---|---|
| Size | 181.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f67179627494c8649703a32e9f7ec1e5b04a2bd3e85e834e7f1e3297afbba31b
|
|
BLAKE2b-256 checksum How to use checksums |
1e34dc4f0bacdafdf5ede82f3ffb27258db8c69120b875ad923bf5c74af2bb46
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|