保持敬畏之心
交易是一场持久战

Pine Script(193):实战方框,每日与自定义时段高低点

#Pine Script入门教学

用方框捕捉每日最高价和最低价

TradingView的方框绘图可以高亮显示特定的图表区域,这使得图表分析更为便捷。方框可以高亮显示的内容多种多样,其中一种可能性就是捕捉每日的最高价和最低价。那么我们该如何绘制这样的方框呢?

围绕每日高低点绘制方框需要完成以下几件事。首先,在每天开始时,为当天的价格创建一个新的方框。然后,在当天交易时段内,我们需要跟踪当日的最高价和最低价,用当前的日内高低点来更新方框的价格坐标(当新的高点和低点出现时,这会使方框成长),并更新方框的时间坐标,使其在全天随着新的K线而延伸,并在一天结束时完整地捕捉全天的价格范围。此外,为了获得更好的视觉效果,当价格收盘高于前一日收盘价时,我们把方框设为绿色;当价格低于前一日时,则把方框设为红色。

当我们把这些功能编码实现后,会得到一个如下所示的TradingView脚本:

现在,让我们来看看代码是如何实现的!

指标代码

这个TradingView指标使用方框来捕捉每日的高点和低点:

//@version=5
indicator(title="每日高/低点方框", overlay=true)

// 输入选项
boxBorderSize = input.int(2, title="Box border size", minval=0)

upBoxColor      = input.color(color.new(color.green, 85), title="Up box colour")
upBorderColor   = input.color(color.green, title="Up border colour")
downBoxColor    = input.color(color.new(color.red, 85), title="Down box colour")
downBorderColor = input.color(color.red, title="Down border colour")

joinBoxes = input.bool(false, title="Join boxes")

// 创建变量
var dayHighPrice = 0.0
var dayLowPrice  = 0.0
var prevDayClose = 0.0
var box dailyBox = na

// 判断在日内时间周期上是否开始了新的一天
newDayStart = dayofmonth != dayofmonth[1] and 
     timeframe.isintraday

// 如果新的一天开始,将高点和低点设置为该K线的数据。否则,
// 在当天持续跟踪最高高点和最低低点。
if newDayStart
    dayHighPrice := high
    dayLowPrice  := low
    prevDayClose := close[1]
else
    dayHighPrice := math.max(dayHighPrice, high)
    dayLowPrice  := math.min(dayLowpPrice, low)

// 当新的一天开始时,为该日创建一个新方框。
// 否则,在当天内,更新当日的方框。
if newDayStart
    dailyBox := box.new(left=bar_index, top=dayHighPrice,
         right=bar_index + 1, bottom=dayLowPrice,
         border_width=boxBorderSize)

    // 如果我们不希望方框相连,那么前一个方框的结束位置
    // 不应与新方框的起始位置在同一根K线上。
    if not joinBoxes
        box.set_right(dailyBox[1], bar_index[1])
else
    box.set_top(dailyBox, dayHighPrice)
    box.set_rightbottom(dailyBox, right=bar_index + 1, bottom=dayLowPrice)

    // 如果当前K线收盘价高于昨日收盘价,
    // 则将方框设为绿色(否则设为红色)。
    if close > prevDayClose
        box.set_bgcolor(dailyBox, upBoxColor)
        box.set_border_color(dailyBox, upBorderColor)
    else
        box.set_bgcolor(dailyBox, downBoxColor)
        box.set_border_color(dailyBox, downBorderColor)

我们来逐步解析这段代码。首先,我们使用indicator()函数来定义指标的设置,它为脚本命名并使其叠加显示在主图表上。

然后,我们创建了三种不同类型的输入选项:

// 输入选项
boxBorderSize = input.int(2, title="Box border size", minval=0)

upBoxColor      = input.color(color.new(color.green, 85), title="Up box colour")
upBorderColor   = input.color(color.green, title="Up border colour")
downBoxColor    = input.color(color.new(color.red, 85), title="Down box colour")
downBorderColor = input.color(color.red, title="Down border colour")

joinBoxes = input.bool(false, title="Join boxes")

首先,我们使用input.int()函数创建一个整数输入选项。名为Box border size的输入项用于指定方框边框的厚度。我们把该输入的值存储在boxBorderSize变量中,以供后续访问。

接着,input.color()函数创建了四个颜色输入。前两个定义了上涨方框的颜色,用于标记价格交易高于前一日收盘价的情况。另外两个输入则设置下跌方框的颜色,适用于价格交易低于前一日收盘价的情况。默认情况下,我们使用绿色和红色,并通过color.new()函数为其添加透明度。

