技术指标函数

技术指标函数是公式开发的「主力武器」。本章按用途分组,把均线、振荡器、统计、信号、形态五类常用函数的写法和原理讲清楚,每个都配可直接复制的代码。

一、均线族

均线是最基础的指标,但有多种算法,差别要在写公式前搞清。

函数算法用法
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;

写指标的几个习惯

  1. 主图指标用 CLOSE 算均线、画在主图——叠加 K 线看趋势。
  2. 副图指标如 MACD/KDJ/RSI 数值范围与价格不在一个量级,必须画副图。
  3. 画线用 :,中间变量用 :=——避免把图搞乱。
  4. 测试时把中间变量都画出来,便于排查逻辑错误。

下一章 条件选股公式 把上述指标组合成可执行的选股策略。