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

Pine Script v5需求:绘制未被穿越的前收盘价水平线并向右延伸

解决Pine Script绘制多条未被穿越前收盘价水平线的问题

需求说明

  • 在任意时间周期下,绘制**前收盘价(上一根K线收盘价)**的水平线并向右延伸
  • 水平线需保留至被价格穿越为止,所有未被穿越的线都要显示

原代码问题分析

  1. 未定义pdc、dpdc、offset变量,直接导致代码报错
  2. 使用plot函数只能绘制单条线,无法实现多条动态水平线的需求
  3. 价格穿越的判断逻辑错误,仅维护单个价格变量,无法追踪多条水平线的状态

修正后的代码

//@version=5
indicator("未被穿越的前收盘价水平线", overlay=true)

// 存储所有未被穿越的水平线对象
var line[] pdc_lines = array.new_line()

// 获取上一根K线的收盘价(前收盘价)
prev_close = close[1]

// 进入新K线时,创建新的前收盘价水平线
if barstate.isnew
    // 在当前K线起点绘制水平线,初始延伸至当前K线位置
    new_line = line.new(bar_index - 1, prev_close, bar_index, prev_close, 
                       color=color.new(#c8055a, 40), width=2)
    array.push(pdc_lines, new_line)

// 遍历所有水平线,检查是否被价格穿越,未穿越则延长线
var int i = 0
while i < array.size(pdc_lines)
    current_line = array.get(pdc_lines, i)
    line_price = line.get_y1(current_line)
    // 判断当前K线是否上下穿越水平线
    crossed = (close > line_price and open < line_price) or (close < line_price and open > line_price)
    if crossed
        line.delete(current_line)
        array.remove(pdc_lines, i)
    else
        // 未穿越则将线延长至当前K线
        line.set_x2(current_line, bar_index)
        i += 1

代码关键逻辑说明

  • 用var line[]数组存储所有水平线对象,实现多条线的状态管理
  • 通过barstate.isnew判断新K线生成时机,创建对应前收盘价的水平线
  • 遍历数组内的每条线:
    • 若当前K线价格穿越水平线,则删除该线并从数组移除
    • 未穿越则调用line.set_x2将线延长至当前K线位置,实现向右延伸效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:45:55