You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PineScript技术求助:添加线宽线型设置及线条跨期延伸功能

解决方案代码

以下是整合了你需求的完整PineScript v5代码,包含线条样式/宽度自定义、周期结束后延伸至价格穿越的开关:

//@version=5
indicator("周期开盘线(带延伸与样式自定义)", overlay=true, shorttitle="Period Opens")

// 1. 输入选项设置
line_width = input.int(2, "线条宽度", minval=1, maxval=5, tooltip="调整线条的粗细")
line_style = input.string("Solid", "线条样式", options=["Solid", "Dotted", "Dashed", "Arrowed"], tooltip="选择线条的显示样式")
extend_until_cross = input.bool(true, "延伸至价格穿越", tooltip="开启后,周期结束后开盘线会保持显示,直到价格向上/向下穿越该线")

// 转换输入样式为Pine内置的line.style枚举值
style_enum = switch line_style
    "Solid" => line.style_solid
    "Dotted" => line.style_dotted
    "Dashed" => line.style_dashed
    "Arrowed" => line.style_arrowed

// 2. 获取各周期开盘价
day_open = ta.open[ta.barssince(ta.change(time("D")))]
week_open = ta.open[ta.barssince(ta.change(time("W")))]
month_open = ta.open[ta.barssince(ta.change(time("M")))]

// 3. 跟踪价格穿越状态(用于延伸逻辑)
// 日开盘线跟踪
var float last_day_open = na
var bool day_crossed = true
if ta.change(time("D"))
    last_day_open := day_open
    day_crossed := false
else if extend_until_cross and not day_crossed
    day_crossed := ta.crossover(close, last_day_open) or ta.crossunder(close, last_day_open)

// 周开盘线跟踪
var float last_week_open = na
var bool week_crossed = true
if ta.change(time("W"))
    last_week_open := week_open
    week_crossed := false
else if extend_until_cross and not week_crossed
    week_crossed := ta.crossover(close, last_week_open) or ta.crossunder(close, last_week_open)

// 月开盘线跟踪
var float last_month_open = na
var bool month_crossed = true
if ta.change(time("M"))
    last_month_open := month_open
    month_crossed := false
else if extend_until_cross and not month_crossed
    month_crossed := ta.crossover(close, last_month_open) or ta.crossunder(close, last_month_open)

// 4. 绘制线条逻辑
// 日开盘线
var line day_line = na
if ta.change(time("D")) or (extend_until_cross and not day_crossed)
    if na(day_line) or ta.change(time("D"))
        day_line := line.new(bar_index, day_open, bar_index + 1, day_open, color=color.blue, width=line_width, style=style_enum)
    else
        line.set_x2(day_line, bar_index)
        line.set_y2(day_line, last_day_open)
else
    line.delete(day_line)
    day_line := na

// 周开盘线
var line week_line = na
if ta.change(time("W")) or (extend_until_cross and not week_crossed)
    if na(week_line) or ta.change(time("W"))
        week_line := line.new(bar_index, week_open, bar_index + 1, week_open, color=color.orange, width=line_width, style=style_enum)
    else
        line.set_x2(week_line, bar_index)
        line.set_y2(week_line, last_week_open)
else
    line.delete(week_line)
    week_line := na

// 月开盘线
var line month_line = na
if ta.change(time("M")) or (extend_until_cross and not month_crossed)
    if na(month_line) or ta.change(time("M"))
        month_line := line.new(bar_index, month_open, bar_index + 1, month_open, color=color.red, width=line_width, style=style_enum)
    else
        line.set_x2(month_line, bar_index)
        line.set_y2(month_line, last_month_open)
else
    line.delete(month_line)
    month_line := na
关键功能说明
  • 线条样式与宽度自定义:通过input.int和input.string创建交互控件,使用switch将用户选择的样式字符串转换为PineScript内置的line.style枚举值,直接应用到线条绘制参数中。
  • 延伸至价格穿越:用var变量持久化存储上一周期的开盘价和穿越状态,周期切换时重置状态;若开启延伸且价格未穿越,则持续更新线条的终点坐标,直到价格向上/向下穿过该开盘线为止。
  • 性能优化:仅在周期切换或需要延伸时更新线条,避免无意义计算;使用line.delete清理过期线条,防止内存占用过高。

内容的提问来源于stack exchange,提问作者hushedapple

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:23:27