Pine Script如何动态设置固定open_time变量 无需每日手动修改
Pine Script 动态生成固定日期时间值实现方案
Pine Script 中input.time的默认值仅支持传入常量,timestamp()函数也不支持接收动态变量作为入参,因此无法直接通过timenow动态生成输入框的默认值,可通过以下两种方案实现需求:
方案1:全自动计算(无需手动调整,值固定不随K线变动)
直接通过时间框架函数计算前一日指定固定时间,不需要设置输入框,值一旦生成当日不会变化:
//@version=5 indicator("Day trade MA", overlay=true) // 自定义目标时间参数,可按需修改 target_hour = 0 // 目标小时(对应+0300时区) target_minute = 0 // 目标分钟 offset_day = 1 // 取当前日期前N天,填1对应前一日 // 计算前一日0点的基准时间 prev_day_start = ta.valuewhen(ta.change(time("D")), time, offset_day) // 叠加固定时分偏移得到最终open_time,单位为毫秒 open_time = prev_day_start + (target_hour * 60 + target_minute) * 60 * 1000 // 测试输出验证时间是否正确 plotchar(open_time, "open_time", "⏰", location.belowbar, size = size.small)
说明:该方案计算出的open_time是固定值,只会在每日开盘时更新一次,不会随单根K线滚动变化,完全适配日内交易场景。如果使用Pine Script v4版本,将代码中的ta.valuewhen改为valuewhen,indicator改为study即可正常运行。
方案2:支持手动覆盖的混合方案
如果需要保留手动调整时间的能力,可同时保留输入框,默认优先使用自动计算的时间,需要手动调整时切换即可:
//@version=5 indicator("Day trade MA", overlay=true) // 开关设置 use_auto_time = input.bool(true, "自动使用前一日目标时间") manual_open_time = input.time(timestamp("10 Jul 2021 00:00 +0300"), "手动指定时间", step=1) // 自定义目标时间参数 target_hour = 0 target_minute = 0 offset_day = 1 // 自动计算时间 prev_day_start = ta.valuewhen(ta.change(time("D")), time, offset_day) auto_open_time = prev_day_start + (target_hour * 60 + target_minute) * 60 * 1000 // 最终取值 open_time = use_auto_time ? auto_open_time : manual_open_time plotchar(open_time, "open_time", "⏰", location.belowbar, size = size.small)
说明:默认开启自动计算时不需要手动修改任何参数,需要临时指定特殊时间时,关闭自动开关即可使用手动输入的时间值。
内容的提问来源于stack exchange,提问作者DennisLi
相关产品推荐
相关产品推荐