最后一个输入是一个由input.bool()函数创建的真/假复选框。这个名为Join boxes的输入项用于指定连续两日的方框边框是否应该接触。其默认值为false,即边框不重叠。(请参阅本课后面的图片,了解连接的边框是什么样的。)

在输入选项之后,我们创建了几个变量来跟踪脚本的数据:

// 创建变量
var dayHighPrice = 0.0
var dayLowPrice  = 0.0
var prevDayClose = 0.0
var box dailyBox = na

然后,我们判断是否开始了一个新的日历日:

// 判断在日内时间周期上是否开始了新的一天
newDayStart = dayofmonth != dayofmonth[1] and 
     timeframe.isintraday

这个名为newDayStart的布尔(真/假)变量的值由两个表达式决定。第一个表达式判断当前K线的月份日期(dayofmonth)是否不等于(!=)前一根K线的月份日期,这种情况在每个日历日的第一根K线上发生。

另一个表达式是timeframe.isintraday变量,它在日内时间周期上为true,而在日线及更高周期图表上为false。通过这个变量,该指标将只在日内图表上绘制高/低点方框。

综合起来,newDayStart变量仅在日内图表的每日第一根K线上为true。现在,我们就可以在脚本的逻辑中使用这个变量了。

首先,我们跟踪每日的高点和低点:

// 如果新的一天开始,将高点和低点设置为该K线的数据。否则,
// 在当天持续跟踪最高高点和最低低点。
if newDayStart
    dayHighPrice := high
    dayLowPrice  := low
    prevDayClose := close[1]
else
    dayHighPrice := math.max(dayHighPrice, high)
    dayLowPrice  := math.min(dayLowPrice, low)

这个if/else语句检查我们上面定义的newDayStart变量。当其为true时,if代码块会把日内高点和低点变量(dayHighPricedayLowPrice)设置为当日开盘K线的highlow值,从而重置这些变量。我们同时也记录了前一天的收盘价。

当当前K线不是一天的第一根时,else代码块运行。它会使用math.max()函数把dayHighPrice变量更新为其当前值或当前K线高点中的较大者,并使用math.min()函数把dayLowPrice变量更新为其当前值或当前K线低点中的较小者。

通过在全天对每根K线执行这些变量更新,我们便能随着时间的推移收集到当日的高点和低点。

指标的下一部分是创建方框。这段代码位于一个大的if/else语句中,其if部分负责创建方框:

// 当新的一天开始时,为该日创建一个新方框。
// 否则,在当天内,更新当日的方框。
if newDayStart
    dailyBox := box.new(left=bar_index, top=dayHighPrice,
         right=bar_index + 1, bottom=dayLowPrice,
         border_width=boxBorderSize)

    // 如果我们不希望方框相连,那么前一个方框的结束位置
    // 不应与新方框的起始位置在同一根K线上。
    if not joinBoxes
        box.set_right(dailyBox[1], bar_index[1])

这里的if判断是否开始了新的一天。如果是,我们做两件事。

首先,我们使用box.new()创建一个新方框。这个方框绘制在当前K线(bar_index)和下一根K线(bar_index + 1)之间,其上下边框分别是当日开盘K线的高点和低点(dayHighPricedayLowPrice)。

对于边框宽度,我们使用了之前创建的boxBorderSize输入变量。为了方便后续访问,我们把其标识符存入dailyBox变量。

另一件事是一个if语句,它判断Join boxes输入选项是否被关闭。当joinBoxes变量为false时,这种情况发生,我们这里使用not操作符来检查。

当该输入关闭时,连续两日的方框不应该连接在一起。因此,我们让box.set_right()函数把前一个方框(dailyBox[1])的右边框更新到前一根K线(bar_index[1])的位置。这样,前一个方框的右边框和新方框的左边框就会位于不同的K线上(从而使这些边框不会接触)。

前面提到的if/else语句的else部分则在全天内负责更新方框:

else
    box.set_top(dailyBox, dayHighPrice)
    box.set_rightbottom(dailyBox, right=bar_index + 1, bottom=dayLowPrice)

    // 如果当前K线收盘价高于昨日收盘价,
    // 则将方框设为绿色(否则设为红色)。
    if close > prevDayClose
        box.set_bgcolor(dailyBox, upBoxColor)
        box.set_border_color(dailyBox, upBorderColor)
    else
        box.set_bgcolor(dailyBox, downBoxColor)
        box.set_border_color(dailyBox, downBorderColor)

