条件とマーカー
比較で色を選び、条件に合うローソク足だけに印を付けます。
今度は、陽線と陰線を区別するプログラムを作ります。始値と終値を比較し、その結果を色とマーカーで表示します。
真と偽
close > openの結果は、終値が始値より高ければTrue、そうでなければFalseです。これは論理値で、型はboolです。
比較しても価格は変わりません。問いに対する答えが得られるだけです。
| 記号 | 意味 | 例 |
|---|---|---|
> | より大きい | close > open |
< | より小さい | close < open |
>= | 以上 | close >= open |
<= | 以下 | close <= open |
== | 等しい | close == open |
!= | 等しくない | close != open |
=は変数への代入、==は2つの値の比較です。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を実行します。
各分岐の先頭行はコロンで終わります。内部は、さらに4個のスペースで字下げします。main()内なら、ifの行は4個、内部の代入は8個のスペースで始まります。
プログラム全体
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)デモデータで実行してください。終値の線の色が足ごとに変わり、陽線の下に緑の三角が現れます。

plotshapeの最初の引数は、いつマーカーを表示するかを指定します。styleは形、locationはローソク足に対する位置です。ここで印が付くのは、単に終値が始値より高かった足です。マーカーが買い注文を意味するわけではありません。
パラメーターは暗記しなくてかまいません。コードのplotshapeにポインターを置き、ヘルプを確認してください。コードを書くときのヘルプで、定義へ移動する方法とともに説明しています。
計算する場所が重要
plotとplotshapeはすべての足で実行します。変えるのは、描画する値、色、条件です。これにより、すべての足について表示結果が得られます。
移動平均でも、次の順番が適切です。
average = ta.sma(close, 20)
above_average = close > average先にすべての足で平均を計算し、その後の条件で使います。ta.smaをif bullish:の中に置くと、陽線でしか実行されないため、入れないでください。
SMAが初期の欠損値である間は、close > averageは真のシグナルを返しません。欠損に対して別の処理をしたいときは、na(average)を使います。average == naは正しい欠損判定ではありません。
複数の条件を組み合わせる
andは両方が真のときに真です。orは少なくとも片方が真なら真です。notは論理値を反転します。
strong_bullish = close > open and close > close[1]陽線であることと、終値が前の終値より高いことを、同時に求めています。陽線でも前の足の終値より低く引ける場合があるため、別々の条件です。
andとorは短絡評価を行います。最初の部分で結果が決まれば、2つ目は評価しません。andでは最初が偽、orでは最初が真のときです。そのため、状態を使う計算は別の行で実行し、その結果の論理値を組み合わせてください。
式で2つの値を選ぶ
2つの値の選択は、1つの式でも書けます。
line_color = color.green if bullish else color.redbullishが真なら緑、そうでなければ赤です。始値と終値が同じ場合も赤になります。その場合を灰色にしたければ、3つに分岐する元の書き方を使います。
自分で試す
陰線の上に、下向きの赤い三角を描いてください。緑の印は残します。その後、両方の条件に前の終値との比較も加えて、条件を厳しくします。
解答
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を、この2つの呼び出しに置き換えます。色の選択は引き続き同じ足の始値と終値だけを見ます。マーカーには、前の終値との比較も使います。
印が付かなかった足を探す
厳しい条件にした版で、緑の印がない陽線を探してください。その始値と前の終値を確認し、andのどちらの条件を満たさなかったか説明してください。