统计与指标函数

策略的「判断」部分,九成靠统计指标函数:算均线、找极值、量波动、判穿越。 本章把 TBQuant 里最高频的一批统计与指标函数整理成速查表,配上示例。

均线类

函数签名说明
AverageFCNumeric AverageFC(Numeric Price, Numeric Length)快速简单移动平均(Length 不能用变量)
AverageNumeric Average(Numeric Price, Numeric Length)简单移动平均(Length 可用变量,稍慢)
XAverageNumeric XAverage(Numeric Price, Numeric Length)指数加权移动平均(EMA),近期权重更大
ma5  = AverageFC(Close, 5);     // 5 周期简单均线
ema20 = XAverage(Close, 20);    // 20 周期指数均线

AverageFCAverage 快,但第二个参数(周期)必须是常量,不能用变量;需要动态周期时用 Average。 跨平台对比均线写法,可看 均线指标详解(含 TBQuant 的 AverageFC)。

极值与求和

函数说明
Highest(Price, Length)过去 Length 周期 Price 的最高值
Lowest(Price, Length)过去 Length 周期 Price 的最低值
HighestBar(Price, Length)最高值出现在几根之前
LowestBar(Price, Length)最低值出现在几根之前
Summation(Price, Length)过去 Length 周期 Price 的累加和
SummationFC(Price, Length)快速累加和
Numeric hh = Highest(High, 20);    // 20 日最高价(突破阻力)
Numeric ll = Lowest(Low, 20);      // 20 日最低价(跌破支撑)

波动与分布

函数说明
StandardDev(Price, Length, DataType)标准差;DataType=1 总体方差,2 样本方差
VariancePS(Price, Length)估计方差
AvgDeviation(Price, Length)平均偏差
Numeric vola = StandardDev(Close, 20, 2);   // 20 周期收盘价标准差(衡量波动)

布林带的核心就是「均线 ± N 倍标准差」,用 AverageFC + StandardDev 即可手搓。

交叉判断

函数签名说明
CrossOverBool CrossOver(Series<Numeric> P1, Series<Numeric> P2)P1 上穿 P2 返回 True
CrossUnderBool CrossUnder(Series<Numeric> P1, Series<Numeric> P2)P1 下穿 P2 返回 True
Bool golden = CrossOver(maFast, maSlow);    // 金叉
Bool death  = CrossUnder(maFast, maSlow);   // 死叉

重要提示:官方文档特别提醒,判断穿越时尽量避免用 Close 这种不确定的元素,否则实盘会信号闪烁。 一般用 HighCrossOver(向上突破)、LowCrossUnder(向下突破)更稳健。

条件与逻辑

函数说明
IIF(Cond, TrueVal, FalseVal)三元:条件成立取 TrueVal,否则 FalseVal
IIFString(Cond, TrueVal, FalseVal)字符串版三元
Compare(A, B)数值比较
Sign(X)符号函数(-1/0/1)
Numeric body = IIF(Close > Open, Close - Open, Open - Close);  // K 线实体大小

数学计算(精选)

函数说明
Abs(X)绝对值
Max(A, B) / Min(A, B)最大/最小值
Sqrt(X) / Sqr(X)平方根 / 平方
Power(X, N) / Exp(X)乘幂 / e 的 N 次幂
Round(X, D)保留 D 位小数四舍五入
Mod(A, B)取余

完整函数库(数百个)可在公式编辑器里通过「帮助」查看官方文档;这里只列策略最高频的部分。

综合:带波动的突破策略片段

Vars
    Numeric upper;
    Numeric lower;
Events
    OnBar(ArrayRef<Integer> indexs)
    {
        upper = AverageFC(Close, 20) + 2 * StandardDev(Close, 20, 2);
        lower = AverageFC(Close, 20) - 2 * StandardDev(Close, 20, 2);

        If (MarketPosition != 1 && CrossOver(High, upper))
            Buy(1, Open);           // 突破上轨买开
        If (MarketPosition == 1 && CrossUnder(Low, lower))
            Sell(0, Open);          // 跌破下轨卖平
    }

小结

  • 均线用 AverageFC(快,常量周期)/ Average(变量周期)/ XAverage(EMA)。
  • 极值 Highest/Lowest、波动 StandardDev、求和 Summation
  • 交叉 CrossOver/CrossUnder,但实盘别用 Close 判断,改用 High/Low 防闪烁。
  • 条件用 IIF,数学用 Abs/Max/Min/Round 等。

下一步

逻辑写好了,接下来用历史数据回测验证策略到底赚不赚钱: 策略回测