这段代码做两件事。首先,我们更新当日的方框。box.set_top()函数把方框的上边框设置为当日的当前最高价(dayHighPrice)。

然后,box.set_rightbottom()函数把方框的下边框更新为当日的当前最低价(dayLowPrice),并把其右边框更改为bar_index + 1。这把边框移动到比当前K线更远一根K线的位置,好处是边框不会与K线重叠,从而更容易看清K线。

第二件事是另一个if/else语句,它决定了方框的颜色。其if条件检查当前K线的收盘价(close)是否高于(>)前一日的收盘价(prevDayClose)。

如果是,box.set_bgcolor()box.set_border_color()函数会更改方框的背景和边框颜色,新颜色使用我们之前设置的upBoxColorupBorderColor输入变量。这使得当收盘价高于前一日收盘价时,方框变为绿色。

如果当前K线收盘价等于或低于前一日收盘价,同样的两个函数会再次更改方框的颜色,这次使用downBoxColordownBorderColor输入变量所持有的颜色,从而创建一个红色的方框。

示例图表

让我们看看完成后的代码效果如何。首先是输入选项,它们看起来是这样的:

当我们把脚本添加到图表时,其默认设置会使高/低点方框显示如下:

如果我们缩小图表,可以看到每一天都有其自己的方框,颜色也与当日的趋势相匹配:

这是在另一个交易品种上,并启用了连接方框(join boxes)选项后的效果:

用方框捕捉自定义交易时段的高点和低点

Pine Script的方框绘图是高亮显示图表区域的绝佳工具。通过把注意力吸引到某些图表区域,分析图表变得既快又容易。方框可以高亮显示很多东西,那么如何用它来捕捉一个自定义交易时段的高点和低点呢?

这样一个交易时段是基于我们选择的开始和结束时间,因此它不一定与常规或延长交易时段相同(尽管也可以是!)。让我们看看绘制这种时段高低点方框需要哪些代码步骤。(只想看完整脚本?本课的末尾提供了完整代码。)

制作时段高低点方框需要五个步骤:首先为时段的交易时间创建一个输入选项,用以定义我们的自定义时段,再用另一个输入来指定该时段的时区;然后判断脚本当前的K线是否落在自定义时段之内;对于时段内的K线,收集期间的最高高点和最低低点价格;在时段开始时,创建一个新的方框绘图;最后在时段进行中,持续更新该时段的方框,使其能够跟随价格行为而移动和扩展。

让我们来逐一探讨每个步骤及其所需的代码。

步骤1:创建输入选项

首先,我们必须定义时段的活跃时间。让我们创建两个输入选项来轻松配置这些参数:

// 通过输入定义自定义交易时段
sessionTime = input.session("0600-1600", title="Session time")
sessionZone = input.string("GMT+2", title="Session time zone")

我们首先调用input.session()函数来创建一个时段(交易时间)输入。我们把这个输入的默认值设为从6:00到16:00("0600-1600")。在该输入控件前显示的名称是Session time。

接下来,input.string()函数创建了一个字符串(文本)输入,用于指定时段的时区。我们将使用"GMT+2"作为默认值,该输入的名称是Session time zone。

我们把这些输入的值存储在sessionTimesessionZone变量中,以便后续代码可以通过这些变量来查询当前的设置值。

步骤2:判断K线是否在时段内

接下来,我们要判断当前的K线是否落在自定义时段内。对于时段内的K线,我们需要收集它们的最高高点和最低低点;而对于时段外的K线,我们则不关心其高低点。

知道哪根K线是时段的第一根也同样重要。在那根K线上,我们将重置变量并为该时段创建新的方框绘图。

以下是我们如何找到时段内的K线以及时段的第一根K线:

// InSession() 函数在当前K线发生在指定时段内时返回'true',
// 并可根据给定的时区进行校正(可选)。
// 当K线不在该时间段内,或图表的时间周期为日线或更高时,
// 返回'false'。
InSession(sessionTime, sessionTimeZone=syminfo.timezone) =>
    not na(time(timeframe.period, sessionTime, sessionTimeZone))

// 判断时段当前是否活跃以及是否刚刚开始
inSession    = InSession(sessionTime, sessionZone) and timeframe.isintraday
sessionStart = inSession and not inSession[1]

