我们的任何交易策略,其本质都是一系列“如果…那么…”的判断。比如“如果收盘价站上了均线”,或者“如果RSI低于30”。要让程序替我们完成这些判断,就需要给它一双眼睛:比较运算符。它们专门负责比较两个值的大小或关系,然后告诉我们一个明确的结果:true
(是)或者false
(否)。这个true
或false
的布尔值,就是我们所有交易逻辑的起点。
PineScript里一共有六种比较运算符,它们的用法非常直观:
现在,我们通过两个实战案例,看看怎么把这些“眼睛”用在我们的策略里。
案例一:判断“放量下跌”的新低信号
这个例子里,我们的目标是找到一个创下20周期新低的K线,但我们不希望捕捉所有的“新低”,我们还想增加一个过滤条件:这次创下新低,必须是伴随着市场波幅放大的,这样的信号可能更有效。
//@version=6
indicator(title="比较运算符 - 案例1", overlay=true)
// 条件一:判断当前最低价 < 过去20根K线的最低价
plotCircle = low < ta.lowest(low, 20)[1]
// 条件二:判断当前波幅 >= 过去30根K线的平均波幅
circleColour = ta.tr >= ta.sma(ta.tr, 30)[1] ? color.red : color.fuchsia
// 最终绘图
plotshape(plotCircle, style=shape.circle,
location=location.belowbar, color=circleColour)
这段代码的逻辑很清晰:我们用<
和>=
两个比较运算符,分别建立了两个判断条件,一个判断价格,一个判断波幅。只有当第一个条件满足时,我们才去绘制图形,而图形的颜色则由第二个条件来决定。
将此示例指标添加到图表后,效果如下:
案例二:判断“连续三根K线收低”的下跌趋势
下面的例子会让你看到一个非常重要的编程思想:如何把一个简单的条件,组合成一个更复杂的、描述“状态”的条件。我们的目标是,找出“连续三根K线收盘价依次降低”的区域,这通常意味着一段下跌趋势的形成或延续。
//@version=6
indicator(title="比较运算符 - 案例2", overlay=true)
// 步骤一:当前收盘价 < 上一根收盘价
closedLower = close < close[1]
// 步骤二:判断连续三根K线收低
// 用and连接,要求三者(当前、上一根、上上根)同时为true
backgroundColour = closedLower and closedLower[1] and closedLower[2] ?
color.new(color.red, 70) :
na
// 步骤三:满足条件的高亮出来
bgcolor(backgroundColour)
这个例子里,我们首先用<
定义了一个最简单的原子条件closedLower
。因为它是一个序列值,我们可以用历史引用运算符[]
来获取它过去的值。然后,我们用逻辑运算符and
,把“现在”、“昨天”和“前天”的状态连接起来,构建了一个描述“连续状态”的复杂条件。
将此指标添加到图表后,效果如下:
总结
总结一下,比较运算符是你策略的“感官”,它们负责感知市场的状态(高了还是低了?等于还是不等于?)。它们本身只返回true
或false
。
但当它们和我们后面要讲的逻辑运算符and
, or
, not
以及条件运算符?:
结合起来时,就能构建出任何你想要的复杂交易逻辑。它们是所有策略判断的基础。