TradingViewのチャートに、plotやhlineなどの関数を使って複数のグラフやラインを表示させる際、その間の背景を塗りつぶして分かりやすくしたい事があります。以下のようなイメージです。

これを実現するのがfill関数です。本記事ではfill関数の概要とパラメータについて解説します。
fill関数の基本的な仕組み
fill関数の基本的な構文は以下になります。
fill(plot1, plot2, title, color)
plot1とplot2に対象のグラフを設定し、titleで名称を設定、colorでそのグラフ間を塗りつぶす色を指定します。
ここでplot1とplot2はどのように設定するのか?が問題です。普通にplot関数を利用する際は、これまで以下のような書き方をしていたと思います。(例は25日と75日の移動平均線を表示する場合)
plot(ta.sma(close, 25), title="25日移動平均線", color=color.orange)
plot(ta.sma(close, 75), title="75日移動平均線", color=color.green)
これでも全然問題ないのですが、実はplot関数は戻り値として「そのグラフのID」を返してくれます。具体的には以下のように書くことで、plot_short変数に25日移動平均線グラフのIDが、plot_long変数に75日移動平均線グラフのIDが、それぞれ取得されます(変数の名前は何でもOK)
plot_short = plot(ta.sma(close, 25), title="25日移動平均線", color=color.orange)
plot_long = plot(ta.sma(close, 75), title="75日移動平均線", color=color.green)
fill関数では、このグラフIDをパラメータに設定することで機能します。上の2つの移動平均線の間を赤で塗りつぶしたい場合は、以下のように書けばOKです。
//@version=6
indicator("TTO_PineSample_fill", overlay=true)
sma_short = ta.sma(close, 25)
sma_long = ta.sma(close, 75)
plot_ma1 = plot(sma_short, title="短期MA", color=color.orange)
plot_ma2 = plot(sma_long, title="長期MA", color=color.green)
fill(plot_ma1, plot_ma2, title="グラフ間", color=color.new(color.green, 80))

fill関数で使えるパラメータについて
以下、fill関数で利用可能なパラメータです。
color
塗りつぶす背景色を指定します。上ではcolor.redとしましたが、color.new(color.red, 80)などと書くと透過率80%の薄い赤になります。また条件ごとに色の塗り分けも可能です。以下は25日MAが75日MAより上にあれば薄い赤で、下にあれば薄い青で、それぞれ塗りつぶす例です。
//@version=6
indicator("TTO_PineSample_fill", overlay=true)
sma_short = ta.sma(close, 25)
sma_long = ta.sma(close, 75)
plot_ma1 = plot(sma_short, title="短期MA", color=color.orange)
plot_ma2 = plot(sma_long, title="長期MA", color=color.green)
fill(plot_ma1, plot_ma2, title="グラフ間", color=sma_short > sma_long ? color.new(color.red, 80) : color.new(color.blue, 80))

title
インジケーター設定ダイアログなどに表示される名称です。コード内と異なる色を使いたい場合は、後からここで変更することも可能です。名称を付けておくとこのように「スタイル」の中に表示されるので、複数のグラフやfill関数がある場合は見分けやすくなります。

editable
初期値はtrueですが、falseにするとインジケーターのパラメータ画面でスタイル変更ができないように制御できます。
show_last
通常plot関数はチャート上の全ローソク足が対象にグラフ表示されますが、show_lastに数値を設定すると、最終足から設定足数遡った部分だけのグラフになります。
display
初期ではdisplay.all(すべて表示)ですが、display.noneにすると非表示になります。inputパラメータなどで制御する際に利用します。
fillgaps
plotにおいてna(値無し)が発生する場合にどうするか?の設定です。初期値はfalseで、naが発生している部分は塗りつぶしを行いません。trueにすると前の足の塗りつぶしを引き継ぎます。
おわりに
以上、fill関数の仕組みとパラメータについて解説しました。
グラフや水平ラインの間を塗りつぶして見やすいインジケーターを作りたい場合に活用できます。
またline関数の間を塗りつぶしたい場合には、linefill関数という別の関数が必要になりますので、必要な方はこちらもチェックしてみてください。