语言基础
每个 Navi 脚本都以声明语句开头:indicator()、strategy() 或 library()。
脚本结构
navi
indicator("My Indicator");
// 你的代码
plot(close);Navi 使用花括号块 { } 和分号 ; 来终止语句。换行符不影响语法——你可以自由地拆分或合并行。
注释
navi
// 单行注释
let a: float = 10; // 行尾注释Navi 没有多行注释。以 //@ 开头的特殊注释是文档标签://@function、//@param、//@returns、//@type、//@enum、//@field、//@variable、//@description。
语句
每条语句以 ; 结尾。换行符不影响语法——多条语句可以写在同一行,一条语句也可以跨越多行:
navi
let a = 1; let b = 2; let c = a + b; // 同一行多条语句
let result = longVariableName // 跨行书写
+ anotherLongVariable
- someOtherValue;以右花括号 } 结尾的语句(函数、if/for/while 等)不需要加尾部 ;。
基本类型
原始类型
| 类型 | 描述 | 示例 |
|---|---|---|
int | 整数 | 42, -123, +5 |
float | 浮点数 | 3.14, .5, 3., 1e-3 |
bool | 布尔值 | true, false |
string | 文本 | "hello", 'world' |
color | RGBA 颜色 | #FF0000, #FF000080 |
na | 缺失/未定义值 | na |
int 和 float
navi
let a = 42;
let b = -123;
let d = 3.14;
let e = .14; // 前导点
let f = 3.; // 尾随点
let g = 314e-2; // 3.14string
字符串可以使用单引号或双引号,语义完全相同:
navi
let a = "Hello, World!";
let b = 'Hello, World!';
let full = "Hello, " + "World!"; // 用 + 连接字符串支持的转义序列:
| 转义 | 含义 |
|---|---|
\\ | 反斜杠 |
\n | 换行 |
\r | 回车 |
\t | Tab |
\" 或 "" | 双引号(在双引号字符串中) |
\' 或 '' | 单引号(在单引号字符串中) |
color
颜色字面量使用 # 的十六进制表示法:
#RRGGBB— 6 位十六进制,完全不透明#RRGGBBAA— 8 位十六进制,显式 alpha 通道
navi
let red = #FF0000; // 完全不透明的红色
let semiRed = #FF000080; // 半透明红色命名颜色常量:color.RED、color.BLUE、color.GREEN 等。使用 color.new() 创建自定义透明度的颜色。
na
na 表示缺失或未定义的值。它与任何类型兼容,但单独使用时需要显式类型注解:
navi
let a: float = na; // OK
let b = na; // 错误:无法推断类型
if na(myValue) {
// 处理缺失值
}运算符
算术运算
navi
let a = 10 + 3; // 13
let b = 10 - 3; // 7
let c = 10 * 3; // 30
let d = 10 / 3; // 3.333...
let e = 10 % 3; // 1比较运算
navi
close > open // 大于
close < open // 小于
close >= 100 // 大于等于
close <= 100 // 小于等于
close == open // 等于
close != open // 不等于逻辑运算
navi
a and b // 逻辑与
a or b // 逻辑或
not a // 逻辑非三元运算
navi
let col = close > open ? color.GREEN : color.RED;
