HQChart使用教程14-分析家语法执行器

151 篇文章 33 订阅

分析家语法执行器

HQChart 内置一个分析家语法的执行器, 把分析家脚本通过词法,语法分析构建一个抽象语法树(AST), 执行器通过AST执行, 最后获得数据。 (具体细节我就不多讲了,很枯燥,有兴趣的可以看下“编译原理”, 都是一样的标准化流程)

为什么要开发一个分析家语法执行器

目前市面上的H5K线图指标,无非就是前端计算或后台计算。

  1. 前端计算:通过基础的K线数据(开,高,低,收,成交金额,成交量,外加一些财务数据),使用js 来计算出对应的指标数据,
    好处呢: 降低指标计算对服务器的压力,因为都在本地计算了。
    弊端呢
  • 新加指标需要前端开发人员把指标翻译成js语言, 并且需要发布新的前端页面
  • 对前端开发人员开发水准要求比较高,执行器里面需要很多金融的计算函数如协方差,beta系数等都需要js来完成。
  • 指标基本就不能保密, 都是前端js,懂点js的人都可以查看你的代码
  1. 后端计算: 也是通过基础的K线数据, 单可以使用任何服务器开发语言来计算指标数据(c++, .net , nodejs. py …)
    好处呢
  • 可选择的开发人员很多,高手比较好招,不需要局限与js人员, 毕竟js的人大部分都是从事UI方面开发,让他们做算法基本会把他们逼疯的。
  • 增加指标只需要后台升级。
  • 指标计算过程前端是看不到的, 保密性比较好。
    坏处呢: 每次都需要从服务器请求指标,在交易时间段, 对服务器压力比较打。 就比方说1个K线图, 你设置30s更新一次K线数据, 那用户多了对后台服务器的压力和流量都是很大的考验

基于上面前后端优劣, 我们把分析家语法使用js重新实现了一遍。我们为了让脚本能同时在前端和后台都可以执行, 我们使用js来现实,后台直接可以使用nodejs, 调用我们的分析家执行器js代码。 这样一套代码前后台都通过。 nodejs性能基本和py差不多, 如果你要追求速度,那只能是用c/c++去实现了。

Demo页面部分代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>指标执行测试</title>   
</head>  
<body>

    <script src="content/js/jquery.min.js"></script>
    <script src="../jscommon/umychart.network.js"></script>
    <script src="../jscommon/umychart.js"></script>
    <script src="../jscommon/umychart.complier.js"></script>
    
    <script>

        $(function ()
        {
            var obj=  //分析家脚本,
            {
                Name:'测试', ID:'11111', 
                Args:[ { Name:'M1', Value:5}, { Name:'M2', Value:10 }, { Name:'M3', Value:20} ],
                Script: //脚本
                    'MA1:MA(CLOSE,M1);\n\
                    MA2:MA(CLOSE,M2);\n\
                    MA3:MA(CLOSE,M3);',
                ErrorCallback:ExecuteError,   //执行错误回调
                FinishCallback:ExecuteFinish, //计算结果回调
            };

            var indexConsole=new ScriptIndexConsole(obj);	//创建一个分析家的语法执行器

            var stockObj=  //指标执行的股票
            {
                HQDataType:HQ_DATA_TYPE.KLINE_ID, //K线数据
                Stock: {Symbol:'600000.sh'},      //股票代码
                Request: { MaxDataCount: 500, MaxMinuteDayCount:5 }, //计算数据个数
                Period:0 ,  //周期 0 日线 1 周线 2 月线 3 年线 
                Right:1    //复权 0 不复权 1 前复权 2 后复权
            };

            indexConsole.ExecuteScript(stockObj);	//执行指标
        })

        function ExecuteError(error)
        {
            console.log('[ExecuteError] Error: ',error)
        }

        function ExecuteFinish(data, jsExectute)	//接收执行完成以后的数据
        {
            console.log('[ExecuteFinish] data, jsExectute ',data, jsExectute)
        }
        
    </script>  
</body>  
</html>

nodejs也是一样的方法调用。导出 ScriptIndexConsole,HQ_DATA_TYPE。

执行结果格式

返回结果如下图:在这里插入图片描述
Date 数据的日期数组
Out 脚本执行结果返回,一个变量一个数组, 数据对应的日期就是Date的数组
Stock 执行的股票名称 代码
JSExecute 执行器实例

如果你已经开发了一个h5k线图,那可以直接内嵌我们的分析家语法执行器,把执行器计算好的指标显示在你的h5K线图上。
如果你需要策略选股,或策略参数调优都可以使用我们的执行器,使用nodejs并行批量的执行一个板块的股票。

如果还有问题可以加交流QQ群: 950092318

HQChart代码地址

地址:https://github.com/jones2000/HQChart

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HQChart

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

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

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

打赏作者

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

抵扣说明:

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

余额充值