timeframe.isminutes:判断是否为分钟级时间周期
Pine Script 的 timeframe.isminutes 变量,可以告诉我们一个指标或策略当前是否运行在一个基于分钟的时间周期上。
timeframe.isminutes 会返回以下两个可能的值之一:
true:当脚本运行在一个分钟图上时。这包括了分钟图、小时图以及等量图 (range charts)。false:当脚本在除分钟级别以外的任何其他分辨率上计算时。
timeframe.isminutes 在不同时间周期上的返回值
timeframe.isminutes 的值取决于图表的时间周期。下表展示了该变量针对不同时间周期的返回值:
| 图表时间周期 | timeframe.isminutes 返回值 |
|---|---|
| 1 秒 | false |
| 5 秒 | false |
| 15 秒 | false |
| 30 秒 | false |
| 1 分钟 | → true ← |
| 3 分钟 | → true ← |
| 5 分钟 | → true ← |
| 15 分钟 | → true ← |
| 30 分钟 | → true ← |
| 45 分钟 | → true ← |
| 1 小时 | → true ← |
| 2 小时 | → true ← |
| 3 小时 | → true ← |
| 4 小时 | → true ← |
| 1 日 | false |
| 5 日 | false |
| 1 周 | false |
| 1 月 | false |
| 1 季度 (3 个月) | false |
| 1 年 (12 个月) | false |
| 10 等量图 (Ranges) | → true ← |
| 100 等量图 (Ranges) | → true ← |
重点提示
TradingView 不仅在分钟图上使用分钟数据,在构建小时图和等量图时也是如此。这正是为什么
timeframe.isminutes在这些时间周期上也会返回true。
基于时间间隔,而非图表类型
timeframe.isminutes 返回的值取决于图表的时间间隔。当 TradingView 使用分钟数据来构建价格K线时,timeframe.isminutes 就为 true。
但该变量的值并不依赖于图表的类型,我们如何绘制这些K线并不重要。即便是像折线图 (Line Break) 和点数图 (Point & Figure) 这样的特殊图表类型,也是基于一个具有特定时间间隔的数据来构建的。
因此,对于 timeframe.isminutes 而言,图表类型是无关紧要的。无论是在棒图、K线图、平均K线图、砖块图、折线图、卡吉图还是点数图上,timeframe.isminutes 变量都会如上表所示,返回 true 或 false。
与其他时间周期变量的比较
Pine Script 提供了其他几个时间周期变量。当我们的脚本运行在一个基于分钟的时间周期上时,这些其他变量的返回值如下:
| 变量 | 当 timeframe.isminutes 为 true 时 |
|---|---|
timeframe.ismonthly |
false |
timeframe.isweekly |
false |
timeframe.isdaily |
false |
timeframe.isseconds |
false |
timeframe.isdwm |
false |
timeframe.isintraday |
→ true ← |
总结一下,在一个基于分钟的时间周期上(即 timeframe.isminutes 为 true 时),只有 timeframe.isintraday 变量也同样为 true。所有其他的时间周期布尔变量在分钟级别的K线上都为 false。
完整示例指标
要了解我们如何应用 timeframe.isminutes,下面的这个完整指标会创建一个带有时间周期信息的文本标签:
//@version=5
indicator(title="Minute time frame example", overlay=true)
// 在最后一根已确认的历史K线上,创建一个标签来
// 识别这是一个基于分钟的时间周期
if barstate.islastconfirmedhistory
// 判断要在标签中显示的文本
labelText = if timeframe.isminutes
"This chart is made\nfrom minute data"
else
"This chart is below 1 minute\nor above 24 hours"
labelText += "\n\nChart period: \n" + timeframe.period
// 创建实际的文本标签
label.new(x=bar_index, y=close, style=label.style_label_left,
color=color.new(color.red, 60), textcolor=color.black,
size=size.large, text=labelText)
代码解析
代码首先调用 indicator() 函数来配置脚本,其中 title 为脚本命名,overlay 则将指标叠加显示在主图的交易品种上。
然后,一个 if 语句评估 barstate.islastconfirmedhistory。该变量只在图表的最后一根已确认的历史K线上才为 true(在所有其他K线上均为 false)。我们使用这个条件,是为了让标签只被创建一次,而不是在多根K线上重复创建。
在 if 语句内部,我们设置了标签的文本,并将其储存在 labelText 变量中。该变量的值由一个 if/else 语句来设定。判断的条件是 timeframe.isminutes 变量。当其为 true 时,变量的文本会说明图表是由分钟数据构成的;当为 false 时,文本则会说明时间周期是其他类型。
接下来,我们为 labelText 变量追加了更多信息。加法赋值运算符 (+=) 会将 timeframe.period 变量的值(它能告诉我们图表的具体周期)添加到现有文本的末尾。
最后的代码使用 label.new() 函数来创建这个文本标签。我们把它放置在当前K线的收盘价处 (bar_index, close)。该标签的箭头指向左边 (label.style_label_left),并拥有一个红色 (color.red) 的背景,通过 color.new() 函数设置了60%的透明度。文本以黑色 (color.black) 和大号字体 (size.large) 显示。labelText 变量指定了标签的内容。
在图表上,这个脚本会将分钟时间周期识别为,嗯,分钟图。因为 TradingView 使用分钟数据来构建小时图,所以小时图也会被识别为基于分钟的图表。以这个2小时图为例:
如果我们绘制一个低于1分钟或超过24小时的分辨率,该标签会告诉我们图表不是由分钟数据制作的。例如:
如何应用 timeframe.isminutes
在我们的代码中,有以下几种方式可以应用 timeframe.isminutes:
- 根据时间周期改变计算逻辑。例如,在一个分钟图上,我们可以计算一定周期内的最高高点;但在日线图上,可能直接使用当前的最高价就包含了足够的信息。
- 为不同周期使用不同参数。例如,在日内的分钟图上,我们可能希望使用与日线图上不同的RSI周期长度。
- 检查脚本运行环境。确保脚本运行在适合其交易逻辑的时间周期上。例如,如果我们编写的是一个长线交易思路,我们可能不希望它在日内的分钟图上产生错误的信号。
- 自动获取更高时间周期的数据。当我们的脚本运行在一个基于分钟的图表上时,代码可以自动从日线图获取数据,以进行更高时间周期的分析。
虽然 timeframe.isminutes 本身很有用,但我们也可以将这个变量与其他时间周期变量结合起来,这样我们的脚本就能以更灵活的方式处理多种不同的时间周期了。
timeframe.isminutes 的特性
timeframe.isminutes只告诉我们脚本是否运行在基于分钟的数据上,但它并不会告诉我们每根K线具体是多少分钟。要获取这个信息,需要使用timeframe.multiplier变量。当timeframe.isminutes为true时,timeframe.multiplier的值就会告诉我们图表分辨率所使用的分钟数,例如对于1分钟K线,它返回1;对于2小时(120分钟)K线,它返回120。- 通过
timeframe.period变量,我们可以找出图表的周期及其类型。当这个变量返回一个不带字母的字符串时,该时间周期就是一个基于分钟的图表,例如对于30分钟和1小时图,它会分别返回"30"和"60"。这个变量使得我们可以加载与当前图表相同时间周期的背景数据。 - 虽然我们可以对
timeframe.isminutes使用历史引用运算符 ([]),但这没有必要,因为该变量在每一根K线上的返回值都是相同的。 timeframe.isminutes可以被指标和策略使用。另外,这个变量在每一个时间周期上都可用。- 在 Pine Script 的第3版及更早版本中,
timeframe.isminutes变量曾被命名为isminutes。
内容总结
- 当脚本运行在一个基于分钟的时间周期上时,
timeframe.isminutes变量就会返回true。这包括了分钟图、等量图以及小时图。 - 当一个图表不使用分钟数据时(例如秒、日、周、月图),
timeframe.isminutes返回false。 timeframe.isminutes的判断结果不依赖于图表类型。它在像砖块图 (Renko) 和卡吉图 (Kagi) 这样的特殊图表类型上也同样有效。
timeframe.isdaily:判断是否为日线时间周期
Pine Script 的 timeframe.isdaily 变量,用于判断一个指标或策略当前是否运行在日线时间周期上。
timeframe.isdaily 会返回以下两个值之一:
true:当脚本运行在日线周期上时。这包括从1天到365天的所有日线图表。false:当脚本运行在任何其他非日线周期上时。
timeframe.isdaily 在不同时间周期的返回值
timeframe.isdaily 的返回值取决于图表所处的时间周期。以下是该变量在各种周期下的具体返回值:
| 图表时间周期 | timeframe.isdaily 返回值 |
|---|---|
| 1 秒 | false |
| 5 秒 | false |
| 15 秒 | false |
| 30 秒 | false |
| 1 分钟 | false |
| 3 分钟 | false |
| 5 分钟 | false |
| 15 分钟 | false |
| 30 分钟 | false |
| 45 分钟 | false |
| 1 小时 | false |
| 2 小时 | false |
| 3 小时 | false |
| 4 小时 | false |
| 1 天 | → true ← |
| 5 天 | → true ← |
| 1 周 | false |
| 1 月 | false |
| 1 季度 (3 个月) | false |
| 1 年 (12 个月) | false |
| 10 ranges | false |
| 100 ranges | false |
判断依据是时间间隔,而非图表类型
timeframe.isdaily 的值是依据图表生成K线所采用的时间间隔来决定的。只要 TradingView 是以天为单位来合成K线,timeframe.isdaily 的值就是 true。
因此,该变量的返回值与K线的具体图表类型无关。即便是 Renko 和 Kagi 这类非标准的图表,它们依然是基于特定的时间间隔来生成K线的。
所以,对于 timeframe.isdaily 而言,图表类型无关紧要。无论是传统的K线图、蜡烛图、平均K线图 (Heikin Ashi),还是 Renko、Line Break、Kagi 和 Point & Figure 图,该变量的返回值都遵循上表中的规则。
与其他时间周期变量的比较
Pine Script 还提供了其他几个用于判断时间周期的变量。当我们的指标或策略运行在日线图上时,其他相关变量的返回值如下:
| 变量 | 当 timeframe.isdaily 为 true 时 |
|---|---|
timeframe.ismonthly |
false |
timeframe.isweekly |
false |
timeframe.isminutes |
false |
timeframe.isseconds |
false |
timeframe.isdwm |
→ true ← |
timeframe.isintraday |
false |
总而言之,当图表处于日线时间周期时(即 timeframe.isdaily 为 true),timeframe.isdwm 变量也会返回 true。而所有其他用于判断特定周期的变量(如月线、周线、分钟线等)则均为 false。
指标范例
接下来,我们通过一个完整的脚本范例来探索 timeframe.isdaily 的实际用法。下方的指标会创建一个文本标签,用以显示当前图表是否为日线周期的相关信息:
//@version=5
indicator(title="Daily time frame example", overlay=true)
// 在最后一根已确认的历史K线上,创建一个标签
// 用以显示日线周期的信息
if barstate.islastconfirmedhistory
// 判断要在标签中显示的文本内容
labelText = if timeframe.isdaily
"这是一个日线图!"
else
"这是一个日内图表\n或周线及更高周期的图表"
labelText += "\n\n此图表周期为:\n" + timeframe.period
// 创建标签实体
label.new(x=bar_index, y=close, style=label.style_label_left,
color=color.new(color.teal, 70), textcolor=color.black,
size=size.large, text=labelText)
这段代码首先通过 indicator() 函数来配置指标的属性,例如脚本的名称 (title),以及是否将脚本叠加到主图上 (overlay=true)。
接着,一个 if 语句用于检查 barstate.islastconfirmedhistory 这一内置变量。该变量仅在图表的最后一根已确认的历史K线上才返回 true,而在所有其他K线上均为 false。我们利用这个特性,可以确保文本标签只被创建一次,而不是在每根K线上都重复绘制。
在 if 代码块内部,我们首先定义了标签要显示的文本内容。我们创建了 labelText 变量,并通过一个 if/else 结构为其赋值。if 的判断条件是 timeframe.isdaily 的值。如果当前是日线图,我们就给 labelText 变量赋予相应的说明文本。如果图表是其他时间周期,else 代码块则会赋予说明它是日内或周线及更高周期的图表的文本。
随后,我们使用加法赋值运算符 (+=),在 labelText 已有的文本末尾追加更多信息。这里我们追加了图表的具体周期,该信息通过 timeframe.period 变量获取。
最后,我们调用 label.new() 函数来创建这个标签。它会显示在最后一根历史K线的收盘价位置 (x=bar_index, y=close)。其样式 (style) 为向左指向 (label.style_label_left),背景色为青色 (color.teal),并通过 color.new() 函数设置了70%的透明度。标签的文字颜色为黑色 (color.black),字号为大号 (size.large),其显示的文本内容即为我们先前构建好的 labelText 变量。
当这个脚本运行在日线图上时,标签会显示两点信息:第一,它会明确指出这是一个日线图;第二,它会显示该图表具体的周期。例如,在一个标准的富时100指数日线图上,显示的周期便是 “D”。
如果我们切换图表的时间周期,标签上的内容也会随之更新。当图表并非日线图时,标签便会明确地提示这一点,就像在下面的15分钟图表示例中一样。
timeframe.isdaily 的使用方法
timeframe.isdaily 有多种实用的使用方式,例如:
- 让脚本的算法自适应于时间周期。 举例来说,在日线图上,我们设置的止盈目标可能会比在日内图表上设置得更远。
- 验证脚本是否运行在合适的交易周期上。 如果我们编写的是一个超短线(scalping)刷单策略,我们很可能不希望它在日线周期上产生交易信号。
- 为不同时间周期配置不同的参数。 例如,在日线图上,我们可能会选用周期为20的SMA,但在月线图上,则可能改用周期为8的移动平均线。
- 在后台自动加载更高时间周期的数据。 当我们的脚本运行在日线图上时,我们可以加载周线数据,以进行更高时间周期的分析。
尽管 timeframe.isdaily 可以单独使用,但为了实现更精确的控制,我们通常会将它与其他时间周期变量结合起来。通过这种方式,代码就能以不同的逻辑来分别处理日线、周线和日内等时间周期。
timeframe.isdaily 的特性
timeframe.isdaily 用于判断图表是否采用日线数据,但它并不会指明每根K线具体包含多少天。这个信息需要通过 timeframe.multiplier 变量来获取。当 timeframe.isdaily 的值为 true 时,timeframe.multiplier 的值就代表了每根K线包含的天数。例如,对于1日K线,其值为 1;对于5日图,其值为 5。
图表的具体周期和时间单位由 timeframe.period 变量返回。对于日线图,该变量会返回一个包含字母”D”的字符串,例如 "3D" 代表3日周期。我们通常使用此变量来加载与当前图表周期相同的后台数据。
虽然可以在 timeframe.isdaily 后面使用历史操作符([]),但这并非必要,因为该变量在每一根K线上的返回值都是相同的。
timeframe.isdaily 可用于指标(indicators)和策略(strategies)的开发。并且,我们可以在任何时间周期上调用此变量。
值得注意的是,在Pine Script版本3及更早的版本中,timeframe.isdaily 变量的名称是 isdaily。
总结
当脚本运行在以天为单位的时间周期上时(即1天到365天的图表),timeframe.isdaily 变量会返回 true。
如果图表使用其他非日线的时间周期,timeframe.isdaily 会返回 false。
timeframe.isdaily 的返回值不受图表类型的影响。它同样适用于一些不常见的图表,例如 Line Break 图和 Point & Figure 图。
timeframe.isweekly:判断是否为周线时间周期
Pine Script 的 timeframe.isweekly 变量,可以告诉我们一个指标或策略脚本当前是否在周线时间周期上进行计算。
该变量会返回以下两个值之一:
true:当脚本运行在周线时间周期上时。这包括了从1周到52周的所有图表分辨率。false:当脚本运行在除周线以外的任何其他时间周期上时。
timeframe.isweekly 在不同时间周期上的返回值
timeframe.isweekly 的值取决于图表的时间周期。下表展示了该变量针对不同 TradingView 时间周期的返回值:
| 图表时间周期 | timeframe.isweekly 返回值 |
|---|---|
| 1 秒 | false |
| 5 秒 | false |
| 15 秒 | false |
| 30 秒 | false |
| 1 分钟 | false |
| 3 分钟 | false |
| 5 分钟 | false |
| 15 分钟 | false |
| 30 分钟 | false |
| 45 分钟 | false |
| 1 小时 | false |
| 2 小时 | false |
| 3 小时 | false |
| 4 小时 | false |
| 1 日 | false |
| 5 日 | false |
| 1 周 | → true ← |
| 1 月 | false |
| 1 季度 (3 个月) | false |
| 1 年 (12 个月) | false |
| 10 等量图 (Ranges) | false |
| 100 等量图 (Ranges) | false |
基于时间间隔,而非图表类型
timeframe.isweekly 的值取决于 TradingView 用来创建K线的时间间隔。当这些价格K线是由周线数据构成时,timeframe.isweekly 就为 true。
但该变量的值并不依赖于绘制这些K线的图表类型。即便是像卡吉图 (Kagi) 和折线图 (Line Break) 这样不常见的图表选项,也是基于每根K线的一个特定时间间隔(例如1周或1个月)来构建的。
因此,对于 timeframe.isweekly 而言,我们的图表类型并不重要。无论是在棒图、K线图、平均K线图、砖块图、折线图、卡吉图还是点数图上,该变量都会如上表所示,返回 true 或 false。
与其他时间周期变量的比较
Pine Script 提供了几个时间周期变量。当我们的代码在一个周线时间周期上运行时,这些其他变量的返回值如下:
| 变量 | 当 timeframe.isweekly 为 true 时 |
|---|---|
timeframe.ismonthly |
false |
timeframe.isdaily |
false |
timeframe.isminutes |
false |
timeframe.isseconds |
false |
timeframe.isdwm |
→ true ← |
timeframe.isintraday |
false |
总结一下,在一个周线时间周期上(即 timeframe.isweekly 为 true 时),timeframe.isdwm 变量也同样为 true。但所有其他的时间周期布尔变量在周线K线上都为 false。
完整示例指标
为了让你了解如何应用 timeframe.isweekly,下面的这个完整指标会通过这个时间周期变量,来创建一个信息丰富的文本标签:
//@version=5
indicator(title="Weekly time frame example", overlay=true)
// 在最后一根已确认的历史K线上,创建一个带有时间周期信息的标签
if barstate.islastconfirmedhistory
// 判断标签的文本内容
labelText = if timeframe.isweekly
"We got a weekly\nchart here!"
else
"This isn't a\nweekly price chart"
labelText += "\n\nChart period is:\n" + timeframe.period
// 创建标签本身
label.new(x=bar_index, y=close, style=label.style_label_lower_right,
color=color.new(color.orange, 40), textcolor=color.black,
size=size.large, text=labelText)
代码解析
代码首先使用 indicator() 函数来设置其属性。这行代码为脚本命名,并将其叠加显示在主图的交易品种上。
然后,一个 if 语句检查 barstate.islastconfirmedhistory。该变量只在图表的最后一根历史K线上才为 true。我们在这里使用它,是为了让我们的代码只在图表的末尾执行一次,这样我们就不会在每一根K线上都重复创建一个标签。
在这个 if 语句中,我们首先确定标签的文本内容。我们创建了 labelText 变量,并通过一个 if/else 语句为其赋值。判断的条件是 timeframe.isweekly。在一个周线时间周期上,这段代码会将变量的文本设置为一条关于周线图的消息。对于其他时间周期,else 部分的代码则会说明这不是一个周线图。
然后,我们为 labelText 变量追加更多文本。这段文本包含了时间周期的周期数值(通过 timeframe.period 获取)。加法赋值运算符 (+=) 会将新文本添加到该变量现有内容的末尾。
最后,我们使用 label.new() 函数来创建这个文本标签。这个标签会出现在K线的收盘价处 (bar_index, close),并指向右下方 (label.style_label_lower_right)。背景是橘色 (color.orange),通过 color.new() 函数设置了40%的透明度。它的文字是黑色的 (color.black),并使用了大号字体 (size.large)。标签的文本内容就是 labelText 变量。
在一个周线图上,该指标的标签会确认这是一个周线时间周期,同时也会告诉我们其周期数值。例如,对于这张PayPal的周线图,其周期是一周 (“W”):
当我们把图表切换到其他周期时,标签的内容也会相应地更新。例如,在这张30分钟图上:
timeframe.isweekly 的使用方法
我们可以利用 timeframe.isweekly 实现多种功能,例如:
- 根据时间周期调整脚本的算法。 在周线图上,我们可以采用与日内图表不同的方式来计算价格目标。
- 检查脚本是否运行在合适的交易周期上。 如果我们的代码是为短期交易策略设计的,我们应当避免在周线(或更长周期)的图表上向用户发出交易信号。
- 让脚本的参数自适应于不同的时间周期。 例如,在周线图上,我们可以使用比日线图周期更短的 RSI 指标。
- 在后台自动加载更高时间周期的数据。 例如,当图表处于周线周期时,我们的代码可以抓取月度数据,用于计算更高时间周期的移动平均线。
除了单独使用 timeframe.isweekly,我们还可以将其与 Pine Script 中其他的时间周期变量结合使用。通过这种方式,我们能够为日线、周线和月线等不同的图表周期编写特定的功能。
timeframe.isweekly 的特性
timeframe.isweekly 用于判断脚本当前是否运行在周线图上,但它本身并不会指明每根K线包含几周。这个具体信息需要通过 timeframe.multiplier 变量来获取。当 timeframe.isweekly 的值为 true 时,timeframe.multiplier 的值就代表了每根K线所包含的周数。例如,在1周图表上该值为 1,在4周图表上则为 4。
另一个相关的 timeframe.period 变量会直接返回图表周期和时间单位的字符串。对于周线图,该变量会返回一个包含字母”W”的字符串,例如”2W”就代表2周图表。我们通常使用这个变量来加载与当前图表时间周期相同的后台数据。
尽管可以在 timeframe.isweekly 变量后使用历史操作符([]),但这完全没有必要,因为该变量在图表的每一根K线上的返回值都是恒定不变的。
timeframe.isweekly 可同时用于指标(indicators)和策略(strategies)的开发中。并且,我们可以在任何时间周期的图表上调用此变量。
值得注意的是,在 Pine Script 版本3及更早的版本中,timeframe.isweekly 变量的名称是 isweekly。
总结
当脚本运行在以周为单位的时间周期上时(即1周至52周的图表),timeframe.isweekly 变量会返回 true。
如果图表未使用周线数据,timeframe.isweekly 的值则为 false。
timeframe.isweekly 的判断不依赖于图表类型,它同样适用于一些不常见的图表,例如 Point & Figure 图和 Line Break 图。
timeframe.ismonthly:判断是否为月线时间周期
Pine Script 的 timeframe.ismonthly 变量,用于判断我们的指标或策略当前是否运行在月线时间周期上。
timeframe.ismonthly 会返回以下两个值之一 :
true:当脚本运行在月线周期上时。这包括从1个月到12个月的所有月线图表。false:当脚本运行在月线以外的其他时间周期上时。
timeframe.ismonthly 在不同时间周期的返回值
timeframe.ismonthly 的返回值取决于图表所处的时间周期。以下是该变量在不同图表周期下的具体返回值:
| 图表时间周期 | timeframe.ismonthly 返回值 |
|---|---|
| 1 秒 | false |
| 5 秒 | false |
| 15 秒 | false |
| 30 秒 | false |
| 1 分钟 | false |
| 3 分钟 | false |
| 5 分钟 | false |
| 15 分钟 | false |
| 30 分钟 | false |
| 45 分钟 | false |
| 1 小时 | false |
| 2 小时 | false |
| 3 小时 | false |
| 4 小时 | false |
| 1 天 | false |
| 5 天 | false |
| 1 周 | false |
| 1 月 | → true ← |
| 1 季度 (3 个月) | → true ← |
| 1 年 (12 个月) | → true ← |
| 10 ranges | false |
| 100 ranges | false |
判断依据是K线的时间间隔,而非图表类型
timeframe.ismonthly 的值取决于 TradingView 生成图表K线时所采用的时间间隔。只要这些K线覆盖的是以月为单位的时间周期,timeframe.ismonthly 的值就为 true。
该变量的返回值并不取决于 TradingView 展示这些K线时所用的图表类型。即便是 Line Break 这种不常见的图表,它们依然是基于特定的时间间隔来生成K线的(例如1分钟或4小时)。
因此,对于 timeframe.ismonthly 而言,图表类型无关紧要。无论是K线图、蜡烛图、平均K线图 (Heikin Ashi),还是 Renko、Line Break、Kagi 和 Point & Figure 图,该变量的返回值都遵循上表中的规则。
与其他时间周期变量的比较
除了 timeframe.ismonthly,Pine Script 还提供了其他几个时间周期变量。当我们的指标或策略运行在月线图上时,其他相关变量的返回值如下:
| 变量 | 当 timeframe.ismonthly 为 true 时 |
|---|---|
timeframe.isweekly |
false |
timeframe.isdaily |
false |
timeframe.isminutes |
false |
timeframe.isseconds |
false |
timeframe.isdwm |
→ true ← |
timeframe.isintraday |
false |
总而言之,当图表处于月线时间周期时(即 timeframe.ismonthly 为 true),只有 timeframe.isdwm 变量也会返回 true。所有其他用于判断特定周期的变量则均为 false。
指标范例
让我们通过一个完整的脚本来看看如何使用 timeframe.ismonthly。下方的指标会生成一个包含月线周期信息的文本标签:
//@version=5
indicator(title="Monthly time frame example", overlay=true)
// 在最后一根已确认的历史K线上,创建提示信息的标签
if barstate.islastconfirmedhistory
// 决定要在标签中显示的文本内容
labelText = if timeframe.ismonthly
"当前图表为\n月线时间周期"
else
"当前图表为\n非月线时间周期"
labelText += "\n\n图表周期:\n" + timeframe.period
// 创建文本标签的实体
label.new(x=bar_index, y=close, style=label.style_label_upper_left,
color=color.new(color.yellow, 50), textcolor=color.black,
size=size.large, text=labelText)
脚本首先使用 indicator() 函数来定义其基本设置,例如脚本的名称 (title) 以及是否将其叠加在主图的交易品种上 (overlay=true)。
接着,一个 if 语句用于检查 barstate.islastconfirmedhistory 变量。该变量仅在图表的最后一根已确认的历史K线上才返回 true。因为这根K线只出现一次,我们的标签也只会被创建一次(而不是在每根K线上都重复创建)。
在 if 代码块内部,我们首先定义了标签要显示的文本。为此,我们创建了 labelText 变量,并用 if/else 结构为其赋值。if 分支检查 timeframe.ismonthly 变量。当该变量为 true 时,文本会说明当前是月线图。否则,else 分支的代码则会表明图表使用的是月线以外的周期。
随后,我们再次更新 labelText 变量。这次我们通过 Pine Script 的 timeframe.period 变量获取图表的具体周期,并使用加法赋值运算符 (+=) 将这段新文本追加到变量已有内容的末尾。
最后一部分代码调用 label.new() 函数来创建一个新的文本标签。这个标签会出现在最后一根历史K线的收盘价位置 (x=bar_index, y=close),并指向上左方 (label.style_label_upper_left)。它的背景为黄色 (color.yellow),并通过 color.new() 函数设置了透明度。文本为黑色 (color.black)、大号字体 (size.large),其显示的具体内容就是我们先前创建的 labelText 变量。
在月线图上,该指标的标签会告知两点信息。第一,它会确认图表正处于月线时间周期。第二,它会显示该图表的具体周期。如下方的3个月周期的S&P 500指数图所示:
如果我们把图表切换到不同的时间周期,文本标签也会相应地更新:
timeframe.ismonthly 的使用方法
我们可以利用 timeframe.ismonthly 变量实现多种功能,例如:
- 让脚本的参数自适应于图表周期。 例如,我们可能希望在月线图上使用的移动平均线比日线图上的反应更灵敏(周期更短)。
- 加载更高时间周期的数据。 当我们的脚本运行在月线图上时,我们可以在后台抓取年度数据,用于进行更高时间周期的分析。
- 检查脚本是否运行在其预设的交易周期上。 如果我们编写的是一个短期交易策略,我们可能需要阻止它在月线图上产生质量不佳的信号。
- 根据不同的时间周期采用不同的算法。 在日线图上,我们可能需要回看最近30根K线来计算最低价。但在月线图上,单根K线的最低价所包含的信息量就已大致相当。
- 除了单独使用
timeframe.ismonthly,我们也可以将它与其他时间周期变量结合起来。通过这种方式,我们就能为日线、周线和月线等不同周期实现特定的脚本逻辑。
timeframe.ismonthly 的特性
timeframe.ismonthly 用于判断图表是否为月线周期,但它并不指明每根K线具体包含多少个月。这个信息需要通过 timeframe.multiplier 变量来获取。当 timeframe.ismonthly 为 true 时,timeframe.multiplier 的值就代表了图表所使用的月数,例如在3月和6月周期图上,其值分别为 3 和 6。
要获取图表的具体周期和时间单位,我们使用 timeframe.period 变量。对于月线周期,该变量会返回一个包含字母 “M” 的字符串,例如 "3M" 代表3个月周期,"6M" 代表6个月周期。我们通常使用这个变量来请求后台数据,这些数据可以用于其他交易品种,但时间周期与当前图表保持一致。
timeframe.ismonthly 可用于指标(indicator)和策略(strategy)的开发。并且,此变量可以在任何时间周期上被调用。
尽管可以在 timeframe.ismonthly 后面使用历史操作符([]),但这毫无意义,因为该变量在每一根K线上的返回值都是恒定不变的。
值得注意的是,在 Pine Script 版本3及更早的版本中,timeframe.ismonthly 变量的名称是 ismonthly 。
总结
当脚本运行在以月为单位的时间周期上时(即1个月到12个月的图表),timeframe.ismonthly 变量会返回 true。
如果图表不是由月线数据构成的,timeframe.ismonthly 会返回 false。
timeframe.ismonthly 的返回值与图表类型无关,它同样适用于 Kagi 和 Point & Figure 等不常见的图表。










