Pine Script v5 ticker.new标签仅展示标的代码实现及代码优化咨询
标签显示异常修复方案
你当前标签输出异常的原因是:ticker.new()返回的是包含会话、标的完整路径的复合对象,直接传入label.new()的text参数时会自动序列化输出完整对象内容,而非仅标的代码。
推荐最简单的实现方式:
// 单独声明标的代码常量,创建ticker和标签时复用 sym01 = "AAL" s01 = ticker.new("NASDAQ", sym01, session.extended) // 标签部分直接传入标的代码常量 L1= label.new(bar_index, 1, text=sym01, style=label.style_none, textcolor=color.new(color.white, 0), size=size.small) label.delete(L1[1])
代码优化建议
针对你32支标的的使用场景,现有代码可做如下优化:
- 用数组批量管理标的,消除重复代码
把所有标的代码存入字符串数组,通过循环统一完成ticker创建、security请求、绘图、标签生成的逻辑,无需为每个标的单独写一套代码,后续修改规则、增删标的都只需要修改数组内容即可,示例逻辑:// 定义所有标的代码列表,32个直接填入数组即可 var string[] symList = array.new_string("AAL", "AAPL", "MSFT" /* 剩余标的按需补充 */) var int symTotal = array.size(symList) l_width = 3 shape = plot.style_circles for idx = 0 to symTotal - 1 // 单个标的逻辑,循环执行所有标的 currentSym = array.get(symList, idx) tickerId = ticker.new("NASDAQ", currentSym, session.extended) barColor = request.security(tickerId, timeframe.period, screener_func()) // y坐标按索引偏移,避免所有标的绘图重叠 plot(idx + 1, color=barColor, style=shape, linewidth=l_width) // 生成对应标的标签 lab = label.new(bar_index, idx +1, text=currentSym, style=label.style_none, textcolor=color.white, size=size.small) label.delete(lab[1]) - 计算逻辑优化
现有screener_func内的5个EMA计算可改为用周期数组循环实现,减少重复代码;如果不需要每根K线都刷新标签,可仅在最后一根K线更新标签,降低脚本运算量。 - 显示逻辑优化
当前所有标的plot的y坐标均为1,32个标的会完全重叠,按索引偏移y坐标后可实现分行展示,可读性更强。
内容的提问来源于stack exchange,提问作者MRYR
相关产品推荐
相关产品推荐

