返回

TradingView自定义指标显示指南:配置详解与常见问题解决

javascript

TradingView图表自定义指标显示指南

自定义指标为TradingView图表提供了更强大的分析功能。在实现过程中,正确配置各项参数至关重要,确保指标准确呈现。

问题分析

常见问题之一,是自定义指标虽然代码实现正确,但未能如期在图表上显示。这通常与 metainfo 中的 id 值有关,其可能没有与 TradingView 的服务器进行适当的匹配。另外,指标逻辑中的潜在问题或配置的偏差也可能导致无法正常显示。

解决方案:深入metainfo 配置

为了让TradingView正确识别并加载自定义指标,需要细致检查 metainfo 参数。 其中,id 参数是关键,其必须满足特定格式的要求,通常使用 @ 分隔标识符,例如 "custom-moving-average@my_username" 。另外,isCustomIndicator 属性应当设置为 true

代码示例:

  metainfo: {
    _metainfoVersion: 51,
    id: 'custom-moving-average@my_username',
    name: 'Custom Moving Average',
    description: 'Custom Moving Average',
    shortDescription: 'CMA',
    is_hidden_study: false,
    is_price_study: true,
    isCustomIndicator: true, // 重要
    plots: [{ id: 'plot_0', type: 'line' }],
    defaults: {
      styles: {
          plot_0: {
            linestyle: 0,
            linewidth: 2,
            plottype: 2,
            trackPrice: true,
            color: '#FF0000'
            }
        },
      precision: 2,
      inputs: {
        length: 14
      }
    },
    inputs: [
      {
        id: 'length',
        name: 'Length',
        defval: 14,
        type: 'integer',
        min: 1,
        max: 100
      }
    ]
}

操作步骤:

  1. 仔细核查 metainfo 部分的代码。
  2. 修改 id 参数值,使用自定义且唯一性的字符串,例如 "your-indicator-name@your-username" ,替换示例中的'custom-moving-average@my_username'
  3. 确认 isCustomIndicator 被设置为 true
  4. 将修改后的代码集成到你的TradingView图表配置中, 确保配置逻辑正确无误。

解决方案:优化指标的逻辑和参数配置

即使metainfo 参数设置正确, 指标仍然可能因为逻辑错误或者不正确的参数设置导致无法显示。
特别是对于涉及数据计算的指标,仔细检查算法的实现细节非常关键。

代码示例:

  constructor: function() {
      this.init = function(context, inputCallback) {
          this.context = context;
          this.input = inputCallback;
          this.length = this.input('length', 14);
          this.prices = [];
      };
      
      this.main = function(context, inputCallback) {
          this.context = context;
          this.input = inputCallback;
          
          var close = PineJS.Std.close(this.context);
           // 使用 new_var() 返回的context内部对象替代普通变量以跟踪值的变化
          var price  = this.context.new_var(close);
          this.prices.push(price);

          if (this.prices.length > this.length) {
            this.prices.shift(); 
          }

          var sum = this.prices.reduce((acc, val) => acc + val, 0);
          var ma = sum / this.prices.length;
          
          //确保main函数返回值是一个数组。
          return [ma];
      };
  }

操作步骤:

  1. 细致地审查 constructormain 函数的实现。 确保数据的累加,窗口的维护,计算方式都符合要求。
  2. 仔细检查并确认, main 函数始终返回包含计算结果的数组,并且数组中元素数量要与metainfo定义的 plots 数组中的plot数量一致。
  3. 核对指标的初始化 (init函数)过程, 特别是在有输入参数的情况下,确保对输入参数进行有效处理。

附加提示

  • 检查控制台错误: 浏览器控制台能够显示有关代码的报错信息,能够帮助定位具体问题, 应当养成习惯, 在解决问题的时候积极利用。
  • 调试输出: 利用 console.log() 输出中间变量的值能够有效辅助调试指标逻辑。
  • 避免重复计算: 使用PineJS标准库的功能可以减少代码量,提高代码执行效率。 例如可以使用PineJS.Std.sma计算移动平均值。
  • 安全提示: 请确保指标代码的安全,避免恶意脚本注入。 建议在将自定义指标加入图表前进行彻底的代码审查。