Wind(万得)原生TDBAPI(JAVA版)封装成 WEB API (Demo版)

##1. 引言##

目前项目使用了开源的vnpy框架来做量化交易(python版), 但是公司采购的wind历史数据TDBAPI没有python版(只有C++版,JAVA版,C#版,matlab版)。有两种想法:1) 把C++版的封装成python版; 2)把JAVA版封装成WEB API版。 基于项目进度和对技术的熟悉程度,目前采用第二种,即把wind原生的TDBAPI(JAVA版)封装成WEB API,无需考虑客户端的语言问题(当然在该项目中是用python调用)

##2. 开发环境## JDK: jdk-8u131-windows-x64; java version "1.8.0_131", 64bit IDE: IntelliJ idea 2017.1.3
Spring Boot

##3. 开发过程##

###3.1 创建项目###

在IntelliJ idea中创建初始项目,具体过程参照Gaussic的博客,其中由于本项目不需要数据库,因此只选择了Web,没有选择JPA和H2。另外需要新建lib文件夹,原因看下文。项目结构如下所示:

输入图片说明

###3.2 导入jar包和dll文件###

下图是Wind api 提供的jar包,64bit 的dll文件夹(服务器64bit,也可以按需选32bit 的):

输入图片说明

输入图片说明

封装成web api 需要内容: tdbapi.jar, x64文件夹里面的2个dll,lib文件(dll是必须的,lib不太清楚)

下面就是如何在spring boot 里面导入本地的tadbapi.jar和需要再运行时获取的dll文件。在开发环境IntelliJ里面导入是很简单的。 1) 导入jar包: ctrl + alt + shift + s 打开 “project structure” 在 “Modules” 直接点 “+” 导入jar包。(可参照http://jingyan.baidu.com/article/fec7a1e5f79e2b1191b4e74f.html)

2) 运行时调用dll: 这就更简单了,直接在项目根目录里面添加就可以了。

以上做法在IntelliJ里面可以正常使用,但是用maven将spring boot 项目打包成jar就有问题了。一是本地jar包找不到,二是dll也找不到,三是打成jar包Test失败。具体如下:

1)maven 导入本地jar包

直接网上找了一个:http://blog.csdn.net/mayp1/article/details/53996402 新建了一个lib文件夹,把需要的jar包导入。 主要注意的是按照博客修改后的pom.xml里面写自己应用的入口。

输入图片说明

2)运行时调用dll

在java.library.path里面能够找到dll就可以正常运行,以下是2种解决思路: a. 在程序中导入dll: System.load, System.loadLibrary b. 将dll放在java.library.path中的路径下。 花了大把时间尝试方法a,但是可能因为同阶段有其他bug的影响,快到deadline了还是没有成功。所以直接采用方法b。直接把dll和lib文件放在了jdk的bin文件夹下(不推荐)

3)打成jar包Test问题

可能是Spring boot 的test模块无法找到dll文件,在用maven打jar包的时候一直卡在Test。所以直接把Test模块给剔除了。。。(不推荐)

##3.3 功能开发##

开发环境(在IntelliJ 里) 目前需要实现的功能(目前实现Wind TDBAPI里面的部分功能)

###3.3.1 登录模块###

Wind登录模块写在Controller的构造函数里面,避免每次请求数据重新登录

###3.3.2 获取K线数据### 前三点介绍wind api中的数据结构,与其在web api中的对应。(a. Wind 中的数据结构; b. web api中的数据结构)

1) 请求K线数据结构

a. Wind 请求K线数据结构

输入图片说明

b. Web api 请求K线数据结构

输入图片说明

注意不需要构造函数,Controller里面会自动匹配。

2) 枚举类型

a. Wind 枚举类型

输入图片说明

b. Web Api 枚举类型转换

为了方便客户端(时间参数: 传 0,1,2 不如传 'second', 'minute' 直观),进行下面的自动转换(switch case 很low就是了,还好类型少。。。。)

输入图片说明

3) 返回数据类型

a. Wind 原生返回数据类型

输入图片说明

b. web api 返回数据类

输入图片说明

