单股票截面数据计算器
应用场景
对单个股票的财务报告数据展示及简单的分析(是否是连续增长,增速等等)。
一般的开发流程:
- 后台准备基础财务数据
- 前端或后台计算显示数据及衍生数据。
这样每次增加数据都需要前端开发根据衍生数据计算文档开发。
我们希望需要所有的数据的计算过程都有业务人员来完成,前端只需要做UI数据展示就可以。只要前端把显示UI完成, 后续业务调整由业务人员来完成,不再依赖前端开发。
demo: https://opensource.zealink.com/hqweb/demo/sectiondatatest.html
HQChart麦语法执行器
前几章我们说过,基于我们的HQChart指标执行器可以对基础数据进行计算,可以获得衍生数据指标。
基础我们的指标计算器, 我们增加了截面数据获取函数SF(年份, 报告期, ‘字段名’),返回这期的财务数据字段数据
HQChart使用教程14-分析家语法执行器
SF截面财务数据函数
SF(年,报告期,字段名)
返回截面报表查询字段的数据。
年: 数值型
报告期: 1-4 1=1季度 2=半年报 3=3季度 4=年报
字段名: ‘流动资产’、‘货币资金’、‘存货’、 ‘流动负债’、‘非流动负债’、‘三项费用’、‘投资收益’、‘归母净利润’、 ‘扣非净利润’、‘扣非每股收益’、‘加权平均净资产收益’、‘在建工程’、‘累计折旧’、‘少数股东利润’、‘汇兑损益’、‘坏账计提’、‘固定资产’、‘当期折旧’、 ‘营业总收入’、‘主营业务利润’、 ‘营业利润’、 ‘净利润’、‘应收账款’、‘财务费用’、‘经营性现金流’、‘资产总计’、‘负债总计’、 ‘所有者权益总计’、 ‘毛利率’、 ‘每股资本公积金’、 ‘每股未分配利润’、‘每股收益’、 ‘每股净资产’、 ‘每股经营性现金流’、 ‘扣非净利润涨幅’、‘扣非净利润涨速’、 ‘净利润涨幅’、 ‘资产负债率’、 ‘利润同比’
deom
计算最近3年 1季度的营业总收入是否连续增长
麦语法脚本:
设置参数 YY为年份变量, YY=2019
DATA2017=SF(YY-2,1,'营业总收入');
DATA2018=SF(YY-1,1,'营业总收入');
DATA2019=SF(YY,1,'营业总收入');
营业总收入2019一季度:DATA2019;
营业总收入2018一季度:DATA2018;
营业总收入2017一季度:DATA2017;
比上一年:IF(DATA2019>DATA2018, '增加','减少');
连续增长:IF( DATA2019>DATA2018 AND DATA2018>DATA2017, '是','否');
把我们上面的脚本写到前端网页就完成 这个数据的计算了。
<!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>
<div id='index_data1' style='margin:10px 10px 10px 10px;'>
<table class="table">
</table>
</div>
<div id='index_script1' style='margin:10px 10px 10px 10px;'></div>
<div id='index_data2' style='margin:10px 10px 10px 10px;'>
<table class="table"></table>
</div>
<div id='index_script2' style='margin:10px 10px 10px 10px;'></div>
<script src="content/js/jquery.min.js"></script>
<script src="../jscommon/umychart.js"></script>
<script src="../jscommon/umychart.complier.js"></script>
<script>
function SectionIndex(obj)
{
this.Symbol='600000.sh';
this.TableID;
this.Name;
this.ID;
this.Args=[];
this.Script;
this.IndexControl;
if (obj)
{
if (obj.Symbol) this.Symbol=obj.Symbol;
if (obj.Name) this.Name=obj.Name;
if (obj.ID) this.ID=obj.ID;
if (obj.Args) this.Args=obj.Args;
if (obj.Script) this.Script=obj.Script;
if (obj.TableID) this.TableID=obj.TableID;
}
this.Run=function()
{
var self=this;
var obj=
{
Name:this.Name, ID:this.ID,
Args:this.Args,
Script: this.Script,
ErrorCallback:function(error) { self.ExecuteError(error) },
FinishCallback:function(data, jsExectute) { self.ExecuteFinish(data, jsExectute) },
IsSectionMode:true,
};
var stockObj=
{
HQDataType:HQ_DATA_TYPE.KLINE_ID,
Stock: {Symbol:this.Symbol},
Request: { MaxDataCount: 500, MaxMinuteDayCount:5 },
Period:0 , Right:0
};
this.IndexControl=new ScriptIndexConsole(obj);
this.IndexControl.ExecuteScript(stockObj);
}
this.ExecuteError=function(error)
{
console.log('[SectionIndex::ExecuteError] Error: ',error)
}
this.ExecuteFinish=function(data, jsExectute)
{
//收到数据显示在页面上
console.log('[SectionIndex::ExecuteFinish] data, jsExectute ',data, jsExectute);
var table=$(this.TableID)[0];
var tr=$('<tr>')[0];
var tb=$('<td>')[0];
tb.innerText=this.Name;
tr.append(tb);
tb=$('<td>')[0];
tb.innerText=this.Symbol;
tr.append(tb);
table.appendChild(tr);
var outVar=data.Out;
for(var i in outVar)
{
var item=outVar[i];
tr=$('<tr>')[0];
tb=$('<td>')[0];
tb.innerText=item.Name;
tr.append(tb);
tb=$('<td>')[0];
tb.innerText=item.Data;
tr.append(tb);
table.appendChild(tr);
}
}
}
$(function ()
{
var index=new SectionIndex(
{
Name:'财务数据', ID:'1111',
Symbol:'600000.sh',
Args:[ { Name:'YY', Value:2018} ],
Script: //脚本
"投资收益:SF(YY,2,'投资收益');\n"+
"营业利润:SF(YY,2,'营业利润');" ,
TableID:'#index_data1 .table'
}
);
$("#index_script1 ")[0].innerText='脚本:\n'+index.Script;
index.Run();
var index2=new SectionIndex(
{
Name:'财务数据', ID:'1112',
Symbol:'600000.sh',
Args:[ { Name:'YY', Value:2019} ],
Script: //脚本
"DATA2017=SF(YY-2,1,'营业总收入');\n" +
"DATA2018=SF(YY-1,1,'营业总收入');\n" +
"DATA2019=SF(YY,1,'营业总收入');\n" +
"营业总收入2019一季度:DATA2019;\n" +
"营业总收入2018一季度:DATA2018;\n" +
"营业总收入2017一季度:DATA2017;\n" +
"比上一年:IF(DATA2019>DATA2018, '增加','减少');\n" +
"连续增长:IF( DATA2019>DATA2018 AND DATA2018>DATA2017, '是','否');",
TableID:'#index_data2 .table'
}
);
$("#index_script2 ")[0].innerText='脚本:\n'+index2.Script;
index2.Run();
})
</script>
</body>
</html>
后续我们也会根据业务需求增加其他的截面数据函数。以满足各种业务展示
如果还有问题可以加交流QQ群: 950092318