教程14"/>
HQChart使用教程14
分析家语法执行器
- 分析家语法执行器
- 为什么要开发一个分析家语法执行器
- Demo页面部分代码
- 执行结果格式
- HQChart代码地址
分析家语法执行器
HQChart 内置一个分析家语法的执行器, 把分析家脚本通过词法,语法分析构建一个抽象语法树(AST), 执行器通过AST执行, 最后获得数据。 (具体细节我就不多讲了,很枯燥,有兴趣的可以看下“编译原理”, 都是一样的标准化流程)
为什么要开发一个分析家语法执行器
目前市面上的H5K线图指标,无非就是前端计算或后台计算。
- 前端计算:通过基础的K线数据(开,高,低,收,成交金额,成交量,外加一些财务数据),使用js 来计算出对应的指标数据,
好处呢: 降低指标计算对服务器的压力,因为都在本地计算了。
弊端呢:
- 新加指标需要前端开发人员把指标翻译成js语言, 并且需要发布新的前端页面
- 对前端开发人员开发水准要求比较高,执行器里面需要很多金融的计算函数如协方差,beta系数等都需要js来完成。
- 指标基本就不能保密, 都是前端js,懂点js的人都可以查看你的代码
- 后端计算: 也是通过基础的K线数据, 单可以使用任何服务器开发语言来计算指标数据(c++, , 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" ".dtd">
<html xmlns="">
<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/umychartwork.js"></script><script src="../jscommon/umychart.js"></script><script src="../jscommon/umychartplier.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代码地址
地址:
更多推荐
HQChart使用教程14
发布评论