这段代码使用了我们在判断K线是否落在自定义时段内一课中编写的自定义InSession()函数。你可以查阅该课以了解此函数的详细信息和局限性。

为了判断当前K线是否发生在自定义时段内,我们用两个参数调用InSession()函数,这两个参数就是上一步中创建的时段时间和时区输入(sessionTimesessionZone变量)。

这使得InSession()在K线落入时段内时返回true,而在该时间范围之外时返回false

我们把这个真/假结果与timeframe.isintraday变量相结合。该变量在日内时间周期上返回true,而在日线及更高周期图表上返回false。我们在这里使用它,是为了防止脚本试图在日线图上创建时段方框。

and操作符把InSession()的结果与timeframe.isintraday结合,最终的真/假值被存储在inSession变量中。

然后,我们来确定当前K线是否是该时段的第一根。这需要满足两个条件:首先,inSession变量必须为true,意味着当前K线必须在时段内。其次,前一根K线需要在时段之外,我们通过not inSession[1]来检查这一点。

把这两个判断通过and操作符结合起来,得到的结果只有在时段的第一根K线上才为true。我们把这个真/假结果存储在sessionStart变量中。

(请注意,此代码要求在上一时段的结束和新时段的开始之间至少有一根K线。如果图表上的所有K线都落在一个连续的时段内,代码将无法判断新时段的起点。)

步骤3:收集时段数据

现在我们知道了一根K线是否在时段内,就可以收集该时段的最高价和最低价了:

// 创建变量
var sessionHighPrice = 0.0
var sessionLowPrice  = 0.0

// 当新时段开始时,将时段高点和低点设置为
// 时段内第一根K线的数据。
if sessionStart
    sessionHighPrice := high
    sessionLowPrice  := low
// 否则,在时段进行中,持续跟踪最高高点和最低低点
else if inSession
    sessionHighPrice := math.max(sessionHighPrice, high)
    sessionLowPrice  := math.min(sessionLowPrice, low)

首先,var关键字创建了两个变量,sessionHighPricesessionLowPrice。这些持久化变量在每根K线开始时都会继承它们在前一根K线上的值。这使得跟踪时段高低点变得更容易,因为我们不必处理获取变量历史值的问题。

接下来,一个级联的if语句首先判断时段是否刚刚开始。当sessionStart变量为true时,条件成立。在这种情况下,我们把sessionHighPricesessionLowPrice变量重置为当前K线的高点和低点价格,即时段的初始高低点。

然后,一个else if条件判断inSession变量是否为true,这对时段内的任何一根K线都成立。在这些K线上,我们把sessionHighPrice变量更新为其当前值或当前K线高点中的较大者。Pine Script的math.max()函数会自动选出两者中的更高值,这实际上只会在出现新高价时才改变变量的值。

我们同样也更新sessionLowPrice变量,把它赋值为其当前值或当前K线低点中的较小者。我们使用math.min()函数来确保总是取到两个值中的更低者。

因为我们在时段内的每一根K线上都更新sessionHighPricesessionLowPrice变量,它们的值会随着价格的波动而改变。在时段内的任何时刻,这些变量都持有当时的时段高点和低点。当时段结束时,它们则包含了该时段最终的最高价和最低价。

步骤4:在时段开始时创建方框

至此,我们已经得到了时段的高点和低点价格。现在我们需要在图表上把它们显示出来。为此,我们首先需要一个方框绘图。让我们来创建一个:

// 为方框标识符创建持久化变量
var box sessionBox = na

// 当一个时段开始时,为该时段创建一个新方框
if sessionStart
    sessionBox := box.new(left=bar_index, top=na, right=na, bottom=na)

首先,我们声明了一个名为sessionBox的持久化方框变量。它的初始值是na,但我们很快就会给它一个有效的方框标识符。

接下来,一个if语句判断当前K线是否是时段的开始。当sessionStart变量为true时,条件成立。在该K线上,我们调用box.new()来创建一个新方框。我们把方框的左边框设置为当前K线编号(bar_index),而其上、右、下边框则暂时设为na。这些只是为了防止代码冗余而使用的替代值;下一步我们将把方框更新到其实际位置。

我们把box.new()返回的方框标识符存储在sessionBox变量中。通过这个变量,我们现在就可以访问该方框了,这在步骤5中会用到。

步骤5:在时段内延伸方框

接下来,我们在时段内的每一根K线上都更新方框。这会随着新K线的形成而延伸方框,并在出现新的高低价时更改其上下边框。

