通达信一条线向上怎么写公式,问的其实不是语法,而是「拿哪两个点比」。把参照点定下来,代码只有两三行;参照点定错了,写出来的线会在盘中反复跳。下面按这个顺序说:先定参照,再写判据,最后校口径。
一、先想清楚「一条线向上」比的是什么
通达信一条线向上怎么写公式,第一步是给「向上」找到可计算的落点。价格在某两根 K 线之间升高,是两点的比较;均线在连续若干根上抬高,是序列趋势的比较。这两种写法的代码结构完全不同,混在一起会得到看起来能亮、实际没意义的结果。
| 参照方式 | 它实际在算 | 适合什么场景 |
|---|---|---|
| 与前一根比 | 两个相邻数值的大小关系 | 单点突破、瞬时变化 |
| 与 N 根前比 | 跨固定间隔的两点比较 | 阶段性抬升、周期对比 |
| 连续 N 根逐根抬高 | 序列单调性 | 趋势确认、形态过滤 |
| 角度或斜率 | 变化量除以间隔 | 不同价位之间的陡缓对比 |
四种里只有前三种是纯粹的大小比较,第四种引入了除法。斜率在低价和高价之间不可直接对比,这一点后面单列一节讲。
二、最小写法:两行就够了
以收盘价与前一根比较为例,公式可以用最朴素的两句表达。关键词只涉及当前值与历史引用,不涉及任何预测。
{ 与前一根比:今天高于昨天 }
向上: CLOSE > REF(CLOSE, 1);
{ 与五根前比:跨固定间隔 }
抬高: CLOSE > REF(CLOSE, 5);
这两句已经是完整的布尔表达式,输出只有成立与不成立两个状态。想让它显示成一条连续的线而不是离散的点,需要把比较结果乘上数值本身,也就是常说的「条件线」写法。
{ 条件成立时画出收盘价,不成立时留空 }
条件线: IF(CLOSE > REF(CLOSE, 1), CLOSE, DRAWNULL);
DRAWNULL 的作用是断开连线。若把它换成 0,不成立的区间会掉到 0 的位置,图形看起来会多出一段从价格区坠落的斜线,容易被误读成行情变化。
三、要求「连续抬高」时怎么写
只有当前这一根高于前一根,说明不了趋势,中间完全可以插一根回落。要表达连续抬高,得把多组比较串联起来。
{ 连续三根逐根抬高 }
连升三: CLOSE > REF(CLOSE, 1)
AND REF(CLOSE, 1) > REF(CLOSE, 2)
AND REF(CLOSE, 2) > REF(CLOSE, 3);
这种写法直观,但长度随条件数线性增长。若要判断十根、二十根,手工展开容易漏写或错位。更省事的做法是借用 EVERY 或统计函数。
{ 连续 N 根抬高:EVERY 逐根检查 }
连升: EVERY(CLOSE > REF(CLOSE, 1), 5);
{ 区间内抬高次数达到阈值 }
多数抬高: COUNT(CLOSE > REF(CLOSE, 1), 5) >= 3;
EVERY 要求区间内每一根都成立,条件更严;COUNT 加阈值则允许中间有回落。需求里说「稳步向上」通常指向后者,说「持续新高」才对应前者。四、均线向上与价格向上的区别
均线本身是若干根收盘价的平均值,它向上意味着平均值在抬升,与当根收盘价高低无关。有时价格当天在跌,均线仍在升;有时价格跳空,均线还没跟上。把两者当成一回事,是新手在多头排列判断上出错的常见位置。
{ 均线:先算平均,再比两根 }
均线: MA(CLOSE, 20);
均线向上: 均线 > REF(均线, 1);
{ 多头排列:短中长三条依次抬高 }
多头排列: MA(CLOSE, 5) > MA(CLOSE, 10)
AND MA(CLOSE, 10) > MA(CLOSE, 20);
价格向上、均线向上、均线多头排列,是三个不同层级的判据。写公式前先确认需求落在哪一层,否则会出现「明明条件写对了,信号还是不对」的情况。
五、斜率写法与它的适用边界
有些人希望表达「抬得够陡」,会引入斜率。最简形式是变化量除以间隔。
{ 斜率:差值除以根数 }
斜率: (CLOSE - REF(CLOSE, 5)) / 5;
六、校口径:三个容易漏的检查点
| 检查点 | 要确认什么 | 漏掉的后果 |
|---|---|---|
| 复权方式 | 除权日附近的收盘价是否连续 | 除权当天出现假抬高 |
| 数据起点 | REF 取到的位置是否存在 | 序列开头无数据处输出异常 |
| 周期 | 公式挂在哪一级周期上 | 日线上成立的信号,周线上不成立 |
复权方式对「向上」的影响最容易被忽略。除权当天的收盘价会因为送转而下移,与前一根直接比较会得到一个向下的结论,而实际走势并未转弱。把公式放在前复权口径下运行,这类假信号会明显减少。
数据起点的处理与公式本身无关,属于通达信的填充规则:序列开头的 REF 取不到值时,比较结果不成立,不会报错也不会画出线。写测试时可以刻意把公式挂到某段行情的起点附近,观察开头几根的输出是否符合预期。
七、上机验证的顺序
通达信一条线向上怎么写公式写完之后,先别直接看信号。建议按下面三步走,每步都能把问题范围缩小一层。
第一步,把条件线单独画在主图或副图上,观察它出现的密度是否与预期一致。密集到几乎每根都亮,说明条件过松;整段不亮,先查是不是把周期或复权弄错了。
第二步,挑几个已知的区间手工核对。找一段明确连续上行的行情,看信号是不是覆盖到位;再找一段横盘,看有没有被误触发。
第三步,把比较根数或阈值改一档,观察信号数量的变化方向是否符合逻辑。改大条件反而变松,通常意味着某处引用写反了。
八、常见写法误区
一是把绘图函数当成计算函数。DRAWLINE、DRAWTEXT 这类只在界面上产生图形,不参与后续计算。用它「算出」一个值再拿去做判断,结果不会如预期。
二是漏写历史引用。只写 CLOSE > REF(CLOSE, 1) 才是比较;写成 CLOSE > CLOSE 恒不成立,程序不会报错,只是永远不亮。
三是把 AND 与 OR 的优先级记反。多种条件混合时,用括号把分组写清楚,比依赖默认优先级更稳妥。
四是条件数量堆太多。每加一个条件都会减少信号数量,堆到七八个条件后信号可能完全不出现。先从必要条件开始,确认能亮再加过滤项。
相关的基础写法可以对照 公式编写教程 里的语法说明;若遇到公式不亮的情况,先看 报错与卡顿排查 的分层思路;参数如何影响信号密度,见 指标原理与参数。
把参照点定下来、把口径校一遍、再按三步验证走一遍,这条线才算真正写对。剩下的功夫在数据上,不在语法上。
