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

Pine Script(37):自定义格式化时间和日期

#Pine Script入门教学

前面我们学习了str.format()中方便快捷的预设日期/时间格式(如date,short)。但你可能会发现,这些预设格式大多是美式风格(比如月/日/年),不一定符合我们的阅读习惯。

如果我们想实现年-月-日 时:分这种完全自定义的格式,应该怎么办呢?答案就是开启str.format()的终极“专业模式”——**使用模式字母 (Pattern Letters)**来自定义时间的显示格式。学会它,你就能像拼乐高一样,随心所欲地组合出任何你想要的时间文本。

要使用自定义模板,你需要在占位符里,紧跟在datetime说明符后面(用哪个都行,都是告诉程序这是个时间戳),写上你用“模式字母”组合出来的模板字符串。它的结构是:{索引, date, '你的自定义模板'}

例如:barTimeText = str.format("K线开盘时间: {0,time,HH:mm:ss}", time) 这里的HH:mm:ss就是由模式字母和分隔符组成的自定义模板。

时间格式大全

要拼装出你想要的时间格式,你首先要认识模式字母这个“零件库”。每个字母或字母组合,都代表着时间的一个特定部分:

模式字母 含义 示例 (假设时间为 2023年9月8日 星期五 14:05:07.123 UTC)
年份 (Year)
y, yyyy 四位年份 2023
yy 两位年份 23
月份 (Month)
M 月份 (1-12) 9
MM 两位月份 (01-12),不足补零 09
MMM 月份缩写 (Jan, Feb…) Sep
MMMM 月份全称 (January, February…) September
日期 (Day)
d 月份中的日期 (1-31) 8
dd 两位月份中的日期 (01-31),不足补零 08
星期 (Day of Week)
E 星期缩写 (Mon, Tue…) Fri
EEEE 星期全称 (Monday, Tuesday…) Friday
小时 (Hour)
H, k 24小时制 (0-23 或 1-24) 14
HH, kk 24小时制,两位,不足补零 14
K 12小时制 (0-11) 2 (代表下午2点)
KK 12小时制,两位 (00-11) 02
h 12小时制 (1-12) 2
hh 12小时制,两位 (01-12) 02
分钟 (Minute)
m, mm 分钟 (0-59),mm带前导零 505
秒 (Second)
s, ss 秒 (0-59),ss带前导零 707
SSS 三位毫秒 (000-999),不足补零 123
AM/PM
a 上午/下午标记 (AM/PM) PM
时区 (Timezone)
z 时区缩写名称 UTC
zzzz 时区完整名称 Coordinated Universal Time
Z, X 时区偏移量 +0000Z

注意:这些模式字母不仅适用于str.format(),也同样适用于我们后面要讲的str.format_time()函数。如果想在模板里显示字母本身(比如字母’H’),需要用单引号' '把它括起来转义。

常用模式字母组合示例

认识了零件,我们来看看一些常用的“设计蓝图”(组合方式),这能帮你快速上手:

模式字母模板 说明 示例输出 (假设时间为下午2:05:07)
K:mm a 12小时制小时,带前导零的分钟,AM/PM标记。 2:05 PM
HH:mm 24小时制小时(不足两位补零),带前导零的分钟。 14:05
HH:mm:ss 24小时制小时,分钟,秒(均带前导零)。 14:05:07
HH:mm:ss.SSS 在上一条基础上,增加三位毫秒。 14:05:07.123
M/d/yy 美式短日期:月/日/两位年。 6/5/25 (假设2025年6月5日)
yyyy-MM-dd 中式常用日期:四位年-两位月-两位日。 2025-06-05
实战案例:综合运用模式字母创建信息标签

下面的指标脚本演示了如何在实际应用中,通过str.format()的模式字母,将K线的开盘时间格式化为日内时间和日期,并将这些信息与品种代码、K线范围(以tick为单位)一同显示在图表的最后一个K线的标签上。

//@version=6
indicator(title="str.format() 模式字母示例", overlay=true)

if barstate.islast
    // 1. 计算当前K线的波幅
    tickRange = (high - low) / syminfo.mintick

    // 2. 使用str.format()和模式字母
    labelText = str.format(
         // 模板字符串,用 \n 换行
         "{0}\n时间: {1,time,H:mm:ss}\n日期: {1,date,E d-M-yy}\n" +
         "波幅: {2,number} ticks",
         // --- 下方是按顺序填充的参数列表 ---
         syminfo.ticker, // -> {0}: 品种代码
         time,           // -> {1}: K线开盘时间
         tickRange       // -> {2}: K线波幅
       )

    // 3. 创建标签
    label.new(bar_index + 1, hl2, text=labelText,
         style=label.style_label_left, color=color.new(color.teal, 10),
         textcolor=color.white, size=size.large)

最终,图表上的标签会清晰地展示经过精确格式化的时间、日期以及K线波幅信息。

一个使用Pine脚本str.format模式字母将时间自定义格式化为'H:mm:ss'和'E d-M-yy'的NZDUSD图表示例。

总结

总结一下,模式字母是str.format()函数在处理时间格式化时的终极武器。它让你彻底摆脱预设格式的束缚,可以随心所欲地创造出任何符合你需求、符合你阅读习惯的日期时间文本。模式字母需要放置在占位符中,并且位于timedate这类预定义格式说明符之后(例如 {0,time,HH:mm})。当你需要在标签或警报中,以一种高度自定义的方式展示时间时,模式字母就是你的不二之选。

赞(0)
未经允许不得转载:图道交易 » Pine Script(37):自定义格式化时间和日期
分享到

评论 抢沙发

登录

找回密码

注册