技术指标函数
技术指标函数是公式开发的「主力武器」。本章按用途分组,把均线、振荡器、统计、信号、形态五类常用函数的写法和原理讲清楚,每个都配可直接复制的代码。
一、均线族
均线是最基础的指标,但有多种算法,差别要在写公式前搞清。
| 函数 | 算法 | 用法 |
|---|---|---|
MA(X, N) | 简单移动平均 = (X1+…+Xn) / N | 最常用 |
EMA(X, N) | 指数加权,近权重大,反应快 | 短线 |
SMA(X, N, M) | 加权移动平均,M 是权重 | 通用 |
WMA(X, N) | 线性加权移动平均 | 部分版本 |
DMA(X, A) | 动态移动平均,A 是权重 | 自适应 |
{ 双均线策略 }
MA5 := MA(CLOSE, 5);
MA20 := MA(CLOSE, 20);
金叉 := CROSS(MA5, MA20);
死叉 := CROSS(MA20, MA5);
MA对每根 K 线等权,滞后最大;EMA给近期更大权重,反应快但噪声大。新手先从MA起步。
二、振荡器
振荡器数值围绕 0 或 50 中轴波动,用来判断超买超卖和顶背离 / 底背离。
MACD
DIF : EMA(CLOSE, 12) - EMA(CLOSE, 26);
DEA : EMA(DIF, 9);
MACD : 2 * (DIF - DEA), COLORSTICK;
金叉 := CROSS(DIF, DEA);
DIF(快线)= 12 日 EMA − 26 日 EMA。DEA(慢线)= DIF 的 9 日 EMA。MACD(柱)= 2 × (DIF − DEA),画成红绿柱。
KDJ
RSV := (CLOSE - LLV(LOW, 9)) / (HHV(HIGH, 9) - LLV(LOW, 9)) * 100;
K : SMA(RSV, 3, 1);
D : SMA(K, 3, 1);
J : 3 * K - 2 * D;
金叉 := CROSS(J, 0); { J 上穿 0,超卖反弹 }
- 9 日内最高最低算 RSV,再两次 SMA 平滑得 K、D。
J = 3K − 2D,反应最敏感,可小于 0 或大于 100。
RSI
LC := REF(CLOSE, 1);
上涨 := SUM(MAX(CLOSE - LC, 0), 14);
下跌 := SUM(MAX(LC - CLOSE, 0), 14);
RSI : 上涨 / (上涨 + 下跌) * 100;
超买 := RSI > 70;
超卖 := RSI < 30;
- 14 日内上涨幅度均值 / (上涨均值 + 下跌均值) × 100。
- 70 以上超买,30 以下超卖。
BOLL(布林带)
中轨 : MA(CLOSE, 20);
Upper : 中轨 + 2 * STD(CLOSE, 20);
Lower : 中轨 - 2 * STD(CLOSE, 20);
- 中轨 = 20 日均线。
- 上下轨 = 中轨 ± 2 倍标准差。
- 价格触上轨偏强、触下轨偏弱;带宽收窄预示变盘。
三、统计与波动
| 函数 | 含义 |
|---|---|
STD(X, N) | N 周期内 X 的标准差 |
AVEDEV(X, N) | N 周期内 X 的平均绝对偏差 |
VAR(X, N) | N 周期内 X 的方差 |
HHV(X, N) | N 周期内 X 最高值 |
LLV(X, N) | N 周期内 X 最低值 |
SUM(X, N) | N 周期内 X 之和 |
MA(X, N) | N 周期简单平均 |
{ 20 日波动率 }
波动率 := STD(CLOSE, 20) / CLOSE * 100;
{ 价格在布林带下轨之下,可能超卖 }
下轨 := MA(CLOSE, 20) - 2 * STD(CLOSE, 20);
超卖 := CLOSE < 下轨;
四、信号函数
| 函数 | 含义 |
|---|---|
CROSS(A, B) | A 上穿 B(前一根 A < B,当前 A > B) |
CROSSDOWN(A, B) | A 下穿 B(部分版本支持) |
BARSLAST(X) | 上一次 X 成立到现在的周期数 |
COUNT(X, N) | N 周期内 X 成立的次数 |
EVERY(X, N) | N 周期内 X 是否一直成立 |
EXIST(X, N) | N 周期内 X 是否至少成立一次 |
BACKSET(X, N) | 把当前位置到 N 周期前的所有 K 线设置为 X 的值 |
FILTER(X, N) | X 成立后 N 周期内忽略后续 X 信号 |
{ 金叉后保留信号 5 天内不再发 }
金叉 := CROSS(MA(CLOSE, 5), MA(CLOSE, 20));
有效金叉 := FILTER(金叉, 5);
五、形态与数学
| 函数 | 含义 |
|---|---|
MAX(A, B) / MIN(A, B) | 取两者最大 / 最小 |
ABS(X) | 绝对值 |
SQRT(X) | 平方根 |
INTPART(X) | 取整(向 0 取) |
CEILING(X) | 向上取整 |
FLOOR(X) | 向下取整 |
MOD(A, B) | 取余 |
POW(A, B) | A 的 B 次方 |
LOG(X) / LN(X) | 常用对数 / 自然对数 |
SIN(X) / COS(X) / TAN(X) | 三角函数 |
BETWEEN(A, B, C) | A 是否在 B、C 之间 |
{ 实体大小(百分比) }
实体 := ABS(CLOSE - OPEN) / REF(CLOSE, 1) * 100;
实战:双均线 + MACD 双确认
MA5 := MA(CLOSE, 5);
MA20 := MA(CLOSE, 20);
DIF := EMA(CLOSE, 12) - EMA(CLOSE, 26);
DEA := EMA(DIF, 9);
均线金叉 := CROSS(MA5, MA20);
MACD金叉 := CROSS(DIF, DEA);
双确认 := 均线金叉 AND MACD金叉;
DRAWICON(双确认, LOW, 1); { 双确认时在最低价处画图标 }
实战:5 日均线多方排列
{ 5 > 10 > 20 > 60 日均线,多头排列 }
MA5 := MA(CLOSE, 5);
MA10 := MA(CLOSE, 10);
MA20 := MA(CLOSE, 20);
MA60 := MA(CLOSE, 60);
多头排列 := MA5 > MA10 AND MA10 > MA20 AND MA20 > MA60;
写指标的几个习惯
- 主图指标用 CLOSE 算均线、画在主图——叠加 K 线看趋势。
- 副图指标如 MACD/KDJ/RSI 数值范围与价格不在一个量级,必须画副图。
- 画线用
:,中间变量用:=——避免把图搞乱。 - 测试时把中间变量都画出来,便于排查逻辑错误。
下一章 条件选股公式 把上述指标组合成可执行的选股策略。