TB语言类型与变量

TB 语言(TradeBlazer Language)介于 C++ 与 Pascal 之间,是强类型语言——每个变量和参数都要先声明类型再用。 本章把语法拆成几个最小零件:数据类型、参数、变量、三段式结构。掌握这些,就能读懂并改写绝大多数策略。

四种基本数据类型

类型含义示例
Numeric浮点数(带小数),策略里最常用5.0ClosemaFast
Integer整数1CurrentBar
Bool布尔(真/假)TrueCrossOver(maFast, maSlow)
String字符串"金叉"

此外还有 Series<T>(序列类型,按 Bar 存储历史值)、对象、枚举、结构体等高级类型,后续进阶会用到。

三段式结构

一个完整的策略由三段组成:

Params                      // 参数段:可调参数,运行时能改,代码内不可赋值
    Numeric FastLen(5);
    Numeric SlowLen(20);

Vars                        // 变量段:策略内部变量,可赋值
    Numeric maFast;
    Numeric maSlow;

Events                      // 脚本段:事件回调,写策略逻辑
    OnBar(ArrayRef<Integer> indexs)
    {
        maFast = AverageFC(Close, FastLen);
        maSlow = AverageFC(Close, SlowLen);
    }

Params(参数)

参数是预先声明的「输入」,用来存放外部传入的值:

  • 代码内不可修改(不能对参数赋值),在整个策略运行期间保持不变。
  • 好处是:调参时不用改代码、重新编译——回测、实盘、优化时直接在属性框里改参数值即可。
  • 声明时给默认值,如 Numeric FastLen(5);

Vars(变量)

变量是存储计算结果的地址:

  • 声明后可在脚本中赋值、引用,避免重复计算。
  • 命名规则:字母、数字、下划线,不能以数字开头,区分大小写。
  • 可以不给默认值(按类型自动初始化)。

Events(事件回调)

事件回调是策略逻辑的载体:OnInitOnReadyOnBarOnOrder 等(详见 事件驱动模型入门)。

序列变量 Series

普通变量每根 K 线重新计算,无法回看历史值。当你需要「前一根 K 线的某个值」时,用序列变量

Vars
    Series<Integer> serValue(0);

Events
    OnBar(ArrayRef<Integer> indexs)
    {
        serValue = serValue[1] + 1;   // serValue[1] 取上一根 Bar 的值
        Print("当前值:" + Text(serValue));
    }
  • Series<T> 按 Bar 存储数据,用 变量名[N] 回溯 N 根之前的值([1] = 上一根)。
  • 行情数据 Close/High/Low 本身就是序列,所以 Close[1] 就是昨日收盘。

变量作用域补充

除了 Vars(普通变量),TB 还有几类特殊变量,了解即可:

关键字作用域用途
Vars当前公式普通局部变量(最常用)
Global整个策略策略全局变量,跨事件共享
Series<T>按 Bar 存储序列变量,可回看历史值

新手用 Vars + Series 已经足够;多数据源、跨事件共享状态时再考虑 Global

运算符与控制流

算术:  +  -  *  /  Mod
比较:  >  <  >=  <=  ==  !=
逻辑:  And  Or  Not   (也写 &&  ||  !)
赋值:  =
控制:  If ... Else ...    For ...    While ...

条件分支示例:

If (MarketPosition == 0)
{
    If (CrossOver(maFast, maSlow))
        Buy(1, Open);
}
Else If (MarketPosition == 1)
{
    If (CrossUnder(maFast, maSlow))
        Sell(0, Open);
}

注释

// 单行注释

/* 多行
   注释 */

小结

  • 四种基本类型:Numeric(最常用)、IntegerBoolString;需要回看历史用 Series<T>
  • 策略三段式:Params(参数,不可改)/ Vars(变量)/ Events(事件逻辑)。
  • 运算符、If/For/While 控制流与常见语言类似,赋值用 =

下一步

语法过关后,认识策略最常用的行情数据与交易函数: 行情与交易函数