4) 请求K线数据

 //获取K线数据
    @RequestMapping(value = "/getKLine",  method = RequestMethod.POST)
    public List<TdbKLine> getKLine(@RequestBody KLineParam kLineParam) {
        int m_nMaxOutputCount = 1000;
        if(kLineParam.getKey() != "xxxxxxx") return null;

        ReqKLine req = new ReqKLine();
        req.setCode(kLineParam.getCode());       //Required
        req.setMarketKey(kLineParam.getMarketKey());//Required
        req.setCQFlag(kLineParam.getCqFlag());    //默认为0
        req.setCQDate(kLineParam.getCqDate());   //默认为0
        req.setQJFlag(kLineParam.getQjFlag());   //默认为0
        req.setCycType(kLineParam.getCycType()); //Required
        req.setCycDef(kLineParam.getCycDef());	 //Optional,default 1
        req.setAutoComplete(kLineParam.getAutoComplete()); //自动补齐(0:不补齐,1:补齐)
        req.setBeginDate(kLineParam.getBeginDate());         //Optional,default today
        req.setEndDate(kLineParam.getEndDate());             //Optional,default today
        req.setBeginTime(kLineParam.getBeginTime());   //开始时间
        req.setEndTime(kLineParam.getEndTime());       //结束时间

        KLine[] kline = client.getKLine(req);
        if (kline==null) {
            System.out.println("NetWork Error,getKline failed!");//网络断开,可根据此消息,调用Client.close()后重连
        }

        List<TdbKLine> tdbKLines = new ArrayList<>();
        int nIndex = 0;
        for(KLine k : kline) {
            if (nIndex++ > m_nMaxOutputCount) break;
            TdbKLine tdbKLine = new TdbKLine(k.getWindCode(), k.getCode(), k.getDate(), k.getTime(),
                    k.getOpen(), k.getHigh(), k.getLow(), k.getClose(), k.getVolume());
            tdbKLines.add(tdbKLine);
        }
        return tdbKLines;
    }

###3.3.3 获取Tick数据### 与获取K线数据类似

##3.4 测试用例

test.py

#请求tick数据的参数
tick_param = {'code': 'cu00.SHF', 'marketKey':'SHF-1-0','date':20170608, 'beginTime':0, 'endTime':0}
tick_url = 'http://xxx.xxx.xxx.xx:xxxx/getTick'

#发送请求
r = requests.post(url=tick_url, json=kline_param)
#返回json数据
print(r.json())

code: github

