TradingView--自定义技术指标

TradingView 支持自定义指标,不过是把你要定义的指标写成一个 JS(customIndex.js) 源文件,放在图表库 static 文件夹下。自定义指标 JS 源代码官网模板如下:

{
    // 将<study name>替换为您的指标名称
    // 它将由图表库内部使用
    name: "<study name>",
    metainfo: {
        "_metainfoVersion": 40,
        "id": "<study name>@tv-basicstudies-1",
        "scriptIdPart": "",
        "name": "<study name>",
        // 此说明将显示在指标窗口中
        // 当调用createStudy方法时,它也被用作“name”参数
        "description": "<study description>",
        // 该描述将显示在图表上
        "shortDescription": "<short study description>",

        "is_hidden_study": true,
        "is_price_study": true,
        "isCustomIndicator": true,

        "plots": [{"id": "plot_0", "type": "line"}],
        "defaults": {
            "styles": {
                "plot_0": {
                    "linestyle": 0,
                    "visible": true,

                    // 绘图线宽度
                    "linewidth": 2,

                    // 绘制类型:
                    //    1 - 直方图
                    //    2 - 线形图
                    //    3 - 十字指针
                    //    4 - 山形图
                    //    5 - 柱状图
                    //    6 - 圆圈图
                    //    7 - 中断线
                    //    8 - 中断区块
                    "plottype": 2,

                    // 显示价格线?
                    "trackPrice": false,

                    // 绘制透明度,百分比。
                    "transparency": 40,

                    // 以#RRGGBB格式绘制颜色
                    "color": "#0000FF"
                }
            },

            // 指标输出值的精度
            // (小数点后的位数)。
            "precision": 2,

            "inputs": {}
        },
        "styles": {
            "plot_0": {
                // 输出的名字将在样式窗口显示
                "title": "-- output name --",
                "histogramBase": 0,
            }
        },
        "inputs": [],
    },

    constructor: function() {
        this.init = function(context, inputCallback) {
            this._context = context;
            this._input = inputCallback;

            // 定义要绘制的商品。
            // 商品应该是一个字符串。
            // 您可以使用PineJS.Std.ticker(this._context)获取所选商品的代码。
            // 例,
            //    var symbol = "AAPL";
            //    var symbol = "#EQUITY";
            //    var symbol = PineJS.Std.ticker(this._context) + "#TEST";
            var symbol = "<TICKER>";
            this._context.new_sym(symbol, PineJS.Std.period(this._context), PineJS.Std.period(this._context));
        };

        this.main = function(context, inputCallback) {
            this._context = context;
            this._input = inputCallback;

            this._context.select_sym(1);

            // 您可以在PineJS.Std对象中使用以下内置函数:
            //     open, high, low, close
            //    hl2, hlc3, ohlc4
            var v = PineJS.Std.close(this._context);
            return [v];
        }
    }
}

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

__customIndicators = [
    *** 您的指标对象,由模板创建 ()***
];

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

2.在 new TradingView.widget() 中使用 indicators_file_name: 'customIndex.js'引入

 widget = new TradingView.widget({
    ***
    indicators_file_name:'customIndex.js',  /**自定义指标文件 */
    ***
});

完整代码(自定义MACD红绿)

// 自定义指标文件,可以写多个指标
__customIndicators = [
	{
		name: "自定义(MACD)",
		metainfo: {
			"_metainfoVersion": 40,
			"id": "macd-custom@tv-basicstudies-1",
			"scriptIdPart": "",
			"name": "自定义(MACD)",
			"description": "自定义(MACD)",
			"shortDescription": "MACD_CUSTOM",
			"is_price_study": false,
			"isCustomIndicator": true,
			defaults: {
				styles: {
					plot_0: {
						linestyle: 0,
						linewidth: 4,//红色
						plottype: 1,
						trackPrice: !1,
						transparency: 35,
						visible: !0,
						color: "#da1155"
					},
					plot_1: {
						linestyle: 0,
						linewidth: 1,
						plottype: 0,
						trackPrice: !1,
						transparency: 0,
						visible: !0,
						color: "#FFFFFF"
					},
					plot_2: {
						linestyle: 0,
						linewidth: 1,
						plottype: 0,
						trackPrice: !1,
						transparency: 0,
						visible: !0,
						color: "#FFFF00"
					},
					plot_3: {
						linestyle: 0,
						linewidth: 4,//绿色
						plottype: 1,
						trackPrice: !1,
						transparency: 35,
						visible: !0,
						color: "#33FF33"
					}
				},
				precision: 2,   /**保留小数点 */
				inputs: {
					in_0: 12,
					in_1: 26,
					in_3: "close",
					in_2: 9
				}
			},
			plots: [{
				id: "plot_0",
				type: "line"
			},
			{
				id: "plot_1",
				type: "line"
			},
			{
				id: "plot_2",
				type: "line"
			},
			{
				id: "plot_3",
				type: "line"
			}],
			styles: {
				plot_0: {
					title: "Histogram",
					histogramBase: 0,
					joinPoints: !1
				},
				plot_1: {
					title: "MACD",
					histogramBase: 0,
					joinPoints: !1
				},
				plot_2: {
					title: "Signal",
					histogramBase: 0,
					joinPoints: !1
				},
				plot_3: {
					title: "Histogram",
					histogramBase: 0,
					joinPoints: !1
				}
			},
			inputs: [{
				id: "in_0",
				name: "fastLength",
				defval: 12,
				type: "integer",
				min: 1,
				max: 2e3,
			},
			{
				id: "in_1",
				name: "slowLength",
				defval: 26,
				type: "integer",
				min: 1,
				max: 2e3
			},
			{
				id: "in_3",
				name: "Source",
				defval: "close",
				type: "source",
				options: "open high low close hl2 hlc3 ohlc4".split(" ")
			},
			{
				id: "in_2",
				name: "signalLength",
				defval: 9,
				type: "integer",
				min: 1,
				max: 50
			}],
			id: "Moving Average Convergence Custom/Divergence@tv-basicstudies-1",
			scriptIdPart: "",
			name: "MACDCUSTOM"
		},
		constructor: function() {
			this.f_0 = function(a, b) {
				return a - b
			},
			this.main = function(a, b) {
				var c, k, f, n, r, l, u, p, q, e, g, v, i;
				this._context = a;
				this._input = b;
				c = PineJS.Std[this._input(2)](this._context);
				k = this._input(0);
				f = this._input(1);
				n = this._input(3);
				r = this._context.new_var(c);
				l = PineJS.Std.ema(r, k, this._context);
				u = this._context.new_var(c);
				p = PineJS.Std.ema(u, f, this._context);
				q = this.f_0(l, p);
				e = this._context.new_var(q);
				g = PineJS.Std.sma(e, n, this._context);
				v = this.f_0(q, g);
				if (v >= 0) {
					i = 0;
				} else {
					i = v;
					v = 0
				}
				return [v, q, g, i];
			}
		}
	}
];

结果显示效果跟自带MACD一样

 具体内容可添加QQ(1765156144)备注来意

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

·码农·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值