如何在Pine Script中实现获取每月第一根周K线性质的函数?
在Pine Script中获取每月第一根周K线
你提供的weekOfMonth()函数尝试通过年度周数变化计算当月周数,但逻辑存在局限(比如固定按4周划分月份,不符合实际月份周数差异)。要准确识别每月第一根周K线,我们可以通过判断周周期的月份切换来实现,以下是两种可靠方案:
方案1:周线周期下直接判断
在周线图表中,只需检查当前K线的月份是否与前一根周K线的月份不同,即可确定是否为当月第一根周K线:
//@version=5 indicator("每月第一根周K线识别", overlay=true) // 定义函数:返回是否为当月第一根周K线 isFirstWeekOfMonth() => currentMonth = month(time) prevMonth = month(time[1]) // 当前K线月份与前一根不同,即为当月第一根周K线 bool result = currentMonth != prevMonth // 月线周期下返回na,避免无效判断 timeframe.ismonthly ? na : result // 用背景色标记第一根周K线 bgcolor(isFirstWeekOfMonth() ? color.new(color.green, 90) : na)
方案2:跨周期兼容(支持日线/小时线等)
如果需要在非周线周期(比如日线)中,判断当前K线所属的周是否是当月第一周,可以通过周起始时间的月份变化来判断:
//@version=5 indicator("跨周期识别每月第一根周K线", overlay=true) // 定义函数:判断当前K线所属周是否为当月第一周 isFirstWeekOfMonth() => if timeframe.ismonthly na else // 获取当前K线所在周的起始时间 weekStart = ta.time("W") // 获取该周起始时间的月份 weekStartMonth = month(weekStart) // 获取上一周起始时间的月份 prevWeekStartMonth = month(ta.time("W")[1]) // 周起始月份切换时,即为当月第一周 weekStartMonth != prevWeekStartMonth // 标记对应周期的K线 bgcolor(isFirstWeekOfMonth() ? color.new(color.blue, 90) : na)
说明
- 方案1逻辑简洁高效,仅适用于周线周期。
- 方案2支持任意周期,通过
ta.time("W")定位周起始时间,确保判断的准确性。
内容的提问来源于stack exchange,提问作者Niainarisoa
相关产品推荐
相关产品推荐

