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

Pine Script(91):熟悉 input.session,日内交易的时段过滤器

#Pine Script入门教学

在做日内交易时,我们最关心的就是特定时间。

比如,你可能只想在美股的交易时段执行策略,而过滤掉盘前和盘后的信号。

input.session() 函数就是Pine Script提供的、用来在输入面板上创建时间区间选择器的工具

它的实战用途非常明确:

  • 指定策略只在某个时间区间内模拟交易
  • 让脚本只在特定时间内生成警报
  • 为图表的某个特定时段(如“伦敦盘”)添加背景色

input.session() 有两种形态:一种是让用户手动输入时间,另一种是提供一个预设好的时段下拉菜单(使用 options 参数)

input.session() 的“使用秘钥”

这是新手最容易卡住的地方,input.session() 函数本身,只返回一个时段字符串,比如 "0930-1600"

这个字符串本身不能直接用于 if 判断。你必须借助Pine Script的内置函数 time() 来激活它。

time() 函数能帮你判断当前K线是否落在了你指定的这个时段内,因此我们通常会封装一个辅助函数来重复使用:

// 检查当前K线是否发生在指定时段内
InSession(sessionTimes) =>
    not na(time(timeframe.period, sessionTimes))

拆解:

  • time(timeframe.period, sessionTimes):这就是秘钥。它会检查当前K线(timeframe.period)是否位于 sessionTimes 之内。
  • 如果在时段内,它会返回一个时间值;如果不在时段内,它会返回 na(空值)。
  • not na(...):我们用 not na() 来判断结果。如果结果不是空值(即 not natrue),就说明当前K线在时段内。

在后续的代码中,你就可以用 if InSession(你的输入变量) 来做各种判断了。

input.session() 的参数
  • defval(必填) 默认的时段字符串 。必须使用24小时制,如 "0930-1600"。对于隔夜时段(如从17:15到第二天17:00),你可以写 "1715-1700"
  • title(强烈建议) 输入项的名称,即显示在设置面板上的标签,如 "交易时间"
  • options(推荐) 提供一个固定的时段列表(字符串数组),让输入框变成一个下拉菜单。例如 options=["0930-1600", "0800-1200", "1300-1700"]
  • tooltip:鼠标悬停在“i”图标上时,显示的详细帮助文本
  • group:分组标题,用于组织多个相关的输入项
  • inline:内联ID,用于将多个输入项显示在同一行

重要提醒: 所有这些参数(如 defval, title 等)的值,都必须是常量(写死的值),不能是动态的变量

实战代码示例

基础示例:为交易时间上色

我们来实战一下前面讲的 InSession() 辅助函数,用它来给指定的交易时段添加背景色。

// 1. 定义
InSession(sessionTimes) =>
    not na(time(timeframe.period, sessionTimes))

// 2. 创建
tradeTimes = input.session("0700-1300", title="交易时间")

// 3. 应用
bgcolor(InSession(tradeTimes) ? color.new(color.orange, 80) : na)

这段代码会把 “07:00” 到 “13:00” 之间的所有K线都涂上80%透明度的橘色背景,非常直观

进阶示例:带分组和提示的隔夜时段
// 定义
stratSession = input.session("1715-1700", title="策略时段",
     group="其他设置",
     tooltip="指定策略在一天中的哪个时间生成交易。适用于周一到周日。")

这个输入:

  • 默认是一个从17:15到第二天17:00的隔夜时段
  • 在设置面板上,它会出现在一个名为“其他设置”的分组下面
  • 当用户鼠标悬停时,会显示 tooltip 里的详细说明
input.session() 的局限性
  1. 最大时长23:59: 一个时段输入的最大持续时间是23小时59分钟 ,如果你的时间范围需要跨越多天(比如回测窗口),请不要用它,改用两个 input.time() 来分别设置开始和结束日期。
  2. input.session() vs input.time() input.session() 是一个循环的时间区间(比如“每天的09:30到16:00”)。而 input.time() 是一个特定的时间点(比如“2020年12月7日下午2:35”)
  3. 不支持秒: 只能精确到分钟
  4. 24小时制: 必须使用24小时制,不支持AM/PM
完整示例脚本:只在特定时段显示均线

这个脚本将演示如何使用 input.session() 来控制绘图,让均线只在指定时段内显示。

//@version=6
indicator(title="交易时段输入示例", overlay=true)

// --- 1. 定义 ---
InSession(sessionTimes) =>
    not na(time(timeframe.period, sessionTimes))

// --- 2. 创建 ---
sessionTime   = input.session("0930-1200", title="交易时间")
fastAvgLength = input.int(20, title="快线平均周期")
slowAvgLength = input.int(80, title="慢线平均周期")

// --- 3. 计算 ---
fastAverage = ta.ema(close, fastAvgLength)
slowAverage = ta.sma(close, slowAvgLength)

// --- 4. 绘图 ---
plot(InSession(sessionTime) ? fastAverage : na, style=plot.style_linebr,
     color=color.orange, title="快线 EMA")
plot(InSession(sessionTime) ? slowAverage : na, style=plot.style_linebr,
     color=color.teal, title="慢线 SMA")

这个脚本的精髓在于 plot() 函数中的条件操作符 (?:) InSession(sessionTime) ? fastAverage : na 这行代码的意思是:“如果当前K线在 sessionTime 时段内,就绘制 fastAverage 的值;否则,就绘制 na(空值),即不画。” plot.style_linebr(带断点的线)这个样式是必须的,它能确保线条在 na 值出现时正确地中断,而不会强行连接起来

总结

input.session() 函数是日内交易策略和时间分析的利器。

  • 它只返回一个时段字符串(如 “0930-1600″)
  • 它必须配合 time() 函数(通常封装在 InSession() 辅助函数中)才能发挥作用
  • 善用它可以极大地优化你的策略逻辑和图表视觉效果。
赞(0)
未经允许不得转载:图道交易 » Pine Script(91):熟悉 input.session,日内交易的时段过滤器
分享到

评论 抢沙发

登录

找回密码

注册