ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

通达信缠论中枢主图公式:用BACKSET与DRAWLINE实现笔和分型

通达信缠论中枢主图公式:用BACKSET与DRAWLINE实现笔和分型 简介这份通达信指标公式源码文档专为缠论技术分析爱好者与有公式编写基础的通达信用户准备。文档将缠论中的中枢、高低点识别过程转化为可直接运行的公式覆盖中枢均线CLG、CLD、高低点CLHH、CLLL、中枢高低点确认CLFG01、CLFD01及延迟判断等关键变量并附有完整绘图语句。利用这份源码使用者可以在主图上自动标出中枢区间与买卖参考位置也能通过逐段阅读变量逻辑理解缠论走势类型在指标层面的量化方法。资源包共有1个doc文件大小约237KB内容精炼、便于导入与二次修改。到目前为止已有674人学习适合希望在通达信环境中快速获得缠论中枢标记、并深入研究中枢结构的投资者。1. 缠论中枢主图画不出来的原因通达信公式没有 for 循环第一次动手做缠论中枢主图的人通常会卡在同一个地方中枢不是一根均线而是由连续有重叠区间的笔构成的几何结构而通达信公式语言没有 for、没有递归也没有真正的数组。这套源码绕过了这个限制它用 BACKSET 做时间回填用 BARSLAST 动态定位上一次信号的位置再用 DRAWLINE 把确认后的高低点连成线段最终在主图上画出黄白虚线构成的笔与中枢。适合两类人一类是想把缠论规则程序化验证的交易者另一类是已经写过不少通达信指标、但对序列函数和未来函数边界不够清楚的工程师。阅读时要记住一条主线所有变量都是逐 K 线计算的序列而不是一次性算完的数组。2. BACKSET 和 BARSLAST 的序列运算这套源码的时间轴引擎2.1 通达信公式没有循环条件回填是唯一出路通达信公式里所有变量本质上都是序列也就是每个 K 线位置都保留一个值。当你写CLG:MA(C,5)得到的不是一根抽象的 5 日平均线而是每根 K 线上都有一个具体数字。真正棘手的是“转折点”这类信号当前 K 线上无法判断前一根 K 线是不是顶分型必须等右侧 K 线走出来之后才能确认。传统编程语言里你会写一个 for 循环倒序遍历历史数据但公式语言禁止循环和递归所以只能换一种思路。这套源码的解决办法是把“判断转折”改写成“条件为真时反向点亮前面的位置”也就是 BACKSET 函数。BACKSET 的含义是当前条件成立时把当前位置之前的 N 根 K 线都置为 1否则置为 0。源码里最典型的用法是BACKSET(CLHH,6)BACKSET(CLHH,5)它比较两次回填的差值恰好落在第 6 根 K 线的位置上。左边为 1 而右边为 0说明这里出现了一次条件从假变真的边界这个边界就是顶分型或底分型的形成点。CLG:MA(C,5); CLD:MA(C,10); CLHH:REF(H,5)HHV(H,11); CLLL:REF(L,5)LLV(L,11); CLFG01:BACKSET(CLHH,6)BACKSET(CLHH,5); CLFD01:BACKSET(CLLL,6)BACKSET(CLLL,5);这段代码的逻辑是HHV(H,11)取最近 11 根 K 线的最高价REF(H,5)取当前 K 线之前第 5 根的最高价两者相等说明这根 K 线是 11 根窗口内的最高点。这个“最高点”只是候选顶分型源码并没有直接把它当作画线点而是等 BACKSET 制造出的时间边界出现后再确认。这样做能避免在分型还没走出来时提前画线也是缠论“右侧确认”思想在通达信里的落地方式。2.2 REF、HHV、LLV 组合用动态回溯替代指针这套源码里 REF 出现的频率极高比如REF(H,BARSLAST(CLFG0))、REF(L,1)。REF 本身是时间位移REF(X,N)表示 N 根 K 线之前的 X 值。当 N 不是一个固定常量而是BARSLAST(条件)的返回值时就实现了动态回溯。BARSLAST(条件)返回从当前 K 线往回数最近一次条件成立到当前经过的 K 线数量。所以REF(H,BARSLAST(CLFG0))的含义是提取上一个被确认的高点那根 K 线的最高价。这三个函数配合起来等于在公式里维护了一个“最近一次信号的位置”指针不需要循环就能跳到任意历史位置。这也是为什么整份源码从头到尾没有出现FOR或WHILE却能画出前后连贯的笔。下表列出这套源码依赖最深的几个函数方便对照阅读函数作用源码中典型用法BACKSET条件为真时回填前 N 根 K 线标记BACKSET(CLHH,6)BACKSET(CLHH,5)BARSLAST返回上一次条件成立到当前的间隔BARSLAST(CLFD0)REF取 N 根 K 线前的某个值REF(H,BARSLAST(CLFG0))HHV / LLV窗口内最高值或最低值HHV(H,11)、LLV(L,11)COUNT统计区间内条件成立次数COUNT(CLBH0,BARSLAST(CLFD0))DRAWLINE在两点之间画线段DRAWLINE(CLUU,L,CLNN,H,0)理解 BARSLAST 的关键是当条件在当前 K 线成立时BARSLAST 返回 0。很多人第一次读到CLFGH:REF(H,BARSLAST(CLFG0))时以为取的是“上一根 K 线”实际上取的是当前这根。后续代码用BARSLAST(CLFG0)1、BARSLAST(CLFG0)2来获取确认点之后第一、第二根 K 线的数据目的是拼出包含关系处理后的新高低点。这个 1、2 的写法是理解整段中枢计算最核心的突破口。2.3 COUNT 和 IF 嵌套把缠论笔规则转成状态机缠论里“笔至少由 3 根 K 线组成”是一条硬约束但因为有包含关系实际需要的 K 线数量会动态变化。源码用CLBH0判断当前 K 线与前一根是否存在包含关系再用 COUNT 统计从上一个底分型到当前一共发生了多少次包含最后用 IF 嵌套组装出当前笔的最小 K 线数CLBH0:(HREF(H,1) AND LREF(L,1)) OR (HREF(H,1) AND LREF(L,1)); CLBHG:COUNT(CLBH0,BARSLAST(CLFD0)); CLBHD:COUNT(CLBH0,BARSLAST(CLFG0)); CLBK0:IF(CLBHG0,CLBHG21,IF(CLBHD,CLBHD21,3)); CLBK:IF(CLBGQ,CLBK0-CLBGQ,IF(CLBDQ,CLBK0-CLBDQ,CLBK0));CLBH0的写法是标准包含判断当前最高价不高于前高且最低价不低于前低或者反过来两者互为包含。COUNT 统计的是区间内的包含数量。CLBK0在包含计数基础上加 3得到“这一笔至少需要多少根 K 线”的下界如果从上一个顶分型起有跳空缺口再用CLBGQ和CLBDQ做扣减。这里的核心思想是包含关系越多笔的骨架越长因为连续包含的 K 线合并后仍然属于同一笔。这比简单固定“3 根 K 线”更贴近缠论原意也是这套源码里比较耐看的实现。3. 逐段拆解源码从顶底分型到笔中枢的确认流程3.1 第一层确认用均线关系判断顶底优先级BACKSET 找出的只是候选分型真正画线前还需要确认顶底分型交替出现。如果连续出现两个顶分型中间没有底分型那后一个顶分型就不能直接当作新笔的端点。源码用CLFG02和CLFD02做第一层过滤过滤依据竟然是 5 日均线和 10 日均线的相对位置CLFG02:IF(BARSLAST(CLFG01)BARSLAST(CLFD01) AND CLGCLD,CLFG01, IF(BARSLAST(CLFD01)BARSLAST(CLFG01),CLFG01,0)); CLFD02:IF(BARSLAST(CLFG01)BARSLAST(CLFD01) AND CLDCLG,CLFD01, IF(BARSLAST(CLFG01)BARSLAST(CLFD01),CLFD01,0));这里的分支逻辑是如果顶分型和底分型同时出现也就是候选信号重叠在同一根 K 线上则用 CLG 与 CLD 的大小关系决定优先取哪一个。CLG 是 5 日均线CLD 是 10 日均线短期均线在上方时优先保留顶分型反之保留底分型。如果底分型比顶分型更晚出现则BARSLAST(CLFD01)BARSLAST(CLFG01)成立说明当前结构还停留在向上笔的构建中应当保留顶分型。紧接着的CLFG0做了第二次过滤确认这个顶分型不仅要是局部高点而且必须位于上一个底分型之后的最高点。HHHV(H,BARSLAST(CLFD02))的意思是从上一个确认底分型到现在当前最高价等于这个区间内的最大值。这比单纯判断“K 线是高点”更严格它直接实现了缠论里“顶比顶高、底比底低”的笔规则。画点时CLGP:IF(CLFG0,H,DRAWNULL)会把确认后的高点和低点画成青色圆点非确认位置的值为 DRAWNULL绘图函数会自动跳过。3.2 第二层过滤包含关系合并与顶底严格确认分型确认之后源码开始处理包含关系。缠论里处理包含关系时有一套“合并后取高低点”的规则比如向上笔遇到包含取两根 K 线的较高高点和较高低点作为合并后的 K 线。源码用一组以CLFGH1、CLFGL1、CLFGH2、CLFGL2命名的变量去取分型后面第一根、第二根 K 线的价格再比较它们的高低关系CLFGZH:IF(CLFGLCLFGL1,CLFGH2,CLFGH1); CLFGZL:IF(CLFGH1CLFGL,CLFGL,IF(CLFGLCLFGL1,CLFGL2,CLFGL1)); CLFDZH:IF(CLFDL1CLFDH,CLFDH,IF(CLFDHCLFDH1,CLFDH2,CLFDH1)); CLFDZL:IF(CLFDHCLFDH1,CLFDL2,CLFDL1);这些语句并不是在画线而是在模拟“分型后两根 K 线合并成一个新实体”的过程。如果分型之后第一根 K 线的最低价低于等于前一根的最低价说明两根 K 线有重叠区间需要用第二根的高价去替代如果不存在这种关系就保留第一根。这套合并逻辑无法处理任意长度的连续包含但在日线级别已经够用。如果你需要复现缠论更严格的“先确定方向再合并”这里可以改成循环结构只是通达信不允许所以作者选择退化成两两比较。在这个基础上源码得到CLFG1和CLFD1两个核心条件CLFG1:CLFGHCLFDZH AND CLFG0; CLFD1:CLFDLCLFGZL AND CLFD0;CLFG1的含义是一个向上笔的终点其高点必须高于上一个向下笔的“中枢高点”同时它自身的最低点也要大于上一个底分型的最低点。这条规则同时过滤了假突破和中枢内部的无效波动。很多使用者发现指标在震荡行情里不画线原因往往就在这里当最后一个高点没能突破前一个中枢高点时源码不会把它当作新的顶分型而是当作中枢内部的普通波动。3.3 画线输出DRAWLINE 与中枢的可视化边界所有逻辑最终落在两行 DRAWLINE 上CLNN:CLG3; CLUU:CLD3; DRAWLINE(CLUU,L,CLNN,H,0),COLORYELLOW,DOTLINE; DRAWLINE(CLNN,H,CLUU,L,0),COLORWHITE,DOTLINE;DRAWLINE 的用法是DRAWLINE(条件1,价格1,条件2,价格2,EXPAND)当条件 1 成立时以价格 1 为起点条件 2 成立时以价格 2 为终点画一条线段。第一个参数是CLUU也就是向下笔的底分型确认条件价格参数是 L所以黄色虚线连接的是两个相邻底分型的低点绘制的是向下笔。第二条白色虚线连接两个顶分型的高点绘制的是向上笔。你看到的黄白交替虚线就是缠论笔的自动画法。中枢本身没有用封闭矩形直接绘制而是通过上下笔的虚线交叉体现。如果你希望更直观的中枢区间可以在源码后面追加一行STICKLINE画矩形背景但原版刻意不做成封闭框因为它要保留缠论“中枢是动态延伸区间”的原意。中枢的上下沿会随着笔的延伸不断被修正这也是为什么源码里需要反复用BARSLAST背来背去的原因。读懂 DRAWLINE 的参数顺序比读懂所有 IF 嵌套更重要因为输出的坐标一旦错位前面积累的确认逻辑全部白算。4. 主图叠加与参数调优把公式装进通达信的四个关键点4.1 新建主图公式画线方法必须选对“中枢主图”和“震荡指标”在通达信公式管理器里是两套不同的坐标体系。缠论中枢画的是 K 线主图上的线段所以新建公式时画线方法必须选择“主图叠加”否则 DRAWLINE 的坐标会被压缩到副图区域黄白虚线全部变形。操作步骤是打开通达信按CtrlF打开公式管理器选择“新建”公式类型选“其他”或“用户”把“画线方法”改为“主图叠加”将源码粘贴进编辑区点“测试公式”。测试输出窗口会显示“当前公式测试通过”或者具体的错误行号。从 Word 文档复制源码最常见的问题是引号和分号被转成全角。通达信公式编辑器只接受半角分号和半角括号如果粘贴后出现类似CLGMAC5的字符测试会直接报“缺少分号”。我的建议是粘贴后先全选内容在公式编辑器中统一替换用半角;替换全角用(替换用)替换。这一步做完基本能消除 90% 以上的粘贴报错。源码末尾的画线语句里有一个多余的逗号例如CLG1H:IF(...),;这是原始文件里的常见冗余符号通达信通常能容忍但建议删掉末尾逗号再测试。4.2 函数兼容性BACKSET 与版本差异BACKSET 属于通达信扩展函数早期版本或部分券商定制版可能禁用。如果你在测试公式时看到“函数 BACKSET 未定义”先不要怀疑源码逻辑确认软件版本是否支持通达信公式系统 6.06 以上。另一个需要注意的问题是BACKSET 的结果会随当前 K 线位置变化而回填天然带有未来函数特性。缠论分型本来就依赖右侧确认这个回填是设计使然但在分钟线或分时图里使用时最后一根 K 线上的值会不断跳动这是正常现象不代表指标错误。下面这个表整理了这套源码最容易遇到的三类问题现象可能原因处理方式测试报“缺少分号”Word 里全角符号全角分号替换为半角画线不出来公式类型选了副图改为“主图叠加”最后一根 K 线圆点闪烁BACKSET 未来回填切到日线周期观察提示函数不存在券商精简版换通达信官方版本或开启扩展函数如果你打算在分钟周期上使用建议接受最后一根 K 线圆点位置可能变化的事实不要用它作为实时交易信号。缠论结构确认本来就需要右侧 K 线走出来和均线金叉那种“即时出信号”的指标完全不同。想要减小跳动幅度可以加大 HHV 的窗口参数但代价是确认更慢。4.3 参数调整从固定窗口到周期自洽源码里的HHV(H,11)和LLV(L,11)中的 11是分型识别的窗口宽度。这个 11 的含义是以当前 K 线位置向前取 11 根 K 线寻找局部最高点和最低点。窗口越大顶底分型的确认越慢但噪音越少窗口越小信号越灵敏但虚笔会增多。部分使用者会把 11 改成 21对应至少 21 根 K 线才能确认一个分型画出来的笔会更长中枢数量明显减少。另一个值得调的参数是 CLBK 里的数字 3。这个 3 表示一笔至少由 3 根 K 线构成只是这里的 3 会和包含关系计数叠加。如果你把 3 改成 5则一笔至少需要 5 根非包含 K 线整体结构会更粗。调整参数后DRAWLINE 的连接点会变少虚线会更稀疏这是正常现象。建议先用默认参数跑一遍历史数据再逐步加大窗口观察虚线断开频率的变化。过程中不要动 BARSLAST 相关逻辑因为它是整套状态机的地基参数只应该调 HHV 窗口和笔的最小 K 线数。5. 用沙盘推演验证中枢边界一个针对未来函数的复盘技巧缠论主图指标最容易被质疑的地方就是 BACKSET。即使你理解回填逻辑仍需要验证一件事指标在当前 K 线上画出的边界是否真的只用到了当前及之前的数据。通达信自带的沙盘推演是验证这个问题的正确工具。进入方式是在主图界面按46键或者通过菜单“查看 - 沙盘推演”。进入后逐根向后加载 K 线观察黄白虚线在每一根 K 线上的位置是否稳定看后续 K 线出现后前一根 K 线附近的转折点是否突然移位。我一般会按下面的步骤复盘先在主图界面上确认最后一根已画出的顶分型或底分型手工记录它的价格按46进入沙盘推演用方向键往后推 5 根 K 线观察之前记录的价格位置是否还在同一条虚线上如果位置没变说明该周期上指标的右侧确认逻辑稳定如果位置变了把 HHV 窗口从 11 调大到 13 或 21再重复。这种方法比单纯看历史回测更直接因为它验证的是公式在时间轴上的确定性。还有一个可以搭配使用的技巧在通达信公式末尾临时加一行输出把 CLG3 和 CLD3 的当前状态用 DRAWNUMBER 标在主图上作为转折点的数字标记。比如DRAWNUMBER(CLG3,H,CLG3,0),COLORYELLOW; DRAWNUMBER(CLD3,L,CLD3,0),COLORWHITE;这只是临时调试代码验证完可以删除。用沙盘推演推最后一根 K 线时如果数字标记的数值没有在后续 K 线出现后改变说明当前参数下的中枢边界可以信任如果数值每次回放都不同说明窗口参数过小需要把 11 至少调整到 21。这个差值才是你决定参数是否要调换的真正依据。本文还有配套的精品资源点击获取
返回列表