前面我们学习了str.format()
中方便快捷的预设日期/时间格式(如date,short
)。但你可能会发现,这些预设格式大多是美式风格(比如月/日/年),不一定符合我们的阅读习惯。
如果我们想实现年-月-日 时:分
这种完全自定义的格式,应该怎么办呢?答案就是开启str.format()
的终极“专业模式”——**使用模式字母 (Pattern Letters)**来自定义时间的显示格式。学会它,你就能像拼乐高一样,随心所欲地组合出任何你想要的时间文本。
要使用自定义模板,你需要在占位符里,紧跟在date
或time
说明符后面(用哪个都行,都是告诉程序这是个时间戳),写上你用“模式字母”组合出来的模板字符串。它的结构是:{索引, date, '你的自定义模板'}
。
例如:barTimeText = str.format("K线开盘时间: {0,time,HH:mm:ss}", time)
这里的HH:mm:ss
就是由模式字母和分隔符组成的自定义模板。
时间格式大全
要拼装出你想要的时间格式,你首先要认识模式字母这个“零件库”。每个字母或字母组合,都代表着时间的一个特定部分:
注意:这些模式字母不仅适用于str.format()
,也同样适用于我们后面要讲的str.format_time()
函数。如果想在模板里显示字母本身(比如字母’H’),需要用单引号' '
把它括起来转义。
常用模式字母组合示例
认识了零件,我们来看看一些常用的“设计蓝图”(组合方式),这能帮你快速上手:
实战案例:综合运用模式字母创建信息标签
下面的指标脚本演示了如何在实际应用中,通过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线波幅信息。
总结
总结一下,模式字母是str.format()
函数在处理时间格式化时的终极武器。它让你彻底摆脱预设格式的束缚,可以随心所欲地创造出任何符合你需求、符合你阅读习惯的日期时间文本。模式字母需要放置在占位符中,并且位于time
或date
这类预定义格式说明符之后(例如 {0,time,HH:mm}
)。当你需要在标签或警报中,以一种高度自定义的方式展示时间时,模式字母就是你的不二之选。