上一节我们学习了str.format()
中那些方便快捷的预设格式(如number,currency
)。但如果你想实现更精细的效果,比如“强制保留4位小数”或者“显示带千位符的整数”,这些预设格式就不够用了。
这时,我们就需要进入str.format()
的“专业模式”——使用模式占位符来自定义数字的显示格式。这就像从用相机的自动挡,切换到了手动挡,虽然需要多了解几个参数,但你能完全控制最终的成像效果。
专业模式的语法
要使用自定义模板,你需要在占位符里,紧跟在number
说明符后面,写上你用“模式占位符”组合出来的模板字符串。它的结构是:{索引, number, 你的自定义模板}
。
例如:plotLabel = str.format("当前收盘价: {0,number,0.0}", close)
这里的0.0
就是由模式占位符组成的自定义模板,它规定了输出的数字必须带有一位小数。
模式占位符大全
要进入“专业模式”,你首先要认识这几个核心的“模式占位符”,它们是构成你自定义模板的“零件”:
注意:如果想在模板里显示0
、#
这些特殊字符本身,而不是让它们作为占位符,需要用单引号' '
把它们括起来进行转义。
常用组合示例
单独看每个“零件”可能有点抽象,但把它们组合起来,就能实现各种强大的效果。下面是一些最常用的组合,建议你收藏起来随时查阅:
实战案例:综合运用模式占位符创建信息标签
下面的指标脚本演示了如何在实际应用中,通过str.format()
的模式占位符,将收盘价、价格变动百分比和成交量格式化后,显示在图表的最后一个K线的标签上。
//@version=6
indicator(title="str.format() 模式占位符示例", overlay=true)
if barstate.islast
// 1. 计算价格较上一根K线的变动百分比
priceChange = (close - close[1]) / close[1]
// 2. 使用str.format()和模式占位符
barText = str.format(
// 模板字符串,用 \n 换行
"收盘价: {0,number,$#,##0.00}\n" +
"涨跌幅: {1,number,0.0%}\n" +
"成交量: {2,number,#,###}",
// --- 下方是按顺序填充的参数列表 ---
close, // -> {0}: 收盘价。'$#,##0.00' 模板表示:带'$',千位符,强制2位小数
priceChange, // -> {1}: 涨跌幅。'0.0%' 模板表示:乘以100,保留1位小数,带'%'
volume // -> {2}: 成交量。'#,###' 模板表示:整数,带千位符
)
// 3. 创建标签
label.new(bar_index, high, text=barText,
color=color.new(color.navy, 15), textcolor=color.white,
size=size.large, style=label.style_label_left)
通过模式占位符的灵活运用,我们可以使输出的文本信息既准确又易于阅读。
总结
总结一下,模式占位符是str.format()
函数的终极武器。它让你从格式的“使用者”变成了“设计者”,它需要放置在占位符中,并且位于number
这个预定义格式说明符之后(例如 {0,number,0.00}
)。通过组合0
, #
, .
, ,
, %
等几个简单的符号,你就能创造出任何你想要的数字文本格式,让你的图表标签和警报信息,无论在内容上还是形式上,都达到专业水准。