为圆圈和十字等非典型绘图之间的背景着色
在TradingView中,我们可以为背景的某个区域着色,并利用该功能高亮显示支撑和阻力区。我们还通过一种变通方法,实现了为曲线和水平线之间的背景着色。但我们该如何填充非典型绘图(例如圆圈和十字)之间的背景区域呢?
在TradingView中填充圆圈和十字之间的背景
TradingView指标或策略的颜色既可以手动配置,也可以在代码中直接定义,后者允许我们实现像有条件地使用颜色等更灵活的功能。当我们通过代码使用颜色时,可以从标准的TradingView基础颜色以及能提供无数种颜色的十六进制颜色值中进行选择。
有几个TradingView函数可以通过 color 参数来使用这两种颜色变体。fill() 就是其中之一,它可以为图表上两条曲线或两条水平线之间的背景区域着色。
为了知道该为图表的哪个部分着色,fill() 要么需要两个水平线对象(由 hline() 函数返回),要么需要两个绘图对象(由 plot() 函数返回)。这些对象代表了一个已创建的绘图或水平线的实例,这与一个数值变量代表一个特定的数字是类似的。
fill() 通常用于填充两条线之间的背景。但 fill() 函数实际上可以为任何由 plot() 创建的绘图之间的区域着色,而 plot() 函数可以创建直方图、十字、面积图、柱状图、圆圈或默认的线图。在下方的示例中,我们将使用 fill() 函数为由圆圈(显示为实心点)和十字(显示为+号)组成的绘图之间的背景着色。
在TradingView中为圆圈和十字之间的背景着色
在下方的示例中,我们使用 fill() 函数为由圆圈和十字组成的绘图之间的背景着色。我们的示例指标绘制了一对EMA(指数移动平均线),并在这些线的上方和下方,基于两条均线之间的差值创建了额外的绘图。在文章的后面,我们会看看这个指标的样子,但首先来讨论脚本的代码:
//@version=5
indicator(title="Circles & crosses fill", overlay=true)
// 计算数值
quickEMA = ta.ema(close, input.int(30, title="Quick EMA"))
slowEMA = ta.ema(close, input.int(60, title="Slow EMA"))
emaDiff = quickEMA - slowEMA
// 绘制并填充EMA
ema1 = plot(quickEMA, color=color.black)
ema2 = plot(slowEMA, color=color.black)
fill(plot1=ema1, plot2=ema2, color=color.new(color.gray, 80))
// 绘制并填充圆圈
circ1 = plot(quickEMA - 2 * emaDiff, style=plot.style_circles, color=color.red, linewidth=2)
circ2 = plot(quickEMA - 3 * emaDiff, style=plot.style_circles, color=color.red, linewidth=2)
fill(plot1=ema2, plot2=circ1, color=color.new(color.maroon, 90))
fill(plot1=circ1, plot2=circ2, color=color.new(color.maroon, 90))
// 绘制并填充十字
cross1 = plot(quickEMA + 2 * emaDiff, style=plot.style_cross, color=color.green, linewidth=2)
cross2 = plot(quickEMA + 3 * emaDiff, style=plot.style_cross, color=color.green, linewidth=2)
fill(plot1=ema1, plot2=cross1, color=color.new(#228B22, 90))
fill(plot1=cross1, plot2=cross2, color=color.new(#228B22, 90))
我们首先包含必需的 indicator() 函数。然后,我们计算两条EMA并计算它们之间的差值:
// 计算数值
quickEMA = ta.ema(close, input.int(30, title="Quick EMA"))
slowEMA = ta.ema(close, input.int(60, title="Slow EMA"))
emaDiff = quickEMA - slowEMA
EMA的值由 ta.ema() 函数返回,该函数需要一个值的序列和一个指定移动平均线周期的整数。这里,两个 ta.ema() 语句都设为 close,使其基于脚本所应用的交易品种的收盘价进行计算。
我们这里的两个 ta.ema() 函数的第二个参数都被设为了 input.int() 函数。这看起来可能有点奇怪,但是,这个函数不仅会创建一个手动的整数输入选项,同时也会返回该设置的当前值。通常我们会将该返回值赋给一个变量,然后在需要使用输入选项的当前值时使用该变量。但这里我们跳过了变量这一中间步骤,直接在需要使用输入值的地方(即 ta.ema() 函数内部)使用了 input.int() 函数。
我们将第一个输入命名为“Quick EMA”,第二个在脚本的选项窗口中则被称为“Slow EMA”。这些输入的默认值被设为30和60。
ta.ema() 计算出的EMA值被赋给了 quickEMA 和 slowEMA 变量。然后我们计算这两个变量的差值,并将结果存储在 emaDiff 变量中。之后,我们在图表上绘制EMA并填充它们之间的背景:
// 绘制并填充EMA
ema1 = plot(quickEMA, color=color.black)
ema2 = plot(slowEMA, color=color.black)
fill(plot1=ema1, plot2=ema2, color=color.new(color.gray, 80))
EMA的值通过 plot() 显示,该函数会在图表上绘制其第一个参数所指定的任何数据。
在第一个 plot() 函数调用中,我们将参数设为 quickEMA 变量。这个绘图的样式是默认的线图,颜色为黑色。之后,我们将 plot() 返回的绘图对象赋给 ema1 变量。第二个 plot() 语句与之类似,只是这次我们绘制 slowEMA 的值,并将其绘图对象存入 ema2 变量。
然后,我们使用 fill() 为第一条和第二条EMA之间的背景区域着色。plot1 和 plot2 参数被分别设为 ema1 和 ema2 绘图对象。我们使用 color.new() 函数将这个填充区域的颜色设为80%透明度的灰色。
接着,我们在图表上绘制圆圈并填充它们之间的背景:
// 绘制并填充圆圈
circ1 = plot(quickEMA - 2 * emaDiff, style=plot.style_circles, color=color.red, linewidth=2)
circ2 = plot(quickEMA - 3 * emaDiff, style=plot.style_circles, color=color.red, linewidth=2)
fill(plot1=ema2, plot2=circ1, color=color.new(color.maroon, 90))
fill(plot1=circ1, plot2=circ2, color=color.new(color.maroon, 90))
我们通过将 plot() 函数的 style 参数设为 plot.style_circles 来将数据绘制成圆圈(显示为实心点)。
第一个 plot() 语句绘制 quickEMA 值减去EMA差值的2倍,而第二个 plot() 语句显示 quickEMA 值减去EMA差值的3倍。两个绘图都以红色显示圆圈,大小(linewidth)为2。我们将返回的绘图对象存储在 circ1 和 circ2 变量中。
然后,我们为这些圆圈周围的背景着色。在第一个 fill() 函数调用中,我们将 plot1 和 plot2 参数设为 ema2 线图和 circ1 圆圈图,这会填充慢线EMA和快线EMA减去2倍差值之间的背景区域。在第二个 fill() 调用中,我们为 circ1 和 circ2 圆圈图之间的背景着色。两个 fill() 函数都使用90%透明度的褐红色。
脚本最后通过绘制十字并填充其周围的背景来结束:
// 绘制并填充十字
cross1 = plot(quickEMA + 2 * emaDiff, style=plot.style_cross, color=color.green, linewidth=2)
cross2 = plot(quickEMA + 3 * emaDiff, style=plot.style_cross, color=color.green, linewidth=2)
fill(plot1=ema1, plot2=cross1, color=color.new(#228B22, 90))
fill(plot1=cross1, plot2=cross2, color=color.new(#228B22, 90))
我们在这里通过 plot() 显示两个数据序列:第一个是 quickEMA 值加上2倍的EMA差值,第二个则是快线EMA加上3倍的EMA差值。
两个 plot() 函数都以一系列十字(style=plot.style_cross)和绿色来显示。我们将它们的绘图对象赋给 cross1 和 cross2 变量。
绘制完十字后,我们使用 fill() 来填充它们周围的背景区域。在第一个 fill() 语句中,我们为 ema1 线和 cross1 十字图之间的背景着色。
下一个 fill() 函数调用的 plot1 和 plot2 参数被设为 cross1 和 cross2,用以为这两条十字图之间的区域着色。
这两个 fill() 语句的 color 参数都设为 #228B22(森林绿的十六进制颜色值),并通过 color.new() 函数为其设置90%的透明度。
在TradingView中为十字和圆圈之间的背景着色
上述示例指标添加到英镑/美元图表上时,效果如下:
在欧元/美元图表上,这些绘图和填充的背景看起来是这样的:
该脚本创建的两个输入选项如下:
举个例子,当我们把“Quick EMA”设为20,“Slow EMA”设为90后,前一张欧元/美元图表就变成了:
总结
fill() 函数可以为图表背景的某个区域着色。为此,它需要填充两条曲线对象(由 plot() 函数返回)之间,或两条水平线对象(由 hline() 函数返回)之间的区域。
plot() 函数可以用不同的样式在图表上显示一个数据序列,例如默认的线图、用于小圆点的 plot.style_circles 或用于小十字的 plot.style_cross。
fill() 函数可以为任何由 plot() 创建的两条曲线之间的背景着色,无论我们使用哪种绘图样式。
为直方图和柱状图之间的背景着色
在TradingView中,我们可以为背景的某个区域着色,并利用该功能高亮显示支撑和阻力区。我们还通过一种变通方法,实现了为曲线和水平线之间的背景着色。但我们该如何填充直方图和柱状图这两种绘图之间的背景区域呢?
为TradingView的部分背景着色
TradingView脚本中使用的颜色既可以手动配置,也可以在代码中直接定义,后者允许我们实现像有条件地使用颜色等更灵活的功能。当我们通过代码使用颜色时,可以从标准的TradingView基础颜色以及能提供无数种颜色的十六进制颜色值中进行选择。
有几个TradingView函数可以通过 color 参数来使用这两种颜色变体。fill() 就是其中之一,它可以为图表上两条曲线或两条水平线之间的背景区域着色。
为了知道该为图表的哪个部分着色,fill() 要么需要两个水平线对象(由 hline() 函数返回),要么需要两个绘图对象(由 plot() 函数返回)。这些对象代表了一个已创建的绘图或水平线的实例,这与一个数值变量代表一个特定的数字是类似的。
fill() 的典型用法是为 plot() 创建的线条之间的背景区域着色。但 plot() 函数也可以创建直方图、十字、面积图、柱状图和圆圈等绘图类型。这意味着我们不仅限于填充线条之间的背景,还可以为圆圈和十字之间的背景着色,或为一个TradingView面积图周围的背景区域填充。在下方的示例中,我们将看看如何将 fill() 函数与直方图和柱状图结合使用。
在TradingView中绘制垂直条:直方图与柱状图
在讨论示例之前,让我们先阐明直方图和柱状图的区别。虽然两者都绘制柱状图,但它们之间的区别在于,柱状图(columns plot)的柱子是紧挨着的,而直方图(histogram)的柱子是分开的。
所以,当我们使用直方图和柱状图来绘制成交量时,图表看起来会是这样的:
现在,让我们讨论 fill() 函数如何能与这些类型的绘图一起使用。
填充TradingView图表上直方图和柱状图周围的区域
下方的示例指标会计算一个交易品种的上涨成交量和下跌成交量。我们将上涨成交量定义为收盘上涨K线的成交量,下跌成交量则是收盘下跌K线的成交量。
这些成交量值通过直方图和柱状图来绘制,我们还使用线条来表示极值和平均值。在讨论完代码之后,我们将看看该指标在图表上的样子。但首先,是代码:
//@version=5
indicator(title="Filling with histogram and columns",
shorttitle="Up/down volume", precision=0)
// 输入选项
highLen = input.int(20, title="Highest length")
lowLen = input.int(20, title="Lowest length")
smaLen = input.int(20, title="SMA length", minval=5, maxval=100)
// 计算数值
upVolume = close > open ? volume : 0
downVolume = close < open ? -volume : 0
highestUp = ta.highest(upVolume, highLen)
lowestDown = ta.lowest(downVolume, lowLen)
// 绘制直方图和柱状图
upHist = plot(upVolume, style=plot.style_histogram, color=color.green, linewidth=3)
downCols = plot(downVolume, style=plot.style_columns, color=color.red)
// 绘制线条
hiVol = plot(highestUp, color=color.green)
lowVol = plot(lowestDown, color=color.red)
avgVol = ta.sma(volume, smaLen)
avgVolPlus = plot(avgVol, color=#1E90FF)
avgVolMin = plot(-avgVol, color=#1E90FF)
// 填充背景区域
fill(plot1=hiVol, plot2=avgVolPlus, color=color.new(color.green, 85))
fill(plot1=avgVolPlus, plot2=upHist, color=color.new(color.lime, 90))
fill(plot1=lowVol, plot2=avgVolMin, color=color.new(color.red, 85))
fill(plot1=avgVolMin, plot2=downCols, color=color.new(#D2691E, 90))
该脚本以 indicator() 开始,这是每个指标都必需的。我们在这里设置了它的三个参数:title 和 shorttitle(用于指定指标名称)以及 precision。后一个参数定义了小数点后显示的位数,像这里使用的0值,会将数千级别的大数值用K来缩写显示。
然后,我们向脚本添加三个输入选项:
// 输入选项
highLen = input.int(20, title="Highest length")
lowLen = input.int(20, title="Lowest length")
smaLen = input.int(20, title="SMA length", minval=5, maxval=100)
我们使用 input.int() 函数来创建这些输入,该函数不仅会在脚本设置中添加一个手动的整数输入项,还会返回该输入的当前值。通过将返回的值赋给一个变量,我们就可以在脚本的后续部分通过该变量来引用输入的当前值。
第一个和第二个输入分别名为“Highest length”和“Lowest length”,默认值都为20。第三个输入名为“SMA length”,它还有 minval 和 maxval 这两个参数,用于设定该输入的允许值范围在5到100之间。
接下来,我们创建一些额外的变量:
// 计算数值
upVolume = close > open ? volume : 0
downVolume = close < open ? -volume : 0
highestUp = ta.highest(upVolume, highLen)
lowestDown = ta.lowest(downVolume, lowLen)
upVolume 和 downVolume 变量的值由条件三元运算符(?:)来赋予。upVolume 变量在K线收盘上涨时(close > open)被赋予该K线的成交量(volume),否则为0。
downVolume 变量的赋值逻辑类似,只是它检查K线是否收盘下跌(close < open),并在条件成立时返回K线成交量的相反数(-volume)。我们这样做,是为了能绘制出一个包含正值上涨成交量直方图和负值下跌成交量柱状图的图表。
然后,我们使用 ta.highest() 和 ta.lowest() 函数来分别获取上涨成交量的最高值和下跌成交量的最低值,以便在图表上绘制它们。
接着,我们创建直方图和柱状图:
// 绘制直方图和柱状图
upHist = plot(upVolume, style=plot.style_histogram, color=color.green, linewidth=3)
downCols = plot(downVolume, style=plot.style_columns, color=color.red)
这些绘图是通过 plot() 创建的。在第一个 plot() 调用中,我们将 style 参数设为 plot.style_histogram,将上涨成交量绘制成直方图。在第二个 plot() 语句中,我们将下跌成交量(downVolume)显示为柱状图(style=plot.style_columns)。返回的绘图对象分别存储在 upHist 和 downCols 变量中。
之后,我们在图表上以线条形式绘制最高值、最低值和平均值:
// 绘制线条
hiVol = plot(highestUp, color=color.green)
lowVol = plot(lowestDown, color=color.red)
avgVol = ta.sma(volume, smaLen)
avgVolPlus = plot(avgVol, color=#1E90FF)
avgVolMin = plot(-avgVol, color=#1E90FF)
我们首先绘制了最高和最低成交量值(highestUp 和 lowestDown)。然后,我们计算成交量的简单移动平均线(SMA)并将其存储在 avgVol 变量中。
该变量随后被用于绘制正值和负值的平均成交量线。这使得均线既能显示在包含正值上涨成交量的图表区域,也能显示在包含负值下跌成交量的柱状图区域周围。返回的绘图对象被存储在 avgVolPlus 和 avgVolMin 变量中,以便我们稍后在 fill() 函数中使用。
在绘制完直方图、柱状图和线图之后,终于到了填充几个背景区域的时候了:
// 填充背景区域
fill(plot1=hiVol, plot2=avgVolPlus, color=color.new(color.green, 85))
fill(plot1=avgVolPlus, plot2=upHist, color=color.new(color.lime, 90))
fill(plot1=lowVol, plot2=avgVolMin, color=color.new(color.red, 85))
fill(plot1=avgVolMin, plot2=downCols, color=color.new(#D2691E, 90))
这里,我们使用 fill() 函数为几个绘图之间的背景着色。为此,我们将每个 fill() 函数的 plot1 和 plot2 参数设为我们之前存储了绘图对象的变量。
例如,在第一个 fill() 语句中,我们为 hiVol(最高上涨成交量线)和 avgVolPlus(平均成交量线)之间的背景着色。在第二个调用中,我们填充 avgVolPlus 线和 upHist 直方图之间的背景。下方的两个 fill() 调用也采用了同样的逻辑来为下跌成交量相关的区域着色。
用直方图和柱状图填充背景
上述示例指标,当添加到S&P 500 CFD图表上时,看起来如下:
添加到原油图表上时,我们的上涨/下跌成交量指标看起来是这样的:
该脚本在指标的设置中创建了以下输入选项:
如果我们更改这些输入,例如将“Highest Length”设为15,“Lowest Length”设为25,并将“SMA Length”设为5,那么前一张英国原油图表会轻微地变为如下:
总结
fill() 函数可以为两条曲线或两条水平线之间的背景区域着色。为此,它要么需要两个绘图对象(由 plot() 函数返回),要么需要两个水平线对象(由 hline() 函数返回)。fill() 可以为任何绘图样式之间的背景着色,包括直方图和柱状图。它们之间的区别在于,直方图的柱子是分开的,而柱状图的柱子是紧挨着的。
填充面积图周围的背景区域
在TradingView中,我们可以为背景的某个区域着色,并利用该功能高亮显示支撑和阻力区。我们还通过一种变通方法,实现了为曲线和水平线之间的背景着色。但我们该如何填充面积图(area plot)旁边的背景区域呢?
为一个TradingView面积图旁的背景区域着色
TradingView指标或策略使用的颜色既可以手动配置,也可以在代码中直接定义,后者允许我们实现像有条件地使用颜色等更灵活的功能。当我们通过代码使用颜色时,可以从标准的TradingView基础颜色以及能提供无数种颜色的十六进制颜色值中进行选择。
有几个TradingView函数可以通过 color 参数来使用这两种颜色变体。fill() 就是其中之一,它可以为图表上两条曲线或两条水平线之间的背景区域着色。
为了知道该为图表的哪个部分着色,fill() 要么需要两个水平线对象(由 hline() 函数返回),要么需要两个绘图对象(由 plot() 函数返回)。这些对象代表了一个已创建的绘图或水平线的实例,这与一个字符串变量代表一段特定的文本是类似的。
plot() 函数可以用不同的绘图样式来显示数据。但无论我们使用哪种绘图类型或如何组合它们,fill() 都可以为它们之间的背景着色。因此,我们可以填充圆圈和十字之间的背景,也可以为直方图和柱状图周围的背景区域着色。另一种绘图选项是面积图,它会绘制一条线,并填充该线与0轴之间的区域。该绘图样式看起来是这样的:
由于面积图的线与0轴之间的背景已经被填充,我们不需要再使用 fill() 函数来做这件事。但我们可以填充该曲线值上方的背景区域。让我们来看一个这样的例子。
填充TradingView面积图上方的背景区域
在下方的示例指标中,我们使用面积图来显示一个经过双重平滑的RSI(相对强弱指数)值,然后创建了两条位于一个随机信号位和超买水平的水平线。在讨论完代码之后,我们将看看该指标及其设置在图表上的显示效果。
//@version=5
indicator(title="Colouring and filling an area",
shorttitle="Area example")
// 输入选项
srcData = input.source(close, title="Data")
rsiLength = input.int(7, title="RSI Length")
smoothLength = input.int(3, title="Smoothing Length", minval=2)
// 计算数值
rsiValue = ta.rsi(srcData, rsiLength)
smoothRSI = ta.sma(ta.sma(rsiValue, smoothLength), smoothLength)
// 绘制数值
areaPlot = plot(smoothRSI, color=color.new(color.blue, 40), style=plot.style_area, title="Area plot")
// 绘制线条
lineOB = plot(80, color=color.blue, title="Overbought line")
lineSignal = plot(60, color=color.blue, title="Signal line")
// 填充背景区域
fill(plot1=lineOB, plot2=lineSignal, color=color.new(color.orange, 40), title="Overbought area")
fill(plot1=lineSignal, plot2=areaPlot, color=color.new(color.yellow, 30), title="Signal area")
我们以必需的 indicator() 函数开始,通过其 title 和 shorttitle 参数来指定指标在TradingView中的名称。
之后,我们向脚本添加三个输入选项:
// 输入选项
srcData = input.source(close, title="Data")
rsiLength = input.int(7, title="RSI Length")
smoothLength = input.int(3, title="Smoothing Length", minval=2)
第一个输入是一个数据源类型的输入,我们通过 input.source() 函数创建。它会生成一个下拉菜单,允许我们从图表上的交易品种中选择不同的价格数据(如最高价、最低价或收盘价)。
另外两个输入是整数输入,通过 input.int() 函数创建。第一个名为“RSI Length”,默认值为7。第二个名为“Smoothing Length”,默认值为3,我们稍后将用它来对RSI值进行双重平滑。
在将每个输入函数的结果赋给一个变量后,我们就可以在后续代码中通过该变量来引用输入的当前设置,这样当手动更改输入设置时,脚本中变量的值也会随之改变。
然后,我们计算稍后要绘制的数值:
// 计算数值
rsiValue = ta.rsi(srcData, rsiLength)
smoothRSI = ta.sma(ta.sma(rsiValue, smoothLength), smoothLength)
RSI是通过 ta.rsi() 计算的,该函数需要一个数据序列和RSI周期作为参数。我们将要计算的数据设为 srcData,即我们默认持有收盘价的输入变量。RSI周期则设为 rsiLength 输入变量。
我们在这里对RSI值进行了双重平滑处理。我们通过两次调用 ta.sma() 函数来实现,该函数使用一个数据序列和周期来计算简单移动平均线(SMA)。最内层的 ta.sma() 函数计算 rsiValue 在 smoothLength 周期内的SMA。第二个 ta.sma() 函数则对第一个的结果再次进行平滑处理。
然后,我们将该变量的值显示为一个面积图:
// 绘制数值
areaPlot = plot(smoothRSI, color=color.new(color.blue, 40), style=plot.style_area, title="Area plot")
plot() 函数会显示由其第一个参数指定的任何数据。这里,我们将其设为我们平滑后的RSI值,并通过将 style 参数设为 plot.style_area,使绘图显示为面积图。绘图的颜色被设为40%透明的蓝色。我们还通过 title 参数为该绘图命名,这有助于在样式窗口中进行手动配置。最后,我们将 plot() 返回的绘图对象存储在 areaPlot 变量中。
接着,我们创建两条水平线:
// 绘制线条
lineOB = plot(80, color=color.blue, title="Overbought line")
lineSignal = plot(60, color=color.blue, title="Signal line")
我们在这里使用 plot() 函数来创建两条线,一条在80,另一条在60。两条线都显示为蓝色。我们将 plot() 返回的绘图对象分别赋给 lineOB 和 lineSignal 变量,以便稍后为它们之间的背景着色。
注意
我们在这里使用 plot() 而非 hline() 函数来绘制水平线。这是因为 fill() 只能填充两条曲线对象之间或两条水平线对象之间的背景。由于平滑后的RSI值已经通过 plot() 绘制,因此水平线也需要通过 plot() 来创建。否则,我们将无法填充RSI曲线与水平线之间的背景。
接下来是为背景的某个区域着色:
fill(plot1=lineOB, plot2=lineSignal, color=color.new(color.orange, 40), title="Overbought area")
fill(plot1=lineSignal, plot2=areaPlot, color=color.new(color.yellow, 30), title="Signal area")
我们在这里两次使用了 fill() 函数,都通过 plot1 和 plot2 参数来指定背景着色区域的边界。
在第一个 fill() 语句中,我们填充 lineOB 和 lineSignal 绘图(即超买线和信号线)之间的背景。这个填充区域被设为40%透明的橙色。
第二个 fill() 函数调用则为水平信号线(plot1=lineSignal)和平滑的RSI面积图(plot2=areaPlot)之间的区域着色。这个图表区域被设为30%透明的黄色。
示例:填充面积图周围的背景
当我们将上述示例指标添加到图表时,它在欧元/美元图表上看起来是这样的:
在S&P 500指数差价合约图表上,平滑后的RSI看起来是这样的:
由于我们使用了 title 参数来为每个绘图和填充的背景命名,通过描述性的名称,在样式窗口中手动更改颜色变得很容易:
我们通过输入函数创建的输入选项如下:
如果我们把“Data”选项设为high,将RSI周期改为10,并应用7个周期的平滑,那么前一张S&P 500图表将变为如下:
总结
fill() 函数可以为图表背景的一部分着色。它通过填充两个绘图对象(由 plot() 函数返回)之间或两条水平线对象(由 hline() 函数返回)之间的区域来实现。fill() 可以为任何绘图样式之间的背景着色,包括面积图。由于 fill() 函数不能填充曲线和水平线之间的区域,我们需要使用 plot() 并为其提供一个固定值来创建一条水平线。然后,fill() 就可以为该曲线和水平绘图之间的背景区域着色了。

















