TB语言类型与变量
TB 语言(TradeBlazer Language)介于 C++ 与 Pascal 之间,是强类型语言——每个变量和参数都要先声明类型再用。 本章把语法拆成几个最小零件:数据类型、参数、变量、三段式结构。掌握这些,就能读懂并改写绝大多数策略。
四种基本数据类型
| 类型 | 含义 | 示例 |
|---|---|---|
Numeric | 浮点数(带小数),策略里最常用 | 5.0、Close、maFast |
Integer | 整数 | 1、CurrentBar |
Bool | 布尔(真/假) | True、CrossOver(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(事件回调)
事件回调是策略逻辑的载体:OnInit、OnReady、OnBar、OnOrder 等(详见 事件驱动模型入门)。
序列变量 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(最常用)、Integer、Bool、String;需要回看历史用Series<T>。 - 策略三段式:
Params(参数,不可改)/Vars(变量)/Events(事件逻辑)。 - 运算符、
If/For/While控制流与常见语言类似,赋值用=。
下一步
语法过关后,认识策略最常用的行情数据与交易函数: 行情与交易函数。