見出し画像

Pine Script™ (v6) の覚書 - コラム : plot系列の上限について –input.color()は罠?!- (1)

plotでグラフを表示していくと、plot系列の上限(64系列)を超えるというエラーに困らされることがあります。

!ランタイムエラー
Maximum number of output series (64) was reached. Script contains 65.

でも、スクリプトを見返しても64個もplot系の関数を使っていなくて、
あれ?どうして?そんなにplotしてないのに?
ってなったことはありませんか?

plot系の関数には以下のものがあります。

plot系の関数

系列が1のもの:

plot(series, title, color, linewidth, style, trackprice, histbase, offset, join, editable, show_last, display, format, precision, force_overlay) → plot

https://jp.tradingview.com/pine-script-reference/v6/#fun_plot

plotchar(series, title, char, location, color, offset, text, textcolor, editable, size, show_last, display, format, precision, force_overlay) → void

https://jp.tradingview.com/pine-script-reference/v6/#fun_plotchar

plotarrow(series, title, colorup, colordown, offset, minheight, maxheight, editable, show_last, display, format, precision, force_overlay) → void

https://jp.tradingview.com/pine-script-reference/v6/#fun_plotarrow

plotshape(series, title, style, location, color, offset, text, textcolor, editable, size, show_last, display, format, precision, force_overlay) → void

https://jp.tradingview.com/pine-script-reference/v6/#fun_plotshape

系列が4のもの:

plotbar(open, high, low, close, title, color, editable, show_last, display, format, precision, force_overlay) → void

https://jp.tradingview.com/pine-script-reference/v6/#fun_plotbar

plotcandle(open, high, low, close, title, color, wickcolor, editable, show_last, bordercolor, display, format, precision, force_overlay) → void

https://jp.tradingview.com/pine-script-reference/v6/#fun_plotcandle

系列が0のもの:

fill(plot1, plot2, color, title, editable, show_last, fillgaps, display) → void
(単色のfill)

https://jp.tradingview.com/pine-script-reference/v6/#fun_fill-1

fill(plot1, plot2, top_value, bottom_value, top_color, bottom_color, title, display, fillgaps, editable) → void
(グラデーションのfill)

https://jp.tradingview.com/pine-script-reference/v6/#fun_fill-2

通常は、この系列数を数えていって、64を超えなければ問題にはなりませんが、実は数え方はこの限りではないことに注意が必要です。

系列数の増加

plot系の関数では、色をconst colorで指定しないと、系列数が増えてしまいます。

plot(close)//←1系列

plot(close,color=color.red)//←1系列

c=color.red // 初期化はセーフ
plot(close,color=color.red)//←1系列

c1=input.color(color.red,'color') // 後から変更できるように書いたら、
plot(close,color=c1)//←変数を代入すると、1系列→2系列となる。代入はアウト

const color を言い換えると、コンパイル時に値が確定できる(定数)もので、これをあとから変更できるように書いたら系列数が増えるという仕様となっています。

変数の宣言においては、通常、コンパイラーは変数への代入値に基づいて自動的に修飾された型を推測することができ、必要に応じて変数の修飾子をより強力なものへと自動的に変更することができます。型修飾子のヒエラルキーは、"const" < "input" < "simple" < "series" であり、"const" はこの中で最も弱いものになっています。

https://jp.tradingview.com/pine-script-reference/v6/#type_const より

例えば、移動平均線が右肩上がりかどうかで色を分ける以下のようなスクリプトでも2系列分消費しますが、これは2色の線を引いているのでギリギリ納得感があります。

要は設定や条件で色変えようとすると、input.color()でさえ、plot系列が増えてしまうのです。

sma20=ta.sma(close,20)
plot(sma20,color=sma20[1]<sma20?color.green:color.red)//←条件を入れると、2系列使っていることになる

続く


いいなと思ったら応援しよう!

rca
よろしければ応援お願いします!