通达信指标参数设置不是在给指标按灵敏度旋钮。公式管理器里那张参数表只有三列:最小、最大、缺省,它规定公式能接受什么值、第一次调用时默认填什么。真正决定指标长相的,是参数代进函数之后取的是多长的一段数据、门槛切在哪一侧。改数之前先看清参数占的是哪个位置。
一、参数不是精度旋钮
把参数当灵敏度旋钮,是绕进试参数循环的第一步。参数不参与计算方式:HHV(H,N) 里的 N 从 10 换成 60,求最大值这件事的做法没变,变的是被扫过的那段数据有多长。参数只做两件事:给窗口类函数一个长度,给判定类表达式一条门槛。
参数登记在公式管理器里。打开它(功能 → 公式系统 → 公式管理器,快捷键 Ctrl+F,以本机菜单为准),选中公式点「修改」,编辑窗口底部就是参数表,三列依次是最小、最大、缺省。这三列都是约束:用户能填的上下界,以及公式第一次被调用时的默认值。
参数在函数体里只是一个名字:起名 LEN,函数体里写 LEN 就是占位符,运行时替换成实际值;名字别与 C、O、H、L、V 这些系统字段名撞,否则编译器分不清参数与收盘价。
参数表里的缺省值,与指标窗口右键「调整参数」改的那个值不是同一份。前者写在公式自己身上;后者是本机的一份用户值,通达信把这类用户侧设置放在安装目录下的 T0002 目录里,换品种后按该品种保存的那份生效。
二、两类参数:周期类与阈值类
参数分两类,看它落在函数的哪个位置就能分出来。
周期类参数站在窗口函数的第二个位置上,决定扫多少根。REF、HHV、LLV、MA、SUM、EMA、COUNT 都吃这个参数。有个取值单独记:参数填 0 时从第一个有效值开始统计,不做截断,所以 HHV(H,0) 与 HHV(H,20) 是两种口径。
阈值类参数不给长度,给一条分界线。它出现在比较表达式里,或作为 IF、DRAWTEXT 的条件,只决定条件被切在哪一侧,窗口长度不动。
两类参数的差别落到图上能看见。周期类改小,窗口变短,曲线贴得离价格更近;阈值类放宽,满足条件的根变多,新增的那几根落在原有位置的两侧,原来那批一根不少。前者动的是形状,后者动的是条数与边界。
{ 公式管理器的参数表:参数名 / 最小 / 最大 / 缺省 }
{ LEN 0 1000 0 }
R1 := HHV(H, LEN);
R2 := LLV(L, LEN);
范围内 : IF(C >= R2 AND C <= R1, 1, 0);
三、周期取数的三层口径
通达信指标参数设置里容易混的一层,是周期参数到底从哪里取数。同一根 K 线上有三种取法,读的对象不同,选错一层,参数改多少都是错的方向。
本根周期:读一个点
直接写 C、O、H、L、V、AMOUNT,读的就是当前这一根;BARSCOUNT(C) 这类数根数的量也在这层。它回答的是「这一根是什么」,拿不到窗口上的稳定性。
N 根窗口:读一段序列
用窗口函数把最近若干根合成一个数。有两处边界要交代:REF(C,N) 取的是 N 根之前那一根,不含本根;HHV、LLV、MA 的窗口右端含本根。含与不含差一根,参数改小时,差别就压在这一根上放大。
跨周期引用:读另一条周期轴
在日线公式里读周线的值,写法是把周期后缀接在引用串上,形状如 "公式名.线名#WEEK",后缀的可用取值以本机公式编辑器的引用语法为准。
三者不能互相替代,差别在时间结构上。周期不整除时,这种差别会显形:一周有五个交易日,引用周线得到的值在这一周内的每根日线上是同一个数,被重复使用;反过来用日线的五根窗口近似周线,碰到停牌、半周、跨月就对不齐。跨周期引用还要求被引用周期的数据已下载补全,取不到时读到的是空值而非零,空值参与运算会一路传下去,输出一条不画线的结果。
V1 := C; { 本根周期:直接取本根字段 }
V2 := REF(C, LEN); { N 根窗口:取 LEN 根之前那一根,不含本根 }
V3 := "公式名.线名#WEEK"; { 跨周期引用 }
| 取数口径 | 写法形状 | 读的对象 | 什么时候不适用 |
|---|---|---|---|
| 本根周期 | 直接写 C、O、H、V |
当前这一根的值 | 要窗口上的稳定性时,一个点给不出 |
| N 根窗口 | 窗口函数加参数 | 本周期最近若干根的合成值 | 拿它冒充另一个周期的取值时 |
| 跨周期引用 | 引用串接周期后缀 | 另一条周期轴上的同一时刻 | 周期不整除、被引用周期数据未补全时 |
REF 往左错一位,HHV、LLV、MA 收本根。改参数之前先确认用的是哪一支。四、阈值参数的定义域与边界
阈值类参数也有定义域,由参数表的最小、最大两列给定。缺省值必须落在区间内,是保存时的硬约束;填到区间外,公式管理器会给提示,措辞以本机为准。
参数表没有单位列。同一个阈值写成 0.05 还是 5,取决于公式内部怎么用它。从别处抄一组阈值过来,先确认单位口径,否则门槛会差出两个数量级。
阈值改动之后,信号的变化能按机制推出来:门槛放宽,满足条件的根变多,新增的那几根落在原有信号的两侧;门槛收紧,条数变少,留下来的那些位置不动。位置由数据决定,阈值只决定切在哪一侧。
边界还有一层在阈值自己身上。阈值写成常数时,数据贴着门槛来回穿越的位置上,条件跟着翻转,输出在那一段抖动。把阈值换成一段窗口的均值是另一种做法,换掉的是阈值这一侧的取数口径,不在参数表定义域能管的范围里。
判定的对象还得存在。阈值比较的那个量在新上市、停牌、当日数据未补全的根上是空;此时判定结果不是不成立,是空。用 ISNULL 加 NOT 走一遍,才能分清是数据没到还是条件不成立。
五、改动之后的复核顺序
通达信指标参数设置改完之后,别凭一眼看图下结论。按下面五步核一遍,能少走几轮来回试参数的路。
第一步回参数表再跑一遍输出线。改动的值有没有落在最小与最大之间;在图上改的,先确认这份改动写进了本机配置,保存项与生效时机以本机版本为准。然后把输出线单独挂到主图或副图上:冒号 : 进输出清单并画线,:= 只做中间量、图上不出现,参数改动的影响只在冒号那一层看得见。
第二步看空值段。窗口或周期换掉之后,起点附近的数据可能不够,前几根取不到值,为空时输出 DRAWNULL 让图上不画线;空值段显式地空着,不靠肉眼猜断在哪一根。
{ 空值段显式化:起点不足时输出 DRAWNULL }
OK1 := NOT(ISNULL(R1));
线A : IF(OK1, R1, DRAWNULL);
第三步用 REF 错位做对照。原参数与新参数各输出一条线,放在同一张图上逐根对齐,看差异从哪一根开始,是只多出几根,还是整段形状都换了。
第四步到选股或预警入口再看一次结果集。同一个公式在两个入口跑,参数来源未必相同:图上设过的用户值有没有带进选股,以本机版本表现为准。结果集条数变了而数据没动,先怀疑参数来源不同,别认定是写法出错。
第五步固化。确认新参数要长期用,回公式管理器的参数表改缺省值并保存,别只留在图上那份用户值里。
| 改动位置 | 改的是哪一份值 | 生效范围 | 怎么固化 |
|---|---|---|---|
| 公式管理器的参数表 | 公式自带的缺省值 | 所有没单独设过的品种 | 保存公式 |
| 指标窗口的调整参数 | 本机保存的一份用户值 | 该品种上的该指标 | 回参数表改缺省值 |
六、三类误区
误区一,把参数当精度旋钮。窗口缩短不等于更准,只是让更多本根波动进到输出里;窗口拉长不等于更稳,它把信号往后推。参数改的是口径,正确率不归它管。
误区二,拿跨周期引用代替窗口。跨周期读的是另一条周期轴上的一个值,在不整除的周期上被重复使用;窗口函数读的是本周期的一段序列,逐根不同。两者可能碰巧长得像,逐根对齐就分开。
误区三,在图上改完参数就当公式改过了。图上改的是本机那份用户值,公式换到别的品种、别的机器、另一次导入之后,按参数表里的缺省值走。
把这几处串起来,通达信指标参数设置处理的就是两件事:窗口取多长,门槛切在哪。它不改变函数怎么算,也不替读者挑参数值:取多少属于各指标自己的口径选择,站内按指标分开写;本篇只交代机制、定义域与边界,参数值本身不下结论。
本文只作技术研究口径,不涉及也不构成对任何标的的判断。
站内还有 通达信指标原理与参数 的条目,通达信公式编写教程 里讲函数与语法写法,指标回测与风险验证 里讲改动之后怎么对照,可对照查看。
