• 创建自定义研究
    • 如何显示您的数据作为一个指标

    创建自定义研究


    如何显示您的数据作为一个指标

    如果您想要在图表上显示一些数据,例如指标,则此处为食用说明。

    请遵循以下几个步骤:

    1、 为您的数据创建一个新的ticker,并设置您的服务器返回此ticker有效的SymbolInfo。
    2、 设置服务器以返回此ticker的有效历史数据。
    3、 使用以下指标模板并填写所有占位符(placeholder)的值:名称,说明和代码。 如果需要,还可以修改绘图的默认样式。

    1. {
    2. // 将<study name>替换为您的研究名称
    3. // 它将由图表库内部使用
    4. name: "<study name>",
    5. metainfo: {
    6. "_metainfoVersion": 40,
    7. "id": "<study name>@tv-basicstudies-1",
    8. "scriptIdPart": "",
    9. "name": "<study name>",
    10. // 此说明将显示在指标窗口中
    11. // 当调用createStudy方法时,它也被用作“name”参数
    12. "description": "<study description>",
    13. // 该描述将显示在图表上
    14. "shortDescription": "<short study description>",
    15. "is_hidden_study": true,
    16. "is_price_study": true,
    17. "isCustomIndicator": true,
    18. "plots": [{"id": "plot_0", "type": "line"}],
    19. "defaults": {
    20. "styles": {
    21. "plot_0": {
    22. "linestyle": 0,
    23. "visible": true,
    24. // 绘图线宽度
    25. "linewidth": 2,
    26. // 绘制类型:
    27. // 1 - 直方图
    28. // 2 - 线形图
    29. // 3 - 十字指针
    30. // 4 - 山形图
    31. // 5 - 柱状图
    32. // 6 - 圆圈图
    33. // 7 - 中断线
    34. // 8 - 中断区块
    35. "plottype": 2,
    36. // 显示价格线?
    37. "trackPrice": false,
    38. // 绘制透明度,百分比。
    39. "transparency": 40,
    40. // 以#RRGGBB格式绘制颜色
    41. "color": "#0000FF"
    42. }
    43. },
    44. // 研究输出值的精度
    45. // (小数点后的位数)。
    46. "precision": 2,
    47. "inputs": {}
    48. },
    49. "styles": {
    50. "plot_0": {
    51. // 输出的名字将在样式窗口显示
    52. "title": "-- output name --",
    53. "histogramBase": 0,
    54. }
    55. },
    56. "inputs": [],
    57. },
    58. constructor: function() {
    59. this.init = function(context, inputCallback) {
    60. this._context = context;
    61. this._input = inputCallback;
    62. // 定义要绘制的商品。
    63. // 商品应该是一个字符串。
    64. // 您可以使用PineJS.Std.ticker(this._context)获取所选商品的代码。
    65. // 例,
    66. // var symbol = "AAPL";
    67. // var symbol = "#EQUITY";
    68. // var symbol = PineJS.Std.ticker(this._context) + "#TEST";
    69. var symbol = "<TICKER>";
    70. this._context.new_sym(symbol, PineJS.Std.period(this._context), PineJS.Std.period(this._context));
    71. };
    72. this.main = function(context, inputCallback) {
    73. this._context = context;
    74. this._input = inputCallback;
    75. this._context.select_sym(1);
    76. // 您可以在PineJS.Std对象中使用以下内置函数:
    77. // open, high, low, close
    78. // hl2, hlc3, ohlc4
    79. var v = PineJS.Std.close(this._context);
    80. return [v];
    81. }
    82. }
    83. }

    4、 将指标保存到具有以下结构的自定义指标文件中:

    1. __customIndicators = [
    2. *** 您的指标对象,由模板创建 ***
    3. ];

    请注意,该指标文件是一个JavaScript源文件,它定义了一个指标对象数组。因此,您可以在其中放置多个指标,或者将它们与我们为您编译的指标组合起来。

    5、 使用 indicators_file_name Widget构造函数的选项来从指标文件加载自定义指标。
    6、 图表准备好后,更新您的Widget初始化代码以创建 此指标。

    例子

    假设您希望在图表上显示用户的权益曲线。你必须做以下事情:

    • 为新的代码创建一个名称。 假设它为 #EQUITY 代码。 您可以使用您想像到的任何名字。
    • 更改服务器的代码以将此代码作为有效商品。 为此返回最小的有效SymbolInfo。
    • 使服务器返回有效的历史记录。 即,服务器可以询问您的数据库的股权历史记录,并返回此数据,就像返回普通商品的历史记录一样(例如 AAPL)。
    • 采用上述指标模板,创建指标文件(或向现有指标文件添加新指标)。 例如:
    1. __customIndicators = [
    2. {
    3. name: "Equity",
    4. metainfo: {
    5. "_metainfoVersion": 40,
    6. "id": "Equity@tv-basicstudies-1",
    7. "scriptIdPart": "",
    8. "name": "Equity",
    9. "description": "Equity",
    10. "shortDescription": "Equity",
    11. "is_hidden_study": true,
    12. "is_price_study": true,
    13. "isCustomIndicator": true,
    14. "plots": [{"id": "plot_0", "type": "line"}],
    15. "defaults": {
    16. "styles": {
    17. "plot_0": {
    18. "linestyle": 0,
    19. "visible": true,
    20. // 使线条变细
    21. "linewidth": 1,
    22. // 绘制类型为线性图
    23. "plottype": 2,
    24. // 显示价格线
    25. "trackPrice": true,
    26. "transparency": 40,
    27. // 为图线设置深红色。
    28. "color": "#880000"
    29. }
    30. },
    31. // 精度是一位数,如777.7
    32. "precision": 1,
    33. "inputs": {}
    34. },
    35. "styles": {
    36. "plot_0": {
    37. // 输出名字在样式窗口显示
    38. "title": "Equity value",
    39. "histogramBase": 0,
    40. }
    41. },
    42. "inputs": [],
    43. },
    44. constructor: function() {
    45. this.init = function(context, inputCallback) {
    46. this._context = context;
    47. this._input = inputCallback;
    48. var symbol = "#EQUITY";
    49. this._context.new_sym(symbol, PineJS.Std.period(this._context), PineJS.Std.period(this._context));
    50. };
    51. this.main = function(context, inputCallback) {
    52. this._context = context;
    53. this._input = inputCallback;
    54. this._context.select_sym(1);
    55. var v = PineJS.Std.close(this._context);
    56. return [v];
    57. }
    58. }
    59. }
    60. ];
    • 使用indicators_file_name 选项将指标插入图表。
    • 更改Widget的初始化代码。 添加如下内容:
    1. widget = new TradingView.Widget(/* ... */);
    2. widget.onChartReady(function() {
    3. widget.chart().createStudy('Equity', false, true);
    4. });