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

Pine Script(33):时间转字符串函数 - str.format_time()

#Pine Script入门教学

在量化交易中,时间就是一切。但程序眼里的时间(一个从1970年开始计算的巨大毫秒数,我们称之为“时间戳”)和我们人类习惯的年月日时分秒完全是两码事。更头疼的是,不同交易所还处于不同的时区。

如何把难懂的时间戳,转换成我们想要看的、特定时区的具体时间呢?PineScript为此提供了一个专门的str.format_time()函数。它的两大绝技就是:精确的时间格式化和智能的时区转换。

str.format_time()函数

它的基本语法是:str.format_time(time_value, format, timezone)

  • time_value (必需):一个PineScript的时间戳值,比如当前K线的开盘时间time
  • format (可选):一个“格式模板”字符串,用来规定最终文本的样子。
  • timezone (可选):你希望看到的目标时区。这是这个函数最强大的功能。

它的第三个参数timezone是它的核心武器。你可以用两种方式告诉它你想看哪个时区的时间:

  1. 直接写UTC+8(东八区)或UTC-5(美东冬令时)。这种方法简单,但不会自动处理夏令时。
  2. 使用标准的地理名称,比如Asia/ShanghaiAmerica/New_York。强烈推荐这种方式,因为它会自动帮你处理烦人的夏令时问题。

自定义时间格式

要自定义时间格式,你需要学会使用下面这些“模式字母”作为“密码”,来组合成你的format模板字符串:

模式字母 说明
y, yy, yyyy 年(四位或两位)
M, MM, MMM 月(数字或缩写)
d, dd
E 星期几的缩写 (如 Mon)
a 上午/下午标记 (AM/PM)
H, HH 24小时制的小时 (0-23)
K, KK 12小时制的小时 (0-11)
m, mm 分钟 (0-59)
s, ss 秒 (0-59)
S, SSS 毫秒
z 时区的缩写名称 (如 EST, PST)
Z 相对于UTC的时区偏移量 (如 +0800)

实战案例:创建一个跨时区的数据看板

下面的指标脚本完美地展示了str.format_time()的综合能力。它会计算图表上从第一根K线到最后一根K线的价格变动,并把开始和结束的时间,都统一转换成我们指定的“欧洲/阿姆斯特丹”时区的时间来显示。

//@version=6
indicator(title="str.format_time() 案例", overlay=true)

// 1. var确保变量只在脚本加载时初始化一次
var firstBarTime = time
var firstPrice = open

// 2. 执行逻辑
if barstate.islast
    // 计算百分比
    percentChange = (close - firstPrice) / firstPrice

    // 3. 使用 str.format_time() 对“首末”时间进行格式化和时区转换
    targetTimezone = "Europe/Amsterdam" // 设定目标时区
    timeFormat = "HH:mm dd-MM-yyyy z"  // 设定我们想要的时间格式
    firstTimeFormatted = str.format_time(firstBarTime, timeFormat, targetTimezone)
    lastTimeFormatted  = str.format_time(time_close,   timeFormat, targetTimezone)

    // 4. 使用 str.format() 将所有信息整合到一个字符串中
    labelText = str.format(
         "{0}\n首个K线: {1,number,currency} ({2})\n" +
         "最新K线: {3,number,currency} ({4})\n价格变动: {5,number,percent}",
         syminfo.description,    // {0} - 品种描述
         firstPrice,             // {1} - 第一个K线的价格
         firstTimeFormatted,     // {2} - 格式化后的第一个K线的时间
         close,                  // {3} - 最新收盘价
         lastTimeFormatted,      // {4} - 格式化后的最新K线的时间
         percentChange           // {5} - 价格变动百分比
    )
    // 5. 创建标签
    label.new(bar_index, hl2, text=labelText,
         style=label.style_label_left, color=color.new(color.teal, 15),
         textcolor=color.white, size=size.large)

将此指标添加到图表后,会在图表最右侧显示一个信息标签,其中包含了经过时区转换和特定格式化的首末K线时间,以及相关的价格数据。值得注意的是,由于我们使用了IANA时区名称,函数会自动处理夏令时的调整,比如五月的日期会显示CEST(欧洲中部夏令时间),而十一月则会显示CET(欧洲中部时间)。

总结

总结一下,str.format_time()是你处理所有与时间相关的文本显示问题的终极工具。我们可以通过一个包含特定“模式字母”的模板字符串,来精确控制时间值的显示格式。该函数最重要的功能是时区转换,当提供目标时区参数时,它会将时间值转换为指定时区的时间。使用IANA标准的地理时区名称(如"America/New_York"),函数会自动处理夏令时,最后str.format_time()的输出结果(一个字符串),常常会作为str.format()的参数,来构建包含更丰富信息的最终文本。

赞(0)
未经允许不得转载:图道交易 » Pine Script(33):时间转字符串函数 - str.format_time()
分享到

评论 抢沙发

登录

找回密码

注册