HQChart使用教程19-基于HQChart的后台单股票指标计算服务

1 篇文章 1 订阅
1 篇文章 1 订阅

应用场景

最近在提供数据api的时候,有客户提出需要k线指标, 如MA ,RSI 等,我给出的方案是前端本地计算。但这样会影响整个产品的开发进度,加重前端的开发量。于是我打算把HQChart部署在nodejs后台, 直接计算指标结果返回前端

改造HQChart

HQChart基本就是canvas裸写的,没用到什么开源的库,所以迁移比较简单, 唯一用的库的就网络请求使用了ajax, 在迁移到nodejs后台的发现后台无法使用ajax,于是就需要分装一个请求接口, 前端使用$.ajax, 后台使用request库

function JSNetwork()
{

}

JSNetwork.HttpReqeust=function(obj) //对请求进行封装(前端用)
{
    $.ajax(
        { 
            url: obj.url, data: obj.data,
            type:obj.type, dataType: obj.dataType,async:obj.async, 
            success: obj.success,
            error: obj.error,
        }
    );
}



//  后台不能用ajax, 改用request
//
///
const clientHttp  = require('request');
JSNetwork.HttpReqeust=function(obj) //对请求进行封装(后台用)
{
    var options = 
    {
        url: obj.url,
        method: obj.type,
        body: obj.data,
        json: true,     // Use,If you are sending JSON data
    }

    clientHttp(options, function (err, res, recvData) 
    {
        if (err) 
        {
            if (obj.error) obj.error(null,res,err);
        }
        else
        {
            obj.success(recvData);
        }
    });
}

原来网络请求写的地方

$.ajax({
  url: ......
});

替换成

JSNetwork.HttpReqeust({
  url: ......
});

这样移植就完成了

后台请求出来类 (JSIndexController)

把指标计算请求处理单独分装成一个类 (jsindexcontroller.js)

使用restify建立一个apiweb服务

(hqchartapi.js)

var restify = require('restify');
var JSIndexController=require('./jsindexcontroller').JSIndexController;

var server = restify.createServer({name:'HQChart.testserver'});
server.use(restify.plugins.bodyParser());   //支持json post
server.use(restify.plugins.fullResponse()); //跨域
server.use(restify.plugins.gzipResponse()); //支持压缩

server.post('/api/jsindex',JSIndexController.Post);
server.get('/api', homepage);

function homepage(req, res, next)
{
  res.send({message: 'homepage'});
}

server.listen(18080, function() 
{
  console.log('%s listening at %s', server.name, server.url);
});

用nodejs启动这个hqchartapi.js, 一个简单的api指标计算服务就完成了。
api 接口


//  symbol:[] 股票列表
//  code: 脚本
//  args: 脚本参数 (可选)
//  maxdatacount: 日线数据计算多少天 (可选)
//  maxminutedaycount: 分钟数据计算多少天 (可选)
//  period:  周期 0=日线 1=周线 2=月线 3=年线 4=1分钟 5=5分钟 6=15分钟 7=30分钟 8=60分钟 (可选)
//  right:   复权 0 不复权 1 前复权 2 后复权(可选)
//  
/*  post 数据:
{
    "symbol":"600000.sh",
    "indexname":"MA",
    "args":[{"name":"N1","value":10},{"name":"N2","value":12}],
    "maxdatacount":200, 
}

返回数据
{
    "code":0, 0=成功 1=失败
    "ticket":131, //执行时间
    "outdata":
    [
        date:[],
        time:[],
        outvar:[{name:'ma1', data:[]}, .....]
        stock: { name: , symbol:}
    ],
*/

制作docker镜像

后台程序完成, 剩下就是部署了, 可以直接在服务器上部署,也是使用docker部署。
创建Dockerfile

FROM node:10

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

# Bundle app source
COPY . .

EXPOSE 18080
CMD [ "node", "hqchartapi.js" ]

开始build image,然后就是部署到docker上。

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

HQChart代码地址

地址:https://github.com/jones2000/HQChart
indexapi 在 umychart_indexapi 目录里

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HQChart

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

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

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

打赏作者

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

抵扣说明:

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

余额充值