手把手把缠论画到通达信主图3步编译ChanlunX插件并跑通笔线段中枢【免费下载链接】ChanlunX缠中说禅炒股缠论可视化插件项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunXChanlunX 是一款面向通达信金融终端的缠论可视化插件它通过 DLL 扩展机制把笔、线段、中枢这三层缠论结构直接画在主图上。本文不空谈理论而是沿着痛点→原理→编译→部署→扩展的路径带你从零跑通这个开源项目并理解其算法与工程设计的取舍。1. 为什么需要机器画的缠论缠中说禅理论的核心是把价格走势拆解为可重复验证的结构K线包含关系、笔、线段、中枢。理论上谁都能画但实操中问题不少。手工画缠论的三个痛点主观性同一段走势不同人画的笔和中枢常有出入千人千缠。滞后性靠肉眼盯盘等确认中枢成立往往已经错过最佳观察窗口。低效率A股全市场几千只标的逐只手工标注不现实。一条DLL如何背书缠论ChanlunX 把缠论判定规则固化成 C 算法编译为通达信可加载的 DLL 插件。公式只需一行TDXDLL2(...)调用就能拿到标准化的笔端点、线段端点和中枢区间。规则统一、结果可复现这是手工画法难以替代的价值。2. 先看效果主图上的四层结构安装并绑定插件后缠论主图公式会输出四类元素黄色虚线是笔、橙色实线是线段、橙色矩形是线段中枢、黄色矩形是笔中枢。图1ChanlunX 缠论可视化插件效果图矩形框标注中枢结构虚线标注笔的划分图2ChanlunX 缠论可视化插件笔段划分效果图线条连接关键高低点展示笔与线段走势从上图能直观看到行情在左边形成笔与中枢右侧延续处笔被重新修正这正是增量数据处理的结果——后面我们会讲到算法如何做到这一点。3. 核心流水线拆解从K线到中枢的四级递进缠论分析不是单个算法而是一条四级流水线。ChanlunX 把每一级拆成独立模块对应四个源文件。流水线级别源文件输出结构K线包含处理KxianChuLi.cpp合并后的 Kxian 序列笔识别Bi.cpp、BiChuLi.cppBi 列表 / 端点标记线段连接Duan.cpp线段端点标记中枢识别ZhongShu.cppPivot 列表zg/zd/direction第一级K线包含关系处理包含关系指相邻两根K线高低点互相覆盖。处理规则取决于当前走势方向向上时取高高向下时取低低。KxianChuLi 的add方法逐根吞入K线边处理边维护方向// KxianChuLi.cpp逐根K线做包含处理 if (gao this-kxianList.back().gao di this-kxianList.back().di) { // 向上记录为方向1 kxian.fangXiang 1; } else if (gao this-kxianList.back().gao di this-kxianList.back().di) { // 向下记录为方向-1 kxian.fangXiang -1; } else if (gao this-kxianList.back().gao di this-kxianList.back().di) { // 前包含按方向吞并高低点jieShu 向后延伸 this-kxianList.back().jieShu 1; }注意每个合并后的 Kxian 都会记录kaiShi起点坐标与jieShu终点坐标坐标信息在后续输出端点标记时至关重要。第二级成笔判定笔是相邻顶底分型之间的走势段。BiChuLi 用ifChengbi判断一段K线能否成笔先要求至少4根合并后K线再验证是否出现突破前低的更低价向下笔或突破前高的更高价向上笔。// BiChuLi.cpp向下成笔的核心判断 if (tempKxianList.size() 4) return false; // K线数不足不成笔 float zuiDiJia tempKxianList.at(i).di; // 记录当前最低价 for (unsigned int j i 1; j tempKxianList.size(); j) { if (tempKxianList.at(j).di zuiDiJia) return true; // 出现更低价笔成立 }成笔后Bi结构体记录方向、起止坐标与最高最低价若后续K线继续创新高向上笔则笔延续、终点后移这就是走势未走完、笔会不断修正的原因。第三级与第四级线段与中枢Duan.cpp 在笔序列之上做标准化连接提供标准画法与11终结两种画法ZhongShu.cpp 统计连续三笔的重叠区间输出Pivot含 zg 中枢高、zd 中枢低、direction 方向并支持识别同方向第 N 个中枢。4. 九个DLL函数公式与C算法之间的桥通达信通过固定的回调约定调用插件。ChanlunX 在 Main.cpp 中注册了9个计算函数每个函数接收(nCount, pOut, a, b, c)形式的裸指针数组。函数注册表// Main.cpp注册函数表nFuncMark 对应公式中的函数编号 static PluginTCalcFuncInfo Info[] { {1, Func1}, // 简笔顶底端点 {2, Func2}, // 标准笔顶底端点 {3, Func3}, // 线段端点标准画法 {4, Func4}, // 线段端点11终结画法 {5, Func5}, // 中枢高点 {6, Func6}, // 中枢低点 {7, Func7}, // 中枢起点(1)/终点(2) {8, Func8}, // 中枢方向 {9, Func9}, // 同方向第 N 个中枢 {0, NULL}}; BOOL RegisterTdxFunc(PluginTCalcFuncInfo **pInfo) { if (*pInfo NULL) { *pInfo Info; return TRUE; } return FALSE; }数据如何流转以中枢输出为例公式先调用函数2得到笔端点序列 FRAC再把 FRAC、H、L 传给函数5/6/7。Main.cpp 内部把 float 指针拷贝进std::vector调用ZS()得到Pivot列表再把 zg、zd、起止信号逐位写回输出缓冲区。整个链路全是值语义的数组搬运不涉及共享内存隔离干净。编号输入参数输出内容典型用途1/2H、L顶底端点 ±1画简笔/标准笔3/4FRAC、H、L线段端点 ±1画标准线段/11线段5FRAC、H、L中枢高点数组画中枢上沿6FRAC、H、L中枢低点数组画中枢下沿7FRAC、H、L起点1、终点2标记中枢边界8FRAC、H、L方向数组区分上/下中枢9FRAC、H、L同向第 N 序号计数同向中枢5. 三步完成环境搭建与编译部署ChanlunX 使用 CMake 构建算法部分编译为静态库插件本体是共享库。整个流程只需三个步骤。第一步准备环境CMake 3.20 或更高版本Visual Studio 2019需支持 C17通达信金融终端用于部署验证第二步CMake 编译按通达信位数选择架构参数32位选Win3264位选x64mkdir build cd build cmake -A Win32 .. cmake --build . --config ReleaseCMakeLists.txt 中有个值得注意的设计算法核心chanlunx_core编译为静态库并与 DLL 一起使用/MT静态链接 CRT让插件自包含、不依赖宿主程序运行时而测试程序单独用/MD配合 GoogleTest 的动态 CRT两条链路互不干扰。第三步部署到通达信把编译产物ChanlunX.dll复制到通达信安装目录的T0002\dlls\。在通达信公式系统里把该 DLL 绑定为2 号插件函数。新建主图公式粘贴下一节的公式代码即可。提醒DLL 位数必须与通达信一致混用会导致加载失败。6. 主图公式实战三行代码画出缠论全貌绑定2号插件后公式里用TDXDLL2(函数号, 参数...)调用。以下公式完整画出了笔、线段及两级中枢{标准笔端点} FRAC:TDXDLL2(2,H,L,0); {画上升/下降笔黄色虚线} DRAWLINE(FRAC-1,L,FRAC1,H,0), DOTLINE,COLORYELLOW; DRAWLINE(FRAC1,H,FRAC-1,L,0), DOTLINE,COLORYELLOW; {笔中枢的高、低与起止} BIZG:TDXDLL2(5,FRAC,H,L); BIZD:TDXDLL2(6,FRAC,H,L); BISE:TDXDLL2(7,FRAC,H,L); {画笔中枢黄色矩形} STICKLINE(BISE,BIZD,BIZG,0,0),COLORYELLOW; {线段端点改4为11终结画法} DUAN1:TDXDLL2(3,FRAC,H,L); {画线段橙色实线} DRAWLINE(DUAN1-1,L,DUAN11,H,0), COLORFF8000; DRAWLINE(DUAN11,H,DUAN1-1,L,0), COLORFF8000;公式思路值得拆解DRAWLINE以 ±1 为条件把相邻顶底连成直线STICKLINE用中枢区间绘制矩形函数5/6/7 的返回值只在中枢内部非零配合IF(BIZG,BIZG,DRAWNULL)即可在非中枢区段留白。你还可以把函数4换成函数3验证两种线段画法的差异。7. 质量保障GoogleTest 与双链路构建算法类项目最怕看着对、一测就错。ChanlunX 用 Google Test 覆盖核心函数的边界情况。测试用例设计// tests/chanlunx_test.cpp边界与正常场景并重 TEST_F(Bi1Test, 空数据返回全零) { std::vectorfloat out Bi1(0, {}, {}); EXPECT_EQ(out.size(), 0ul); // 空输入不崩溃 } TEST_F(Bi1Test, 正常笔划分) { std::vectorfloat h {10.0f, 12.0f, 11.0f, 7.0f}; std::vectorfloat l {9.0f, 8.0f, 7.0f, 6.0f}; std::vectorfloat out Bi1(4, h, l); EXPECT_EQ(out.size(), 4ul); // 输出长度与输入一致 }测试覆盖空输入、单根K线、两根K线不成笔、正常成笔等场景直接规避了数组越界和异常输入崩溃这两类插件高危问题。双链路构建的意义测试程序直接编译算法源文件chanlunx_test链接CORE_SRCS而不是链接/MT的静态库因此可以用/MD与 GoogleTest 的动态 CRT 正常配合。这种插件与测试各走各的运行时的做法避免了两套 CRT 混用导致的崩溃是值得借鉴的工程细节。8. 二次开发与进阶玩法模块化让扩展门槛很低算法层加函数、接口层注册编号、公式层调用三步即可上线一个新指标。扩展一个笔中枢个数函数在 ZhongShu.cpp 里基于ZS()的结果写一个计数函数在 Main.cpp 中照抄 Func9 的注册方式加为 10 号函数然后公式里TDXDLL2(10,FRAC,H,L)即可。整个流程不需要改动任何既有接口。与常用指标联动缠论结构适合与其他指标互相验证这里给出不同周期下的参考配置思路应用场景适用周期观察重点联动指标短线1/5分钟笔的快速转折MACD 背驰波段30/60分钟线段方向均线多空排列中线日线中枢突破成交量配合长线周/月线大级别中枢波动率过滤9. 对比与取舍为什么选DLL 公式这条路缠论分析实现方式不少ChanlunX 的选择有其明确理由对比维度ChanlunX独立行情软件量化平台脚本落地成本复制一个DLL即可需要切换软件依赖平台环境计算性能C 原生、毫秒级一般取决于解释器规则透明度开源可审计黑盒可查看与看盘流程集成直接画在主图上需来回切换通常无图形化主图开发门槛需编译 C无扩展能力脚本语言门槛低它的主要代价是编译环境要求Windows MSVC和通达信平台绑定。但如果你日常就在通达信里看盘这种零切换成本的收益通常大于迁移成本。10. 小结与下一步ChanlunX 的价值在于把缠论从主观经验变成可执行、可复现、可验证的代码K线包含、成笔、线段、中枢四级流水线职责清晰9个 DLL 函数与通达信公式无缝对接GoogleTest 与双链路构建为质量兜底。它适合三类人想统一缠论画法的技术分析爱好者、需要快速验证缠论结构的中级开发者、以及想在通达信生态里做指标创新的量化实践者。下一步建议先按本文三步跑通部署再用测试用例库做边界回归最后在公式层尝试你自己的画法组合——算法的边界往往就是你对缠论理解的边界。【免费下载链接】ChanlunX缠中说禅炒股缠论可视化插件项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考