保持敬畏之心
交易是一场持久战

Pine Script(6):求模运算符(%)

#Pine Script入门教学

我们前面聊过,在PineScript里,两个整数相除,比如10 / 3,结果是3,小数部分会被直接砍掉。但如果我想要的恰恰是那个被砍掉的“余数”呢?

这时候,就轮到一个特殊的算术运算符登场了:求模运算符%

你也可以叫它求余运算符,它的作用就是返回两个数相除后的整数余数。比如,5 % 3的结果是2(因为5除以3商1余2),而25 % 3的结果是1(因为25除以3商8余1)。

这个求余数的功能有什么用呢?它在交易脚本里最核心的用途,就是帮你实现“每隔N个周期执行某个操作”的逻辑。比如,你想每隔一周(5根日线)的周五才画一个标记,或者每隔20根K线才计算一次某个复杂的值以节省资源。虽然PineScript没有其他语言里常见的循环功能,这在一定程度上限制了%的发挥,但在处理与周期性相关的任务时,它依然是你的不二之选。

案例一:理解求模运算的原理

为了直观地理解求模运算符的工作方式,我们来看一个简单的例子。我们来画出每根K线的编号(bar_index)对6求余数的结果。

//@version=6
indicator(title="求模运算符 - 案例1")

// bar_index是内置变量,代表当前K线的编号(从0开始)
plot(bar_index % 6)

将此脚本添加到图表后,效果如下:

这个脚本画出的图形是一条在0到5之间不断循环的锯齿波。它的计算原理是这样的:

K线索引 表达式 结果
0 0 % 6 0
1 1 % 6 1
2 2 % 6 2
5 5 % 6 5
6 6 % 6 0
11 11 % 6 5
12 12 % 6 0
18 18 % 6 0

从这个规律我们可以发现,只有当K线索引号能被6整除时,求模的结果才为0。这个特性,正是我们实现每隔N根K线操作的关键。

案例二:高亮显示每第N根K线

基于上面的发现,我们可以很方便地在图表上高亮显示每第7根K线。

//@version=6
indicator(title="求模运算符 - 案例2", overlay=true)

// 利用条件来决定颜色
highlightColour = bar_index % 7 == 0 ? color.yellow : na

// 将颜色应用到K线和背景上
barcolor(highlightColour)
bgcolor(color.new(highlightColour, 70))

代码的核心就是bar_index % 7 == 0这个判断条件。它只有在bar_index是0, 7, 14, 21…这些7的倍数时,结果才为true。我们利用这个truefalse的结果,通过一个三元运算符来给highlightColour变量赋值。当条件成立时,颜色为黄色;不成立时,则为nana在颜色设置中代表“不应用任何颜色”,所以其他K线会保持原样。

最后,通过barcolor()bgcolor()函数将这个颜色应用到K线和背景上,就实现了周期性的高亮效果。将此指标添加到图表后,效果如下:

案例三:利用求模判断奇偶数

求模运算符还有一个非常方便的用法:判断奇偶数。任何偶数对2求余的结果都是0,任何奇数对2求余的结果都是1。利用这个特性,我们可以轻松地区分奇数和偶数周期的K线。

//@version=6
indicator(title="求模运算符 - 案例3", overlay=true)

// 1. 判断K线编号是奇数还是偶数
evenBar = bar_index % 2 == 0 ? 1 : -1

// 根据数值的正负来绘制不同方向的箭头
plotarrow(evenBar, colorup=color.blue, colordown=color.yellow,
     maxheight=15)

在这个例子里,我们判断bar_index对2求余的结果。如果为0(偶数),就给evenBar变量赋值为1;如果不为0(奇数),就赋值为-1

然后,我们把这个只包含1-1evenBar变量传给plotarrow()函数。这个函数非常巧妙,它会根据传入数值的正负来决定箭头的方向。于是,我们就在偶数K线上画出了向上的箭头,在奇数K线上画出了向下的箭头。

将此指标添加到图表后,效果如下:

总结

求模运算符%的主要功能是返回整数除法的余数,这个值在使用除法运算符/时通常会被舍弃。它在交易脚本中最典型的用途,就是通过bar_index % N == 0这个判断,轻松实现“每隔N根K线”的周期性操作。另一个常见用途是判断奇偶数:当一个数字对2求模(number % 2)的结果为0时,表明这个数字是偶数。

赞(0)
未经允许不得转载:图道交易 » Pine Script(6):求模运算符(%)
分享到

评论 抢沙发

登录

找回密码

注册