条件与标记
通过比较选择颜色,只标记满足条件的 K 线。
现在编写一个区分上涨与下跌 K 线的程序。它会检查开盘价和收盘价之间的关系,再用颜色和标记显示结果。
真或假
比较 close > open 在收盘价大于开盘价时得到 True,否则得到 False。这是逻辑值,类型为 bool。
比较不会改变任何价格,只回答一个问题。
| 符号 | 含义 | 示例 |
|---|---|---|
> | 大于 | close > open |
< | 小于 | close < open |
>= | 大于等于 | close >= open |
<= | 小于等于 | close <= open |
== | 等于 | close == open |
!= | 不等于 | close != open |
= 给变量赋值,== 比较两个值。bullish = close > open 将比较结果放入 bullish。
开盘价等于收盘价时,close > open 与 close < open 都不为真。为了完整决策,也要处理这种情况。
if、elif 与 else
if 后面的条件决定是否执行缩进部分:
if bullish:
line_color = color.green
elif bearish:
line_color = color.red
else:
line_color = color.gray先检查 if。若为真,选择绿色,跳过后面分支;否则检查 elif。当前面所有条件都不为真时,执行 else。
每个分支开头的末尾都有冒号,分支内部再缩进四个空格。所以在 main() 中,if 行开头是四个空格,内部赋值行是八个。
完整程序
创建 candle_conditions.py:
"""
@pyne edge
"""
from pynecore.lib import close, color, location, open, plot, plotshape, script, shape
@script.indicator("Candle Conditions", overlay=True)
def main():
bullish = close > open
bearish = close < open
if bullish:
line_color = color.green
elif bearish:
line_color = color.red
else:
line_color = color.gray
plot(close, "Close", color=line_color, linewidth=2)
plotshape(bullish, "Bullish candle", style=shape.triangleup,
location=location.belowbar, color=color.green)用演示数据运行。收盘价线的颜色随 K 线改变,上涨 K 线下方会出现绿色三角形。

plotshape 的第一个实参决定何时显示标记。style 控制形状,location 控制相对 K 线的位置。这里被标记的 K 线只是收盘价高于自己的开盘价,标记并不代表买入指令。
这里同样无须背下参数:将鼠标移到代码中的 plotshape 名称上查看帮助。编写代码时获取帮助提供具体步骤,也介绍了跳转到定义。
计算放在哪里很重要
plot 和 plotshape 在每根 K 线上执行,我们改变的是要显示的数值、颜色或条件。因此,每根 K 线都有对应的显示结果。
平均线也适合采用同样的顺序:
average = ta.sma(close, 20)
above_average = close > average先在每根 K 线上计算平均值,再由条件使用。不要把 ta.sma 放到 if bullish: 分支里,否则只会在上涨 K 线上执行。
SMA 开头缺值时,close > average 不会给出真信号。如需特别处理缺失情况,使用 na(average)。average == na 不是正确的缺失检查。
组合多个条件
and 在两侧都为真时才为真。or 只需至少一侧为真。not 将逻辑值取反。
strong_bullish = close > open and close > close[1]这个条件同时要求两件事:K 线上涨,且收盘价高于上一收盘价。上涨 K 线仍可能收在上一根收盘价之下,因此这是两个不同条件。
and 和 or 采用短路求值:第一部分已经决定结果时,第二部分不会被求值。对于 and,是第一部分为假时;对于 or,是第一部分为真时。因此,带状态的计算应先放在单独一行执行,再组合得到的逻辑值。
简短的值选择
也可以用一个表达式在两个值之间选择:
line_color = color.green if bullish else color.red当 bullish 为真时选择绿色,否则选择红色。开盘价等于收盘价时也会选红色。如果希望这种情况为灰色,就保留完整的三分支判断。
自己试一试
在下跌 K 线上方画红色向下三角形,同时保留绿色标记。然后,为两种标记都加入与上一收盘价比较的限制。
参考答案
bullish_signal = bullish and close > close[1]
bearish_signal = bearish and close < close[1]
plotshape(bullish_signal, "Bullish signal", style=shape.triangleup,
location=location.belowbar, color=color.green)
plotshape(bearish_signal, "Bearish signal", style=shape.triangledown,
location=location.abovebar, color=color.red)用这两个新调用替换原来的绿色 plotshape。颜色选择仍然只比较本根开盘价与收盘价,而标记还比较上一收盘价。
找一根没有被标记的 K 线
在加强条件的版本中,找一根上涨却没有绿色标记的 K 线。检查它自己的开盘价和上一根收盘价,说明 and 的哪一部分没有通过。