TradingView
ZH
商品代码
搜索
登录
开始免费试用
观点
市场
脚本
筛选器
经纪商
图表
更多
搜索
运算子
!=
%
*
+
-
/
<
<=
==
>
>=
?:
[]
and
for
if
not
or
var
内置变量
内置函数
版本
v3 v4
Pine脚本语言参考手册
运算子
!=
不等于。适用于任何类型的表达式。
expr1 != expr2
返回值
布尔值,或一系列布尔值。
%
模数(整数余数)。 适用于数值表达式。
expr1 % expr2
返回值
整数或浮点值,或一系列值
备注
在Pine脚本中,当计算整数的余数时,商将被截断。 即,将其四舍五入到最小绝对值。 所得值将具有与股息
示例:-1 % 9 = -1 - 9 * truncate(-1/9) = -1 - 9 * truncate(-0.111) = -1 - 9 * 0 = -1。
*
乘法。适用于数值表达式。
expr1 * expr2
返回值
整数或浮点值,或一系列值
+
添加或一元正号。适用于数值表达式或字符串。
expr1 + expr2
+ expr
返回值
字符串的二进制`+`返回expr1和expr2的合并
数字返回整数或浮点值,或一系列值:
二进制'+'返回expr1加expr2。
一元“+”返回expr(对一元运算符对称不添加任何内容)。
备注
您可以使用带数字的算术运算符以及变量数列。 在使用数列的情况下,操作符应用于元素。
-
减法或一元负号。 适用于数值表达式。
expr1 - expr2
- expr
返回值
返回整数或浮点值,或一系列值:
二进制'+'返回expr1减expr2。
一元的`-`返回expr的否定式。
备注
您可以使用带数字的算术运算符以及变量数列。 在使用数列的情况下,操作符应用于元素。
/
除法。适用于数值表达式。
expr1 / expr2
返回值
整数或浮点值,或一系列值
<
小于。适用于数值表达式。
expr1 < expr2
返回值
布尔值,或一系列布尔值。
<=
小于或等于。适用于数值表达式。
expr1 <= expr2
返回值
布尔值,或一系列布尔值。
==
等于。 适用于任何类型的表达。
expr1 == expr2
返回值
布尔值,或一系列布尔值。
>
大于。适用于数值表达式。
expr1 > expr2
返回值
布尔值,或一系列布尔值。
>=
大于或等于。适用于数值表达式。
expr1 >= expr2
返回值
布尔值,或一系列布尔值。
?:
三元条件运算符。
expr1 ? expr2 : expr3
例子
// Draw circles at the bars where open crosses close
s2 = cross(open, close) ? avg(open,close) : na
plot(s2, style=plot.style_circles, linewidth=2, color=color.red)
// Combination of ?: operators for 'switch'-like logic
c = timeframe.isintraday ? color.red : timeframe.isdaily ? color.green : timeframe.isweekly ? c
plot(hl2, color=c)
返回值
如果expr1被评估为true,则expr2,否则为expr3。 零值(0和NaN,+ Infinity,-Infinity)被视为false,其他值
备注
如果您不需要,请使用na作为“else”分支。
您可以结合使用两个或多个?:运算符,以实现类似于“switch”的语句(请参见上面的示例)。
您可以使用带数字的算术运算符以及变量数列。 在使用数列的情况下,操作符应用于元素。
另见
iff
na
[]
系列下标。 提供对expr1系列的以前值的访问。 expr2是过去k线的数目,必须是数值。 浮动将被向下舍入。
expr1[expr2]
例子
// [] can be used to "save" variable value between bars
a = 0.0 // declare `a`
a := a[1] // immediately set current value to the same as previous. `na` in the beginning of hi
if high == low // if some condition - change `a` value to another
a := low
返回值
一系列数值
另见
floor
and
逻辑 AND。适用于布尔表达式。
expr1 and expr2
返回值
布尔值,或一系列布尔值。
for
For语句允许重复执行一些指令。
要访问和使用for语句,应在第一行代码中设定Pine Script语言的版本> = 2,例如://@version=4
var_declarationX = for counter = from_num to to_num [by step_num]
var_decl0
var_decl1
…
continue
…
break
…
var_declN
return_expression
哪里:
counter - 一个变量循环计数器。
from_num - 计数器的起始值
to_num - 计数器的结束值。 当计数器大于to_num(或者在from_num> to_num的情况下小于to_num)时,
step_num - 循环步骤。 在循环步骤= 1的情况下可以省略。 如果from_num大于to_num循环步骤将自动改变
var_decl0 , ... var_declN , return_expression - 循环体。它必须移动4个空格或1个标签。
return_expression - 返回值。 循环完成或中断时,返回值将赋予var_declarationX。
continue - 一个关键词。只能在循环中使用。 它将循环切换到下一次迭代。
break - 一个关键字。只能在循环中使用。它打破了循环。
例子
//@version=4
study("My sma")
my_sma(price, length) =>
sum = price
for i = 1 to length-1
sum := sum + price[i]
sum / length
plot(my_sma(close,14))
备注
变量'sum'是一个可变变量,运算符可以给它一个新值:=循环体。 另请注意,我们建议对移动平均线使用内置
另见
sum
if
If语句定义了在满足表达式条件时必须执行的语句块。
要访问和使用if语句,应该在第一行代码中指定Pine脚本语言的版本> = 2,例如://@version=4
第4版的Pine脚本语言允许您使用“else if”语法。
通用编码来自:
var_declarationX = if condition
var_decl_then0
var_decl_then1
…
var_decl_thenN
else if [optional block]
var_decl_else0
var_decl_else1
…
var_decl_elseN
else
var_decl_else0
var_decl_else1
…
var_decl_elseN
return_expression_else
在哪
var_declarationX - 此变量获取if语句的值
条件 — 如果条件为true,则使用block ‘then’中的逻辑(var_decl_then0, var_decl_then1, 等)。
如果条件为false,则使用block 'else'中的逻辑(var_decl_else0, var_decl_else1, 等)。
return_expression_then , return_expression_else - 模块中的最后一个表达式或者来自块else的表达式将
将是结果值。
if语句的返回值的类型取决于return_expression_then和return_expression_else类型(它们的类型必须匹配:
能返回一个整数值)。
例子
// This code compiles
x = if close > open
close
else
open
// This code doesn’t compile
else
x = if close > open
close
else
"open"
可以省略else block。在这种情况下,如果条件为false,则将为var_declarationX变量分配一个“empty”值(na
例子
x = if close > open
close
// If current close > current open, then x = close.
// Otherwise the x = na.
可以使用多个“else if” blocks或什么都不使用:
例子
x = if open > close
5
else if high > low
close
else
open
Block “then”,“else if”和“else”缩进了4个空格。如果语句可以包含彼此,则每个句子加4个空格:
例子
x = if close > open
b = if close > close[1]
close
else
close[1]
b
else
open
可以忽略if语句的结果值(“var_declarationX =”可以省略)。 如果您需要表达式的副作用,例如在策略交易
例子
if (crossover(source, lower))
strategy.entry("BBandLE", strategy.long, stop=lower,
oca_name="BollingerBands",
oca_type=strategy.oca.cancel, comment="BBandLE")
else
strategy.cancel(id="BBandLE")
not
逻辑求反(NOT)。 适用于布尔表达式。
not expr1
返回值
布尔值,或一系列布尔值。
or
逻辑 OR。适用于布尔表达式。
expr1 or expr2
返回值
布尔值,或一系列布尔值。
var
var 是用于分配和一次性初始化变量的关键字。
通常,不包含关键字var的变量赋值语法会导致每次更新数据时都会覆盖变量的值。 与此相反,当使用关键字
态”,只有在满足if-expressions中的条件时才更改它。
从版本4开始提供。
var variable_name = expression
哪里:
variable_name - Pine Script中允许的用户变量的任何名称(可以包含大写和小写的拉丁字符,数字和下划线
expression - 任何算术表达式,就像定义常规变量一样。 将计算表达式并将其分配给变量一次。
例子
//@version=4
study("Var keyword example")
var a = close
var b = 0.0
var c = 0.0
var green_bars_count = 0
if close > open
plot(a)
plot(b)
plot(c)
var y = close
c := y
var x = close
b := x
green_bars_count := green_bars_count + 1
if green_bars_count >= 10
变量 'a' 保持系列中每个柱线的第一根柱线的收盘价。
变量'b'保持系列中第一个“绿色”价格棒的收盘价。
变量'c'保持系列中第十个“绿色”条的收盘价。
内置变量
accdist
累积/分布指数
类型
series[float]
adjustment.dividends
常数股息调整(应用股息调整)。
类型
const string
另见
adjustment.none
adjustment.splits
tickerid
adjustment.none
无调整类型的常量(不应用调整)。
类型
const string
另见
adjustment.splits
adjustment.dividends
tickerid
adjustment.splits
分割调整类型的常量(应用分割调整)。
类型
const string
另见
adjustment.none
adjustment.dividends
tickerid
bar_index
目前的价格棒指数。 编号从零开始,第一个条的索引为0。
类型
series[integer]
例子
plot(bar_index)
plot(bar_index > 5000 ? close : 0)
备注
请注意, bar_index 已替换版本4中的 n 变量。
请注意,K线索引从第一根历史K线起算为0。
请注意,使用此变量/函数可能会导致指标重新绘制。
barmerge.gaps_off
合并所请求数据的策略。 数据不间断地合并,所有的差距都以先前最近的现有值填满。
类型
const bool
另见
security
barmerge.gaps_on
barmerge.gaps_on
给所请求的数据合并策略。 数据与可能的差距(na值)合并。
类型
const bool
另见
security
barmerge.gaps_off
barmerge.lookahead_off
合并所请求数据位置的策略。 所请求的条形图与当前的条形图按照k线收盘时间合并。 这种合并策略禁止从
类型