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

Pine Script(35):Pine语言内置的格式说明符

#Pine Script入门教学

我们已经学会了如何用str.format()的占位符{0}, {1}来做“完形填空”。但默认填进去的数字和时间可能格式很乱,比如小数位太多,或者时间戳是一长串看不懂的数字。

为了让我们的输出更专业、更易读,我们需要给这些“填空”的内容进行“化妆”,这就是格式说明符的作用。

格式说明符是占位符里的一个可选部分,它告诉str.format()函数,应该把填进来的数据“打扮”成什么样子。我们来看一个例子:

// 用当前价格和日期生成买入指令
buyText = str.format("于 {0,date,short} 以 {1,number,currency} 价格买入 {2}",
     timenow, close, syminfo.ticker)
// 假设 timenow 是 2025年7月27日, close 是 278.45, syminfo.ticker 是 "AAPL"
// buyText 将是: "于 07/27/25 以 $278.45 价格买入 AAPL"

在这个例子里:

  • {0,date,short}date,short就是格式说明符,它把{0}号坑里的时间戳timenow,“打扮”成了短日期格式。
  • {1,number,currency}number,currency是格式说明符,它把{1}号坑里的收盘价close,“打扮”成了美元货币格式。
  • {2}:没有格式说明符,所以品种代码syminfo.ticker就以原始字符串的样子被填了进去。

格式说明符大全

PineScript为数字、日期和时间提供了丰富的预设格式说明符,足以应对绝大多数场景。下面就是完整的列表:

格式说明符 说明与示例
number 通用数字格式。小数部分默认最多显示三位,大数字使用千位分隔符(逗号)。
例如:289.10 → "289.1"; 0.324901 → "0.325"; 308573783 → "308,574,783"
number,integer 整数格式。数值会四舍五入到最接近的整数。千位以上使用分隔符。
例如:629.694 → "630"; 0.0342 → "0"; 7206409.223 → "7,206,409"
number,currency 货币格式 (美元)。数值四舍五入到两位小数,并前置$符号。千位以上使用分隔符。<br>例如:284.1763 → "$284.18"; 0.00088 → "$0.00"; 95209.7172243 → "$95,209.72"
number,percent 百分比格式。数值会先乘以100,然后四舍五入到最接近的整数,并后置%符号。<br>例如:221.337201 → "22,134%";0.002349 → "0%";-0.0123 → "-1%"
date 默认日期格式。显示为“缩写月份 日, 四位年份”。
例如:2013年12月13日 → "Dec 13, 2013"
date,short 短日期格式。显示为“月/日/两位年”。
例如:2013年12月13日 → "12/13/13"
date,medium 中等日期格式。与date相同。<br>例如:2013年12月13日 → "Dec 13, 2013"
date,long 长日期格式。显示完整的月份名称、日期和四位年份。
例如:2013年12月13日 → "December 13, 2013"
date,full 完整日期格式。显示星期几的全名、完整的月份名称、日期和四位年份。
例如:2013年12月13日 → "Friday, December 13, 2013"
time 默认时间格式。显示12小时制的小时、分钟、秒及AM/PM指示。
例如:13:33:47 → "1:33:47 PM"
time,short 短时间格式。显示12小时制的小时、分钟及AM/PM指示。
例如:13:36 → "1:36 PM"
time,medium 中等时间格式。与time相同。<br>例如:13:37:44 → "1:37:44 PM"
time,long 长时间格式。显示12小时制的小时、分钟、秒、AM/PM指示及缩写时区。
例如:UTC时间13:38:19 → "1:38:19 PM UTC"
time,full 完整时间格式。显示12小时制的小时、分钟、秒、AM/PM指示及完整时区名称。
例如:UTC时间13:38:50 → "1:38:50 PM Coordinated Universal Time"

注意:如果你不小心把一个普通的数字(比如收盘价269.10)用在了日期的格式说明符上(比如date,short),程序不会报错。它会把269.10当成是从1970年1月1日开始计算的毫秒数,然后给你返回一个1970年初的日期。所以一定要确保数据类型和格式说明符是匹配的。

学长再补充两点

  1. 如果你不指定任何格式说明符(只写{0}),程序会用一套默认规则来显示:整数会带千位分隔符,小数最多显示三位,时间戳会显示为一个巨大的整数(毫秒数),完全没法看。
  2. 花括号里的空格无所谓:为了让代码好看,你可以在占位符里面随便加空格,比如{0, number, currency}{0,number,currency}的效果是完全一样的。

实战案例:格式化并显示开盘跳空信息

下面的指标脚本演示了如何在实际场景中综合运用多种格式说明符。

它会计算开盘跳空的大小(金额和百分比),并在图表最后一个K线上通过标签显示这些信息以及跳空发生的日期。

//@version=6
indicator(title="str.format() 格式说明符案例", overlay=true)

if barstate.islast
    // 1. 计算开盘跳空的大小(金额)和百分比
    openGapSize = open - close[1]
    priceChange = (open - close[1]) / close[1]

    // 2. 使用str.format()
    labelText = str.format(
         // 模板字符串,用 + 连接多行
         "{0} 今日跳空 {1,number,currency} ({2,number,percent})\n发生于 {3,date,full}",
         // --- 下方是按顺序填充到 {0} - {3} 的参数列表 ---
         syminfo.ticker, // {0}: 品种代码
         openGapSize,    // {1}: 跳空金额
         priceChange,    // {2}: 跳空百分比
         time            // {3}: K线时间
       )

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

使用Pine脚本str.format格式说明符创建的EURUSD开盘跳空信息标签图。

最终图表上会显示一个标签,清晰地列出跳空金额、百分比以及详细日期,这些都得益于str.format()格式说明符的灵活应用。

总结

总结一下,格式说明符是str.format()函数的点睛之笔。它让我们不必满足于默认的、粗糙的文本输出,而是可以像设计师一样,为数字、日期和时间选择最合适的“皮肤”(如货币、百分比、短日期等)。Pine Script为数字、日期和时间分别提供了多种预定义的格式说明符,足以应对大部分需求。熟练掌握这些预设的格式,能极大提升你图表标签和警报信息的可读性和专业度。

赞(0)
未经允许不得转载:图道交易 » Pine Script(35):Pine语言内置的格式说明符
分享到

评论 抢沙发

登录

找回密码

注册