转载于:https://my.oschina.net/u/2291187/blog/962001

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 WINDPY接口说明 ................................................................................................. 1 1.1 WINDPY接口概述 ............................................................................................... 1 1.2 WINDPY接口安装 ............................................................................................... 2 1.2.1 WindPy对系统环境要求 ............................................................... 2 1.2.2 Python环境安装 .......................................................................... 2 1.2.3 正常WindPy接口安装 .................................................................. 3 1.2.4 特殊安装WindPy方式 .................................................................. 6 1.3 接口向导界面 ..................................................................................................... 6 1.4 WINDPY获取帮助途径 ....................................................................................... 7 1.4.1 本用户手册 .................................................................................... 7 1.4.2 量化交易群和R语言交流群 ........................................................... 7 1.5 WINDPY接口相关规范 ....................................................................................... 1 1.5.1 以下所有命令都有如下假设 ........................................................... 1 1.5.2 命令区分大小写,且“w.”不能省略 ............................................... 1 1.5.3 中文以及单字节码和双字节码的问题 ............................................. 1 1.5.4 品种、指标、参数等引号内的部分不区分大小写 ........................... 1 1.5.5 参数支持list输入 ...................................................................... 1 1.5.6 时间、日期支持Python语言的时间、日期格式 ........................... 2 1.5.7 参数中有缺省值的可以不用输入 .................................................... 2 1.5.8 可以带参数名输入 ......................................................................... 2 精于数据,一直进步 IV 1.5.9 Showblank参数 ........................................................................... 3 1.5.10 交易接口中Showfields参数................................................ 3 1.5.11 ErrorCode定义 .................................................................... 3 2 WIND PY插件命令说明 ....................................................................................... 1 2.1 FROM WINDPY IMPORT *:装载WINDPY包 ..................................................... 1 2.2 W.START:启动WINDPY ..................................................................................... 1 2.3 W.STOP:停止WINDPY ....................................................................................... 2 2.4 W.ISCONNECTED:判断是否已经登录 .............................................................. 2 2.5 W.CANCELREQUEST:取消订阅 .......................................................................... 2 2.6 W.WSD:获取历史序列数据 .............................................................................. 3 2.7 W.WSI:获取分钟数据 ...................................................................................... 3 2.8 W.WST:获取日内TICK级别数据 .................................................................... 4 2.9 W.WSS:获历史截面数据 .................................................................................. 5 2.10 W.WSQ:获取和订阅实时行情数据 ................................................................. 5 2.11 W.WSET:获取板块、指数等分数据 ........................................................... 6 2.12 W.WEQS:获取条件选股结果 ............................................................................ 7 2.13 W.WPF:获取资产管理、组合管理数据 ......................................................... 7 2.14 交易相关函数 ..................................................................................................... 8 2.14.1 w.tlogon交易登录 ............................................................... 8 2.14.2 w.tlogout交易登出 ............................................................. 9 2.14.3 w.torder委托下单 ............................................................. 10 2.14.4 w.tcancel撤销委托 ........................................................... 11 精于数据,一直进步 V 2.14.5 w.tquery交易查询 ............................................................. 12 2.15 W.TDAYS, W.TDAYSOFFSET,W.TDAYSCOUNT:日期函数 ............................... 14 2.15.1 w.tdays:返回区间内的日期序列 ....................................... 14 2.15.2 w.tdaysoffset:返回某个偏移值对应的日期 ................... 14 2.15.3 w.tdayscount:返回某个区间内日期数量 ......................... 15 3 WINPY插件函数体说明........................................................................................ 1 3.1 日期序列(WSD)................................................................................................. 1 3.2 历史截面数据(WSS) ........................................................................................ 3 3.3 分钟序列(WSI)................................................................................................. 3 3.4 日内跳价(WST)................................................................................................. 4 3.5 实时数据(WSQ)................................................................................................. 5 3.6 数据集(WSET) ..............................................
该系统主要是为了解决行业研究在提取公司财务数据以及进行财务数据分析时过于繁琐的问题。由于目前金融业使用wind较多,故本系统暂时采用了wind接口,通过自动化从wind提取相关公司财务数据并自动进行财务分析, 最后会将得到的结果以excel的形式输出到本地。 功能特点 提取数据。该系统目前主要整合了wind的python API接口,通过设定初始时间和结束时间及公司代码和名称,就可以直接通过wind的API提取财务数据。 覆盖全方位财务分析指标 盈利能力 毛利率 经营利润率(EBIT/net revenue) 净利率 ROA ROE ROIC(投入资本回报率) 销售费用率 管理费用率 财务费用率 销售期间费用率(三费加上研发/营业收入) 营运能力 总资产周转率(turnover=net revenue/assets) 固定资产周转率(net revenue/average net fixed assets) 营运资本周转率(net revenue/average working capital,here WC=current assets-current liabilities) 应收账款周转天数 应付账款周转天数 存货周转天数 营业周期(Operating cacle=应收账款周转天数+存货周转天数) 现金循环周期,又名净营业周期(Cash conversion cycle=应收账款周转天数+存货周转天数-应付账款周转天数) 流动性 流动比率(current ratio):流动资产/流动负债 速冻比率(quick ratio):(流动资产-存货)/流动负债 现金比率(Cash ratio):(现金+交易性金融资产)/流动负债 偿债能力 有息负债/净资产 有息负债/总资产 利息保障倍数(EBIT/Interest) 货币资金加上交易性金融资产/有息负债 货币资金/有息负债 估值水平 PE PB PE历史分位数 PB历史分位数 现金流数据 CFO/revenue CFO/average total assets CFO/average total equity CFO/operating income CF0/net income (CFO-perferred dividends)/weighted average number of common shares CFO/total debt(这里采用有息负债) CFO/cash paid for long-term assets(固定资产投资) CFO/cash long-term debt repayment CFO/dividend paid CFO/cash outflows from investing and financing activities (CFO+interest paid+taxes paid)/interest paid 信用水平 Z-score 长性 营业收入同比 营业利润同比 净利润同比 归母净利润同比 扣非归母净利润同比 CFO同比

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值