要这样更新方框,我们这样做:

// 在时段进行中,更新该时段已存在的方框
if inSession
    box.set_top(sessionBox, sessionHighPrice)
    box.set_bottom(sessionBox, sessionLowPrice)

    box.set_right(sessionBox, bar_index + 1)

这个if语句判断当前K线是否发生在时段内。当inSession变量为true时,条件成立。然后我们对该方框进行三次修改。

首先,box.set_top()函数把方框的上边框更新为时段的当前最高价(sessionHighPrice)。我们使用sessionBox变量来识别要修改哪个方框。

然后,box.set_bottom()函数把方框的下边框更改为时段的当前最低价(sessionLowPrice)。

之前的代码已经把sessionHighPricesessionLowPrice变量更新为了时段的最新高低点,这些最新的值现在通过这两个函数反映在了方框的尺寸上。

最后,我们使用box.set_right()函数更改方框的右边框。这使得方框在时段内随着每一根新K线而向右延伸。新的右边框位置是当前K线编号(bar_index)加上1。这把边框移动到比当前K线更远一根K线的位置,从而防止方框与最新的K线重叠,否则该K线的高低点将难以看清。

示例脚本

让我们看看以上步骤如何组合成一个完整的脚本。下面的指标会在一个自定义交易时段的高点和低点周围绘制有颜色的方框。代码与我们上面讨论的大部分相似,但也添加了一些新功能。

我们将根据价格行为为方框着色,并通过输入选项来定义这些颜色。代码会根据时段内的最新价格与该时段开盘价的比较,来为方框赋予相应的颜色。新的功能还包括一个用于设置方框边框宽度的输入,它既可以增加边框的厚度,也可以在值为零时隐藏方框的边框。

该指标的完整代码如下:

//@version=5
indicator(title="时段高/低点方框", overlay=true)

// InSession() 函数在当前K线发生在指定时段内时返回'true',
// 并可根据给定的时区进行校正(可选)。
// 当K线不在该时间段内,或图表的时间周期为日线或更高时,
// 返回'false'。
InSession(sessionTime, sessionTimeZone=syminfo.timezone) =>
    not na(time(timeframe.period, sessionTime, sessionTimeZone))

// 步骤 1:
// 通过输入定义自定义交易时段
sessionTime = input.session("0600-1600", title="Session time")
sessionZone = input.string("GMT+2", title="Session time zone")

// 用于方框视觉外观的其他输入
boxBorderSize   = input.int(2, title="Box border size", minval=0)
upBoxColor      = input.color(color.new(color.green, 85), title="Up box")
upBorderColor   = input.color(color.green, title="Up border")
downBoxColor    = input.color(color.new(color.red, 85), title="Down box")
downBorderColor = input.color(color.red, title="Down border")

// 创建变量
var sessionHighPrice = 0.0
var sessionLowPrice  = 0.0
var sessionOpenPrice = 0.0
var box sessionBox = na

// 步骤 2:
// 判断时段当前是否活跃以及是否刚刚开始
inSession    = InSession(sessionTime, sessionZone) and timeframe.isintraday
sessionStart = inSession and not inSession[1]

// 步骤 3:
// 当新时段开始时,将时段高点和低点设置为
// 该时段内第一根K线的数据。
if sessionStart
    sessionHighPrice := high
    sessionLowPrice  := low
    sessionOpenPrice := open
// 否则,在时段进行中,持续跟踪最高高点和最低低点
else if inSession
    sessionHighPrice := math.max(sessionHighPrice, high)
    sessionLowPrice  := math.min(sessionLowPrice, low)

// 步骤 4:
// 当一个时段开始时,为该时段创建一个新方框
if sessionStart
    sessionBox := box.new(left=bar_index, top=na, right=na, bottom=na,
         border_width=boxBorderSize)

// 步骤 5:
// 在时段进行中,更新该时段已存在的方框
if inSession
    box.set_top(sessionBox, sessionHighPrice)
    box.set_bottom(sessionBox, sessionLowPrice)

    box.set_right(sessionBox, bar_index + 1)

    // 判断K线收盘价是否高于时段开盘价。如果是,
    // 将方框设为绿色(否则使用红色)。
    if close > sessionOpenPrice
        box.set_bgcolor(sessionBox, upBoxColor)
        box.set_border_color(sessionBox, upBorderColor)
    else
        box.set_bgcolor(sessionBox, downBoxColor)
        box.set_border_color(sessionBox, downBorderColor)

