ARTICLE DETAIL

资讯详情

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

通达信主图公式实战:M+K+R叠加KDJ与RSI源码清洗

通达信主图公式实战:M+K+R叠加KDJ与RSI源码清洗 简介本资源为通达信平台专用的【MKR主图】技术指标公式源码面向熟悉通达信公式语法、希望在同一主图内综合观察多指标共振的股票技术分析爱好者与指标编写初学者。源码将MACD、KDJ、RSI三类指标重新映射到统一坐标区间通过DRAWBAND绘制多层带状分区DRAWICON标注超买超卖与买卖信号STICKLINE与DRAWKLINE还原K线及柱体便于对照研判趋势与背离。压缩包仅1个doc文档约23KB内含完整可直接导入的公式代码及字段注释涉及SMA、EMA、LLV、HHV、REF、CONST等函数的实际用法适合边读边改、理解变量定义与绘图逻辑。目前已有243人学习可作为指标二次开发与主图结构改造的参考样本但需结合自身投资策略与风险承受能力谨慎使用。1. 拿到一份 .doc 命名的主图源码先别急着往通达信里粘很多人手上都躺着一份从群里、论坛里存下来的.doc文件名写着「MKR主图」。多数人的做法是双击打开 Word全选复制粘进通达信公式管理器然后被一串「变量未定义」「缺少分号」顶回来。问题不在公式难而在于这份文档里混着三种东西真正的公式语句、Word 自动排版塞进去的全角符号、以及作者手写的中文说明。MKR 这名字也不是随便起的它对应三层信息压在同一张主图上——M 段是趋势与成本线K 段是 KDJ 的动能R 段是 RSI 的强弱三者共用一个价格刻度。做这件事的价值很直接不用在副图之间来回切动能和强弱直接标在你正在看的那根 K 线上。适合两类人一是自己攒指标、想把副图信号搬到主图上的二是手里有.doc、.txt这类明文源码需要清洗成可编译公式的。下面按结构拆解、公式管理器落地、文本清洗、结果验证的顺序走完一遍。2. MKR 主图公式的三段结构坐标系、归一化与画线函数2.1 M 段先定刻度主图纵轴是价格不是 0 到 100通达信在同一个窗口里画线时所有输出线共用一套纵轴刻度。K 线图的纵轴是价格元副图的纵轴通常是 0 到 100 或者成交量。把 KDJ 的 K 值直接输出在主图K80 就会画在 80 元的位置股价 8 元的时候这条线永远在屏幕外面。这不是公式写错了是刻度共用导致的必然结果。所以 M 段的作用不只是画趋势线它先给整张图确立一个价格基准。常见写法有两类。一类是均线族MA(C,N)、EMA(C,N)直接就是价格量纲天然对齐。另一类是成本线用区间成交额除以区间成交量得到这段时间的市场平均成交价。后者被很多源码称作「主力成本线」配套一条更长的均线叫「散户成本线」。需要说清楚的是AMOUNT/VOL算出的是全市场在该区间的加权均价它更接近筹码平均成本不等于任何机构的真实持仓成本理解成「市场成本线」比理解成「主力底牌」更靠谱。2.2 K 段与 R 段把 0 到 100 的指标压进价格通道K 段和 R 段的原始取值都在 0 到 100 之间要画到主图上必须做一次线性映射。做法是取最近 NN 根 K 线的最高价和最低价构成一条价格通道然后把 0 到 100 的指标值等比拉伸到这个区间里主图坐标 通道下沿 (指标值 / 100) × (通道上沿 - 通道下沿)这个式子看着简单参数选择才是关键。NN 取太小比如 20通道跟着最近几根 K 线剧烈变化映射出来的线会像心电图一样上下抽NN 取太大比如 500通道被远处的极值撑开最近的价格波动在通道里只占一小块指标线会挤成一条平直的带子。我一般把 NN 默认设成 120大致对应半年的交易日既覆盖了屏幕可见范围又不会被单根异常 K 线带偏。还有一处细节J 值会超过 100 也可能低于 0映射之后线会跑出通道外。这属于正常现象因为 J 本身就是放大过的量可以保留也可以夹紧到 0 到 100 再映射看你更希望它表达极端情绪还是保持通道整洁。2.3 DRAWKLINE、DRAWTEXT、DRAWICON 在主图里的分工主图叠加时通达信自己已经画好了 K 线绝大多数情况下不需要再调用DRAWKLINE。只有要做涨跌变色、特殊蜡烛图样式时才会重画一遍覆盖原图重画时必须按DRAWKLINE(HIGH,OPEN,LOW,CLOSE)的参数顺序顺序写错会得到一根根错位的柱子。信号标注用DRAWTEXT(COND,PRICE,文本)和DRAWICON(COND,PRICE,TYPE)。这两个函数里的 PRICE 参数是价格坐标所以要写成LOW*0.98这类贴近 K 线的表达式不能直接填 20、30 这种数字否则信号会全部堆在屏幕顶部。TYPE 是图标库的编号不同版本图标表有差异建议先用文字标注调试视觉位置确认后再换成图标。2.4 主图公式与副图公式的差异对照维度主图公式副图公式纵轴刻度价格元与 K 线共轴0 到 100 或成交量量纲K 线绘制系统自带DRAWKLINE仅用于覆盖不涉及信号标注落点必须是价格表达式落在指标值上叠加方式右键主图叠加或勾选画在主图独立窗口自动分配多线冲突量纲不统一必然画到屏幕外各线差异小容错高除零风险通道上下沿相等时必现相对较低这张表里的最后一行值得单独强调一只股票连续一字板时HHV(HIGH,NN)和LLV(LOW,NN)可能相等分母为零公式直接返回无效值整条线断掉。所有归一化公式的分母都要加一个极小值兜底这是后面源码里反复出现的0.0001的来历。3. 在通达信公式管理器里把 MKR 主图编译通过3.1 新建主图公式的四步操作与参数表通达信公式管理器 6.06 这类版本的入口在「功能」菜单下的「公式系统」快捷键一般是 CtrlF。新建一个技术指标公式的完整流程是第一步CtrlF 打开公式管理器展开左侧的「技术指标公式」选中「其他类型」这样新建的公式才会出现在主图叠加的可选列表里。第二步点「新建」在公式名称里填一个英文短名比如MKR中文名会影响部分版本的调用。第三步切到「参数」标签页把周期做成可调参数而不是写死在源码里。参数填写方式如下表。参数名最小最大缺省作用N156013短期趋势线与成本窗N21012034中期趋势线N32025055长期趋势线NK3309KDJ 的 RSV 计算窗NR33014RSI 计算窗NN60500120归一化价格通道窗第四步把清洗好的源码粘进编辑区点「测试公式」。测试通过后确定保存回到 K 线图在空白处右键找到主图叠加入口选中MKR。部分版本的入口在公式编辑窗口的「画在主图上」勾选项上位置不同但效果一样。3.2 M 段源码趋势均线加市场成本线{ MKR 主图 M 段趋势与成本 } MA1:EMA(CLOSE,N1),COLORWHITE,LINETHICK1; MA2:EMA(CLOSE,N2),COLORYELLOW,LINETHICK1; MA3:EMA(CLOSE,N3),COLORGREEN,LINETHICK1; {近 N1 日成交均价AMOUNT 单位元VOL 单位手除以 100 折算成每股价格} COSTZ:SUM(AMOUNT,N1)/SUM(VOL,N1)/100; COSTL:EMA(COSTZ,N2),COLORGRAY,DOTLINE;这里有三个点需要交代。AMOUNT是成交额单位是元VOL是成交量单位是手一手 100 股所以除以 100 才能得到「元/股」的口径漏掉这一步成本线会高出两个数量级直接跑到 K 线上方看不见。:是中间变量不画线:是输出语句会画一条线写错符号就会出现「测试通过但图上什么都没有」的经典现象。三条 EMA 用不同颜色区分但都保持LINETHICK1主图线太粗会盖住 K 线的影线。3.3 K 段与 R 段源码归一化叠加与信号标注{ K 段与 R 段统一映射进价格通道 } HIP:HHV(HIGH,NN); LOP:LLV(LOW,NN); RNGP:HIP-LOP0.0001; {通道高度加极小值防止一字板除零} {--- K 段KDJ 的 K、J 值 ---} RSV:(CLOSE-LLV(LOW,NK))/(HHV(HIGH,NK)-LLV(LOW,NK)0.0001)*100; KVAL:SMA(RSV,3,1); DVAL:SMA(KVAL,3,1); JVAL:3*KVAL-2*DVAL; KLINE:LOP(KVAL/100)*RNGP,COLORMAGENTA,LINETHICK1; JLINE:LOP(JVAL/100)*RNGP,COLORCYAN,DOTLINE; {--- R 段RSI 强弱 ---} LC:REF(CLOSE,1); RSIV:SMA(MAX(CLOSE-LC,0),NR,1)/SMA(ABS(CLOSE-LC),NR,1)*100; RLINE:LOP(RSIV/100)*RNGP,COLORBROWN,LINETHICK1; {--- 信号标注K 上穿 D 且 RSI 在 50 上方 ---} XG:CROSS(KVAL,DVAL) AND RSIV50; DRAWTEXT(XG,LOW*0.985,K穿D),COLORRED; DRAWICON(XG,LOW*0.965,1);SMA(X,N,M)是通达信的加权移动平均第三个参数是权重KDJ 和 RSI 的标准算法都用SMA(...,3,1)这种形式换成MA会得到另一条完全不同的曲线很多从网上抄来的源码错就错在这一步。CROSS(A,B)只在两者交叉的那一根 K 线上返回 1配合AND做条件叠加信号不会连续重复。LOW*0.985让文字落在 K 线下方约 1.5% 处这个系数按你屏幕的缩放习惯微调即可。这里所有的条件组合都只是显示逻辑的演示用来验证公式有没有按预期输出。3.4 编译报错与显示异常的排查表现象常见原因处理方式提示变量未定义变量名与内置函数重名或漏写:改名例如把K改成KVAL测试通过但主图无输出用了:而非:需要画线的语句改成:线条飘在屏幕外K、R 段没做价格映射补上 min-max 归一化那一步主图叠加菜单找不到公式公式建在了非技术指标目录重建在「技术指标公式」下成本线数值高得离谱漏了/100的单位换算核对 AMOUNT、VOL 的单位中文注释变乱码粘贴时编码不是 ANSI记事本另存为 ANSI 再复制某些股票线断掉通道上下沿相等导致除零分母统一加 0.0001排查顺序建议从「有没有输出」开始再看「输出在不在可见范围」最后才怀疑算法。绝大多数问题出在语法和坐标系两个层面算法本身反而是最不容易错的一环。4. 从 .doc 到通达信源码清洗、参数化与叠加调试4.1 .doc 另存纯文本与编码选择直接全选复制粘贴是最容易翻车的路径Word 的智能替换会把直引号变成弯引号、会插入软换行、会把连续空格压成一个。稳妥做法是在 Word 里点「文件 → 另存为」格式选「纯文本 (*.txt)」弹出编码选项时选简体中文对应的 ANSI 编码再用记事本打开这个 txt 检查一遍。这样得到的内容是干净的字符流复制进公式编辑器不会夹带格式信息。拿到 txt 之后先别急着整体粘贴。建议按{注释块把源码切成 M 段、K 段、R 段三个部分逐段粘、逐段测试。整段报错时定位成本高分段之后哪一段不过一目了然。4.2 全角符号与非法标识符替换表.doc里最常见的问题就是全角符号肉眼几乎看不出来但编译器一律不认。下面是高频出现的一组。原始写法问题替换为全角括号函数参数解析失败()全角冒号赋值符不识别:或:全角分号语句分隔失败; 弯引号字符串常量不识别 ——中文破折号注释起始错位改用{}包裹一个换行塞两句语句边界丢失每句单独一行处理顺序上先做全局替换再看报错。通达信的报错信息往往只给行号不给原因替换完常见符号之后剩下的报错基本就集中在变量命名和函数拼写上。4.3 把硬编码周期改成可调参数从文档里抄来的源码经常把周期写死比如满屏的EMA(C,13)、SMA(RSV,3,1)。这样的公式一旦行情结构变了就得回编辑器改源码。把周期提到参数页签之后在 K 线图上右键指标就能直接调参数改完立刻重算不用碰源码。{改造前} MA1:EMA(CLOSE,13),COLORWHITE; {改造后13 换成参数 N1在参数页签里配 5/60/13} MA1:EMA(CLOSE,N1),COLORWHITE;参数化的边界也要设最小值和最大值不是摆设。N1 的最小值设成 5 是防止有人填 1EMA 退化成收盘价本身NN 的最大值设成 500 是防止窗口拉得太大公式计算量上去之后切股变卡。这些限制填在参数页签里比自己写 IF 判断更省事。4.4 多条线叠在同一主图后的视觉去重M 段三条均线、K 段两条、R 段一条六条线挤在一张主图上一开始肯定糊成一团。处理手法有三个层次。第一层是线型区分趋势类用实线成本类用DOTLINE动能类用LINETHICK1细线强弱类换一个色系。第二层是隐藏不常用的输出改成:中间变量需要时再临时打开。第三层是降采样如果 K 段和 R 段走势高度重合说明两者在同一段行情里给的是同向信息保留参数更敏感的那一条就够了。判断两条线是否信息重复有个简单办法把其中一条临时改名成AA:xxx输出到副图和另一条并排看两条线在最近 60 根 K 线上同向变动的比例超过八成就可以考虑合并展示。5. 验证 MKR 主图算得对不对对拍、边界与除零检查公式能编译、能画线不等于算得对。归一化映射这类逻辑最典型的错误是通道选错或者系数写反图上看着有趋势实际数值是错的。验证要从数值层面做。5.1 用副图对拍主图输出最直接的办法是另建一个副图公式把主图里用到的中间变量原样输出两边数值对着看。{对拍副图输出参与主图映射的原始值} KVAL:SMA((CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9)0.0001)*100,3,1); RSIV:SMA(MAX(CLOSE-REF(CLOSE,1),0),14,1)/SMA(ABS(CLOSE-REF(CLOSE,1)),14,1)*100; {主图映射后的理论坐标 LOP 指标值/100 × RNGP可与主图鼠标读数比对}副图上读到的 KVAL 若是 62通道上下沿分别是 8.00 和 12.00那么主图上对应的坐标应当是8.00 0.62 × 4.00 10.48。把鼠标移到同一根 K 线上看十字光标标出的主图线数值是不是这个结果误差在小数点后两位以内就算对上了。对不上的话优先怀疑通道取的是不是同一个周期其次检查有没有漏掉0.0001。5.2 改 NN 看线的行为验证归一化窗口把 NN 从缺省值依次改成几个极端值观察线的形态这个动作能验证归一化逻辑是否真的生效。NN 取值预期现象说明5线剧烈上下抽动常贴通道边缘通道被最近几根 K 线主导60线在通道中段波动有明确形态约一个季度的窗口120波动平缓与价格走势大致同步缺省值兼顾灵敏度与稳定性500线被压成一条窄带几乎看不出起伏通道被远处极值撑开如果改 NN 之后线的形态毫无变化说明源码里那个参数根本没被用上多半是映射那一步写死了常数。5.3 除零与极值防护的检查清单连续一字板的股票是这类公式的压力测试样本。停牌复牌、新股上市前几个交易日、长期无量横盘的票都会把HHV和LLV逼到相等。检查项有三个通道高度RNGP有没有加极小值兜底RSV 的分母有没有做同样处理J 值超出 0 到 100 时映射线跑出通道是保留还是夹紧。{把超界的 J 值夹回 0 到 100 再映射通道更整洁} JFIX:MIN(MAX(JVAL,0),100); JLINE:LOP(JFIX/100)*RNGP,COLORCYAN,DOTLINE;三个检查项里前两个是必须的缺一个就会出现断线第三个是风格选择取决于你更想看到极端情绪被压平后的规整还是想保留 J 值冲顶时那条冲出通道的尖刺。本文还有配套的精品资源点击获取
返回列表