HQChart使用教程20-单股票截面数据(财务数据)计算器

151 篇文章 33 订阅

应用场景

对单个股票的财务报告数据展示及简单的分析(是否是连续增长,增速等等)。
一般的开发流程:

  1. 后台准备基础财务数据
  2. 前端或后台计算显示数据及衍生数据。
    这样每次增加数据都需要前端开发根据衍生数据计算文档开发。
    我们希望需要所有的数据的计算过程都有业务人员来完成,前端只需要做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

HQChart代码地址

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HQChart

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

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

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

打赏作者

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

抵扣说明:

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

余额充值