我们从indicator()函数开始,它通过title为脚本命名,并用overlay使其叠加显示在主图表上。

然后,我们引入了自定义的InSession()函数,它用于判断当前K线是否落在自定义时段内。

接下来,我们创建脚本的输入选项。我们编写了上面讨论过的两个输入(步骤1),并添加了几个新的:

// 用于方框视觉外观的其他输入
boxBorderSize   = input.int(2, title="Box border size", minval=0)
upBoxColor      = input.color(color.new(color.green, 85), title="Up box")
upBorderColor   = input.color(color.green, title="Up border")
downBoxColor    = input.color(color.new(color.red, 85), title="Down box")
downBorderColor = input.color(color.red, title="Down border")

首先,我们创建了一个整数输入选项(input.int())。这个名为Box border size的选项用于设置方框边框的尺寸,其默认值为2,最小值为0。最小值0可以用来关闭方框的边框。我们使用boxBorderSize变量来跟踪该输入的值。

接着,input.color()函数创建了四个颜色输入选项,用于配置上涨和下跌方框的外观。(稍后我们会把上涨方框定义为时段内最新价格高于该时段开盘价的方框;同样,下跌方框则是最新价格低于时段开盘价的情况。)

上涨方框默认使用绿色(color.green),下跌方框则以红色(color.red)开始。方框的背景色通过color.new()函数设置为85%的透明度。我们用upBoxColorupBorderColor变量来跟踪上涨方框的颜色,稍后将通过downBoxColordownBorderColor变量来访问下跌方框的颜色。

接下来,我们创建了几个持久化(var)变量,它们将用于跟踪时段的高点、低点、开盘价,以及我们将要创建的方框的标识符。

然后,我们判断当前K线是否落在时段内以及时段是否刚刚开始,这是上面讨论的步骤2。

之后,我们收集时段的高点、低点和开盘价,这是前面分析的步骤3。

我们接着在每个新时段开始时创建一个方框,我们在上面的步骤4中讨论了如何实现。

然后在时段进行中,我们更新方框的位置,这是上面讨论的步骤5。

我们做的最后一件事是更改方框的颜色,为此我们使用了这个嵌套的if/else语句:

// 判断K线收盘价是否高于时段开盘价。如果是,
// 将方框设为绿色(否则使用红色)。
if close > sessionOpenPrice
    box.set_bgcolor(sessionBox, upBoxColor)
    box.set_border_color(sessionBox, upBorderColor)
else
    box.set_bgcolor(sessionBox, downBoxColor)
    box.set_border_color(sessionBox, downBorderColor)

if条件判断当前K线的收盘价是否大于(>)该时段的开盘价。在时段开始时,我们把sessionOpenPrice变量设置为了该初始K线的开盘价。

当时段内的最新价格高于该开盘价时,if代码块运行。它会让box.set_bgcolor()函数把sessionBox方框的背景颜色设置为upBoxColor输入变量的值,同时box.set_border_color()函数把其边框颜色修改为upBorderColor变量的值。这使得在默认情况下,方框及其边框变为绿色。

如果最新价格不高于时段开盘价,则else代码块运行。在那里,box.set_bgcolor()box.set_border_color()把方框的背景和边框颜色设置为由downBoxColordownBorderColor输入变量所持有的颜色,默认是红色。

最终,方框的颜色会根据时段内价格是上涨还是下跌的趋势而改变。

示例图表

让我们看看完成后的代码效果如何。首先是它创建的输入选项,看起来如下:

当我们把带有默认设置的脚本添加到图表时,它的效果如下:

该指标有几个可供调整的设置。如果我们修改交易时段,指标会变为:

把Box border size选项设置为零后,Pine Script会移除方框周围的边框,使脚本看起来是这样的:

总结

  • 要用一个方框高亮显示一个自定义时段的高点和低点,我们首先检查当前K线是否落在该时段内。
  • 如果是,我们就跟踪时段内K线的最高高点和最低低点。
  • 在自定义时段开始时,我们使用box.new()函数创建一个方框绘图。
  • 在时段进行中,我们更新方框的上边框并调整其下边框,以此来捕捉随着时段发展而出现的新高低价。
  • 通过在时段内更新方框的右边框,方框的宽度会随着时段内每一根新K线的出现而增长。
赞(0)
未经允许不得转载:图道交易 » Pine Script(193):实战方框,每日与自定义时段高低点
分享到

评论 抢沙发

登录

找回密码

注册