如何在Pine Script中比较月份?月度图表下识别月份及收益分析
Pine Script 月度图表月份识别与收益标签实现
基础问题解决:正确识别当前K线所属月份
你之前的代码用month(time[0])提取月份本身是可行的,失败原因大概率是标签位置偏移过大(x + 10在月度图中可能超出可视范围)。修正后的极简代码如下:
//@version=5 indicator("月度月份标记", overlay=true) if barstate.islast curr_month = month(time[0]) // 直接在当前K线收盘价位置显示月份 label.new(bar_index, close, str.tostring(curr_month), color=color.blue, textcolor=color.white)
在月度图表中,month(time[0])会准确返回当前K线对应月份的数字(1代表1月,以此类推),完全满足月份判断需求。
进阶实现:统计各月份平均收益并标注正负
要实现识别平均收益正负的月份并展示,需要按月份聚合收益数据,再生成统计标签:
//@version=5 indicator("月度收益统计", overlay=true) // 计算单月收益(当前月收盘价 - 上月收盘价) monthly_return = close - close[1] // 初始化数组存储各月份累计收益和K线数量(索引0对应1月,11对应12月) var float[] total_return_per_month = array.new_float(12, 0) var int[] bar_count_per_month = array.new_int(12, 0) // 更新当前月份的统计数据 curr_month_idx = month(time[0]) - 1 array.set(total_return_per_month, curr_month_idx, array.get(total_return_per_month, curr_month_idx) + monthly_return) array.set(bar_count_per_month, curr_month_idx, array.get(bar_count_per_month, curr_month_idx) + 1) // 在最后一根K线生成统计标签 if barstate.islast // 创建固定位置的统计标签 stats_label = label.new(bar_index, high * 1.03, "", color=color.gray, textcolor=color.white, style=label.style_label_down) stats_content = "" // 遍历所有月份生成文本 for i = 0 to 11 month_num = i + 1 avg_return = array.get(total_return_per_month, i) / array.get(bar_count_per_month, i) // 用星号强调正收益 return_text = avg_return > 0 ? "*" + str.tostring(avg_return, "#.##") + "*" : str.tostring(avg_return, "#.##") stats_content := stats_content + str.tostring(month_num) + "月平均收益: " + return_text + "\n" label.set_text(stats_label, stats_content)
核心要点
month(time[0])是Pine Script中提取月份的标准方法,在任何时间周期(包括月度)都有效- 用数组按月份聚合收益数据,能高效统计各月份的平均收益
- 通过
*标记正收益,实现视觉上的强调效果
内容的提问来源于stack exchange,提问作者John554
相关产品推荐
相关产品推荐

