通达信趋势指标公式里那个写着 N 的数字,改起来只是一个键入动作,但它改掉的是整条曲线看多长的历史。周期参数不是「快慢档位」这种抽象说法,它就是滑动窗口长度:窗口取 5,公式每算一根 K 线只往回数 5 根;窗口取 20,就要往回数 20 根。窗口越长,参与运算的历史越长,输出的位置、平滑程度与反应速度都会跟着变。下面把这件事拆成机制、代码与操作三段讲清楚。
一、周期参数的本质:一个滑动窗口的长度
趋势类指标的共同结构是把过去若干根 K 线的价格做一次加权或平均,得到一个当下的值。这个「若干根」就是周期参数,它决定了参与运算的历史长度、每根旧数据在结果里的权重、以及新数据进入窗口后结果移动的幅度。
把它想成一根固定长度的尺子贴在 K 线图上,右端贴着最新的一根,左端随新的 K 线向右推进,同时丢掉最老的那一根。窗口长度越大,尺子上承载的信息越多,单根 K 线的跳动对整体结果的影响就越小。这就是平滑的来源,也是滞后的来源,两者是同一个机制的两面。
判断一条趋势线属于长窗口还是短窗口,不用看源码,看它在大幅波动段里的走法就够了:贴着价格走、转折处拐得急的,窗口短;与价格保持距离、转折处圆钝的,窗口长。这条判据与具体公式名无关,MA、EMA、MACD 都适用。
二、从 MA 看窗口长度对输出的影响
MA 是最直白的例子,因为它对窗口内每根 K 线一视同仁。写 MA(CLOSE,5),输出的第 N 根等于最近 5 根收盘价的算术平均;写 MA(CLOSE,20),输出的第 N 根等于最近 20 根收盘价的算术平均。同一段行情、同一个位置,两条线用到的数据条数不同,算出来的值自然不同。
{两条均线并列显示,窗口长度不同}
MA5: MA(CLOSE,5),COLORWHITE;
MA20: MA(CLOSE,20),COLORYELLOW;
差别的性质可以用机制说清。在一段持续向上的走势里,5 根窗口只包含最近几个价位,价格一旦回落,窗口很快由「高价占多数」变成「低价占多数」,输出随之向下弯;20 根窗口里还有一批更早的价位在起作用,回落头几根时输出仍在向上或持平。等价格回落到把早期高价也挤出窗口,20 根窗口的输出才开始转向。两者不是数值差一个固定比例,而是转向时点不同、弯曲幅度不同,差距随窗口长度之比扩大。
还有一处容易被忽略的差别:窗口在行情起点的头几根无法凑满。公式管理器计算 MA(CLOSE,20) 时,从第 20 根 K 线起才有完整窗口,前面若干根要么为空、要么按客户端实现取已有的部分。看长窗口指标时,图左侧那一段的取值与其他位置未必同质,比较不同窗口的曲线时先要把这段排除。写到这一步,通达信趋势指标公式的窗口长度已经落到具体数字上,下一步是把数字换成参数。
三、EMA 与 MACD:平滑方式的差别
EMA 同样是「看多长历史」,但窗口里每根 K 线的权重不相等。写法 EMA(CLOSE,N) 中,N 决定权重衰减速度:N 越大,越老的价位衰减越慢,等效于看待一个更长的历史区间;N 越小,权重集中到最近几根,输出对最新价格更敏感。它与 MA 的窗口长度不是同一套刻度,把 MA(CLOSE,20) 和 EMA(CLOSE,20) 并排放在一起,后者拐得更早,原因在权重而不在历史长度。
{MACD 默认参数 12、26、9}
DIF: EMA(CLOSE,12) - EMA(CLOSE,26);
DEA: EMA(DIF,9);
MACD: (DIF-DEA)*2,COLORSTICK;
MACD 把两处窗口叠在一起用。第一条是 12 与 26 两个快慢窗口的差,差值本身读作短窗口看到的平均价减去长窗口看到的平均价;第二条是对这个差值再做一次 9 窗口的平滑。改 12 与 26,动的是两个窗口的长度差;改 9,动的是对差值信号的再平滑程度。三处改动影响的位置不同,调参前先想清楚要调的是哪一处。
这类嵌套结构里,外层窗口短于内层数据的形成周期才有效。把 EMA(DIF,9) 里的 9 改得比 12 还大时,平滑对象是一个变化本就不剧烈的差值序列,再叠加一个很长的窗口,输出会趋近于一条几乎不动的线。判断办法是改完挂图看一眼副图,曲线是否还有起伏。
四、把周期做成可调参数:N 与参数表
写死数字的公式不好用。通达信支持把窗口长度写成变量,再在参数表里给它一个取值范围与默认值,这样调周期不必进源码。做法是在公式管理器里新建或编辑公式时,切换到「参数」页,填一行参数名、最小、最大、缺省,然后在源码里用这个名字代替数字。
{参数表里填:N 最小 2 最大 250 缺省 20 }
{源码里用 N 代替写死的数字}
MA_N: MA(CLOSE,N),COLORWHITE;
参数表里那三列的作用不一样。最小与最大限定界面上能拉到的范围,防止把窗口设成 0 或超过可用的历史长度;缺省是公式刚挂上去时用的值。参数名建议用 N、M、P 这类单字母,通达信的函数名与保留字不要拿来当参数名,否则测试公式时会报名称冲突。
挂到图上之后,调整方式是选中公式进入「调整参数」,界面上出现参数滑块或输入框,改完确认即重算。入口位置随版本有差别,有的在主图右键菜单里,有的在公式管理器内,以官方版本说明为准。参数改动不会自动写回源码文件,源码里的缺省值仍是原来的数字,这一点在下面排查时会用到。
参数取值范围怎么定
取值范围的上下界由用途决定,不由手感决定。要看中短期波动形态,窗口取小一些才能反映近期结构;要看更长区间的方向,窗口就要覆盖得住完整段落。下界不建议设成 1:窗口为 1 时输出等于当前价格本身,曲线与 K 线重合,指标失去平滑意义。把最小值设成 2 或 3,是给后续调整留出可用区间。
五、改了参数但主图没变:排查顺序
这是操作层面出现频率最高的疑问:参数明明改过,主图上的线却与原来一样。按下面这个顺序逐项过,前一项确认无误再进入下一项。
- 先确认改动是否落盘。编辑完源码或参数表后要点「确定」或「保存」,直接关掉窗口改动不生效。用户公式在 T0002 目录内,备份在 T0002\gs_bak,源码没保存时挂图用的仍是旧版本。
- 再确认是否重算。参数改的是计算方式,屏幕上已有的曲线不会自己刷新,需要触发一次重新计算:切换标的再切回来、按刷新快捷键、或者关闭公式重新挂载,都能触发。
- 再确认改的是不是同一个公式。用户自建的公式与系统内置公式可能同名,参数表也是各自独立的;在参数表里改的是自建那条,主图上挂的却是内置那条,改多少个数字都不会动。回到公式管理器核对公式类别与名称,技术指标类里同名公式要看清属于哪一个分组。
- 最后确认参数是否被局部覆盖。某个指标挂在多个窗口上时,各窗口可以各存一套参数值,改的是当前窗口那一套。把公式重新挂一次,看是否用回源码里的缺省值。
| 现象 | 检查位置 | 处理 |
|---|---|---|
| 改了参数线没变化 | 源码编辑窗口是否点了确定 | 重新编辑并保存,再触发重算 |
| 保存后线仍旧 | 是否触发了重新计算 | 切换标的再切回,或重新挂载公式 |
| 改了却不影响主图 | 公式管理器里的类别与名称 | 核对挂载的是否为同一条公式 |
| 换个标的后又用回旧值 | 该公式在当前窗口的参数记录 | 重新挂载,或改源码缺省值 |
六、调参时的三个自检问题
改周期之前,先问三个问题。
第一问:要改的是窗口长度还是平滑方式?两者动的是不同的东西,前者动历史跨度,后者动权重分配。把 MA(CLOSE,20) 换成 EMA(CLOSE,20) 属于换平滑方式,把 20 改成 60 属于换窗口长度,分开做更容易看清是哪一处起了作用。
第二问:改动后的窗口,本地历史数据够不够?长窗口需要更长的历史序列,本地数据没下载完整时,图左侧会有一段不画出或取值异常。先在数据管理里确认该标的的历史数据已下载到需要的长度,再动参数。
第三问:改完的曲线与价格的位置关系变了多少?窗口加长后曲线离价格更远、转折更迟,这是同一机制的正常结果,不是公式出错。判断是否出错看的是语法是否通过、曲线是否连续画出,不看待定的位置关系。
把这三问走一遍,通达信趋势指标公式的周期参数就从「一个可以随便试的数字」变成了「一段明确指定的历史长度」。改之前知道它动的是什么,改之后知道该去哪里确认。参数本身没有对错,只有与所看的历史跨度是否匹配。
本文只作技术研究口径,不涉及也不构成对任何标的的判断。
