dsxkline增加自定义指标和简单绘图功能

好久没更新,最近太忙了,当然主要是这小插件没什么人用,还有因为本人还没饿死,所以还在继续更新下去!

在开发一些策略服务上有时候需要用到一些绘图的功能,比如画一些买卖点,或者自定义自己的指标等。所以 1.2版本加上了一些画图和自定义指标的功能。

以下是 dsxkline v1.2.0版本更新功能介绍:

一、绘图功能

目前支持两根K线之间绘制直线,某根K线上绘制一个买卖点

绘制直线

/**
 * 两点画一条线
 * @param {float} x1 
 * @param {float} y1 
 * @param {float} x2 
 * @param {float} y2 
 * @param {float} width 
 * @param {string} color 
 * @param {array} dash 设置虚线的间隔大小 例如 [4] 相隔4个距离
 */
drawline:function(x1,y1,x2,y2,width,color,dash=[]);

绘制圆点

/**
 * 画一个圆点,可包含文字
 * @param {float} x
 * @param {float} y 
 * @param {float} width 
 * @param {string} color 
 * @param {string} text 
 * @param {float} size 
 * @param {string} textcolor 
 */
drawCircle : function(x,y,width,color,text,size=dsxConfig.theme.white.fontSize,textcolor="#ffffff");

根据日期索引绘制买卖点

/**
 * 在K线上画一个圆点
 * @param {string} date 日期索引
 * @param {string} text 文本
 * @param {string} bgcolor 背景色
 * @param {string} textcolor 文本颜色
 * @param {double} price K线价格位置
 * @returns 
 */
drawCircleWithDate:function(date,text,bgcolor,textcolor,price=0);

用法

var c=document.getElementById("kline"); 
var kline = new dsxKline({
    element:c,
    onLoading:function(o){
    },
    drawEvent:function(self){
        self.drawCircleWithDate("20230313","买","red","#ffffff");
        self.drawCircleWithDate("20221129","卖","green","#ffffff",12.99);
        self.drawCircleWithDate("202303241104","买","red","#ffffff");
    }
});

二、自定义指标

自定义指标有两种方式,一种是自定义指标数据,一种是自定义指标算法

自定义指标数据

自定义指标数据就是说只需要给指标数据就行,不需要前端写算法之类的,这种方式比较灵活,计算指标的任务可以放在后端等,前端只需要加载指标数据即可。

不管是自定义指标数据还是算法,定义指标之前都是需要先配置指标的,配置指标有四个属性是必须要设置的。

  1. 指标名称
  2. 指标绘制方式,画线还是画点还是画柱状图等
  3. 指标支持的图表类型,是蜡烛图还是折线图
  4. 指标显示的位置,主图还是副图

配置好指标后,把对应的指标数据一起交给函数 kline.installIndex 即可安装好指标。

/*********************************************************
* 1、自定义指标数据
* 这里演示自定义指标的创建方法
* 指标数据需要预先计算好并与K线数据一一对应
* ********************************************************/
// 指标名称
var _name = "MYMA"
// 指标线的绘制方式
var _draws = {MA6:{model:'line',color:'#ff0000'},MA12:{model:'line',color:'blue'}}
// 指标支持显示的图表类型,这里是蜡烛图
var _charTypes = [dsxConfig.chartType.candle]
// 指标显示在那个位置 主图 main 幅图 sides
var _location = ['sides']
// 自定义指标的数据,需要跟K线数据对应
var _datas = [];
// 这里演示指标的数据计算,具体的计算可以后台实现,也可以前端实现
datas.forEach(element => {
    var item = element.split(",")
    var MA6 = (parseFloat(item[2])+parseFloat(item[3])) / 2;
    var MA12 = (parseFloat(item[1])+parseFloat(item[4])) / 2;
    // 每个指标线的数据计算结果
    _datas.push({MA6:MA6,MA12:MA12});
});
// 最后一步安装指标
kline.installIndex(_name,_draws,_datas,_charTypes,_location);

自定义指标算法

自定义算法这个需要熟悉一下框架才行,不过也很简单,只需要把算法写在一个帧函数里即可,帧函数意思是每根K线都会调用的一个函数。

函数里面可以调用一些基数函数,比如 this.MAX,MIN,EMA,MA,MACD,KDJ等,具体可以打印下看看

示例

/*********************************************************
* 2、自定义指标算法
* 放在创建k线图后面即可
* ********************************************************/
var _name2 = "MYABC"
// 指标线的绘制方式
var _draws2 = {MA10:{model:'line',color:'#ff0000'},MA30:{model:'line',color:'blue'}}
// 指标支持显示的图表类型,这里是蜡烛图
var _charTypes2 = [dsxConfig.chartType.candle]
// 指标显示在那个位置 主图 main 幅图 sides
var _location2 = ['sides']
// 指标算法函数
var _func = function(){
    // 取得当前坐标数据
    var item = this.datas[this.day];
    // 初始化指标
    if (item.ZHIBIAO[_name2] == null)
        item.ZHIBIAO[_name2] = {};
    // 开始计算指标值,这里我们计算个均线指标吧
    var N = 10;
    var amount = 0;
    for(var i=Math.max(this.day-N+1,0);i<=this.day;i++){
        var subitem = this.datas[i];
        amount += subitem.CLOSE;
    }
    var MA10 = amount / N;
    N = 30;
    amount = 0;
    for(var i=Math.max(this.day-N+1,0);i<=this.day;i++){
        var subitem = this.datas[i];
        // 这里模型数据里有K线所有的字段值可以引用
        amount += subitem.CLOSE;
    }
    var MA30 = amount / N;
    // 保存指标值
    item.ZHIBIAO[_name2]["MA10"] = MA10;
    item.ZHIBIAO[_name2]["MA30"] = MA30;
}
// 创建自定义指标算法
kline.createIndex(_name2,_draws2,_func,_charTypes2,_location2);

三、加了个SAR指标

具体可参考文章 https://www.dsxquant.com/open-arithmetic/2023/03/1630/

这个版本就加这些,大家如有在用可以给我提需求,我会尽量加快更新脚步的,只要我一天没饿死,我就会一直更新下去的,感谢大家支持!