wind客户端python接口 java调用

之前公司业务部门提出需要做wind 新债数据对比,原本做的方案是 直接 从数据中心wind库中获取,但是数据中心wind库,并非实时数据而是 每半个小时由wind 主动推送的数据,业务觉得不满足要求,需要wind 最新实时数据;

根据业务要求,查找到 wind 资讯端  提供的 接口,有C、C#、python 等其他接口,本人看一下,选择使用python 来实现;大概逻辑:业务在web端 业务系统 填写需要获取的新债信息(wind代码 和 市场),然后由java 程序处理相关逻辑后,调用python提供的http协议get接口, 最后通过python 程序调用 wind接口获取到数据,返回字符串给java 程序,java 程序解析后 在系统上展示 新债信息;

一、搭建python 环境(建议采用3.0及其以上,3.0以下好像不维护了),本人使用的3.5版本,环境搭建有很多,可以自行百度,也可参考本人另一篇文章;

二、python 端 代码(本人python零基础,代码规范 语法啥的 不是很会,这是一位同事提供的相关代码)

注意这里需要 安装相关包:flask、flask_restful;其他如果 运行报错,报什么不存在,可能是包没有安装,可以尝试安装后在运行。

注意:“WindPy ”这个是 wind 的包,需要在 python 环境中 安装wind 资讯端,安装完成后,在wind终端里面 找到菜单【量化】->【修复插件】-【python】;注意第一次需要 配置python接口信息路径,我的路径是(这里我3.5 和 3.7都安装了,只要一个就可以了):

配置好后修复一下。 

python代码:新建python文件 XX.py;

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""

from flask import Flask, request
from flask_restful import Resource, Api
from json import dumps
from flask import jsonify
from WindPy import w #wind 包
import logging
import datetime
import logging

app = Flask(__name__)
api = Api(app)


class CJHX_Data_Service(Resource):
    def get(self, windcode):
        
        try:
            logging.info('-------call_wind_openapi()--------')
            #调用wind接口,这里先判断是否已经启动了
            if not w.isconnected():
                w.start()

            now = datetime.datetime.now()
            nowday = now.strftime("%Y-%m-%d")
            wed = w.wsd(windcode,"issue_issueprice,agency_trustee,dirtyprice,cleanprice,windl2type,sec_name,trade_code,carrydate,maturitydate,embeddedopt,latestpar,paymenttype,interestfrequency,repaymentmethod,couponrate,taxfree,windcode,redemptiondate,repurchasedate,subordinateornot,taxrate,coupon,interesttype",nowday,nowday,"")
            result = str(wed.Data)
            #w.stop() 这里取消关闭,wind接口每隔120秒会自动关闭,无需手工关闭,避免接口并发时导致程序异常掉 
            return result
        except Exception as e:
          logging.error('call_wind_openapi raise an error ', e)

    
api.add_resource(CJHX_Data_Service, '/api/<windcode>') # Route_3


if __name__ == '__main__':
     app.run(port=7788,debug=True,host="0.0.0.0")
     
#curl http://127.0.0.1:7789/api/8

代码说明:

w.wsd()  是wind接口,接口使用 请参考wind接口说明,里面有详细讲解;大概就是 wind代码、需要的wind字段(需要通过wind端获取)、查询开始时间、查询结束时间;

wind 字段选择:量化-api接口-代码生成器   ;语言选择python,我这里选择第一个日期序列;点击后任意选择一个债券;然后下一个,就可以找中文字段对应的 wind 字段了;

7788 是端口,这里有你可以任意写,0.0.0.0 代表可以通过ip访问。

完成后在浏览器输入 http://127.0.01:7788/api/114411.SZ  (114411.SZ 代表wind 代码 + 市场);

三、java 端代码【没有什么好说,直接看代码吧】

jar 引用

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.Integer;  
import java.net.URL;
import java.net.URLConnection;

调用的方法

	public static String windApi(String code,String jysc){
		String windcode="";
		String temp="";
		if("上海".equals(jysc)){
			windcode = code+".SH";
		}else if("深圳".equals(jysc)){
			windcode = code+".SZ";
		}else if("银行间".equals(jysc)){
			windcode = code+".IB";
		}else{
			return null;
		}
		
		try {  
			
		    String endpoint = "http://10.201.9.95:7788/api/"+windcode;  
			//String endpoint = "http://10.201.224.125:7788/api/"+windcode;
		    
			String result = (String) sendGet(endpoint);
			result=result.replace("\"","");
		    // 给方法传递参数,并且调用方法  
		    System.out.println("result is " + result);  
		    
		   /***
		    * 解析接口返回值字符串  这里 我直接返回字符串,做了字符串解析,和中文处理;
		    */
		   String str = result.replace("[","");
		   str = str.replace("]]","");
		   String[] strs = str.split("],");
		   
		   for(int i=0;i<strs.length;i++){
			   String t = strs[i].replace("u'","");
			   t=t.replace("'","");
			   t=t.replace(" ","");
			   if(t.split("datetime").length>2){
				  t= getUnTime(t);
			   }
			   if(i==0){
				   temp=unicodeToCn(t);
			   }else{
				   temp=temp+","+unicodeToCn(t);
			   }
		   }
		   
		    System.out.println(temp);
		} catch (Exception e) {  
		    System.err.println(e.toString());  
		}   
		return temp;
	}

其他辅助方法:

/**
	 * 解析wind 时间返回值
	 * @param t
	 * @return 数字类型时间
	 */
	public static String getUnTime(String t){
		String a = t.replace("datetime","");
	    String[] f = a.split(",");
	    String year = f[0].replace("(","").replace(".","");
	    String mm = f[1].length()<2?"0"+f[1]:f[1];
	    String dd = f[2].length()<2?"0"+f[2]:f[2];
	    t=year+""+mm+""+dd;
	    return t;
	}
	public static String getNumTime(String t){
		String[] f = t.split("-");
		String year = f[0];
	    String mm = f[1].length()<2?"0"+f[1]:f[1];
	    String dd = f[2].length()<2?"0"+f[2]:f[2];
	    t=year+""+mm+""+dd;
		return t;
	}
	
	
	/**
	 * 解析uncode编码 中文  u'18\u9633\u716404'
	 * @param unicode
	 * @return
	 */
	private static String unicodeToCn(String unicode) {
        /** 以 \ u 分割,因为java注释也能识别unicode,因此中间加了一个空格*/
        String[] strs = unicode.split("\\\\u");
        String returnStr = "";
        //必须包含\\u 否则原样输出
        if(strs.length<2){
        	return unicode;
        }
        for (int i = 0; i < strs.length; i++) {
          String t = strs[i];
          //非中文则没有被编码,例如数字在前,目前不考虑大于四位的情况
          if(t.length()<4){
        	  returnStr +=t;
        	  continue;
          }
          String s = "";
          //非中文则没有被编码,例如数字在后
          if(t.length()>4){
        	  s =t.substring(4, t.length());
        	  t =t.substring(0, 4);
          }
          returnStr += (char) Integer.valueOf(t, 16).intValue() +s;
        }
        return returnStr;
    }
	public static String getNumber(String s){
		String a = s.split("\\.")[0];
		if(Double.parseDouble(s) == Double.parseDouble(a)){
			return a;
		}else{
			return s;
		}
	}
	//发送GET请求
    public static String sendGet(String url) {
        String result = "";
        BufferedReader in = null;
        try {
            String urlName = url;
            URL realUrl = new URL(urlName);
            URLConnection conn = realUrl.openConnection();// 打开和URL之间的连接
            conn.setRequestProperty("accept", "*/*");// 设置通用的请求属性
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
            conn.setConnectTimeout(4000);
            conn.connect();// 建立实际的连接
            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));// 定义BufferedReader输入流来读取URL的响应
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送GET请求出现异常!" + e);
        } finally {// 使用finally块来关闭输入流
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception ex) {
                System.out.println("关闭流异常");
            }
        }
        return result;
    }

四、写一个main方法执行调用就行了,注意要先运行python程序;

如果报错  请跟进报错解决吧,我貌似没有遇到什么问题;

在ip访问遇到了一个问题,启动了多个python ,导致ip访问不生效,把其他的相同端口python杀死就行了,

public static void main(String[] args) {
		windApi("114411","深圳");
		
	}

 

 

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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金融客户端是一款功能强大的金融信息终端软件,通过它可以获取大量丰富的金融数据和分析工具,以支持投资者进行有效的投资决策。而Python是一种高级编程语言,具有简洁易学、开源免费的特点,被广泛应用于数据分析、科学计算等领域。 在Wind金融客户端中,Python语言可以作为一种脚本语言和编程语言的接口,与Wind金融数据进行交互和处理。借助Python的强大数据分析能力和丰富的第三方库,我们可以灵活地进行定制化的金融数据分析,满足个性化的投资需求。 使用PythonWind金融客户端相结合,我们可以实现以下功能: 1. 数据获取:通过Wind提供的Python接口,可以轻松获取各类金融数据,如股票、指数、债券、期货等,以及各种衍生品数据,为投资决策提供基础数据支持。 2. 数据分析:利用Python的数据处理和分析能力,结合Wind提供的数据,可以进行技术分析、基本面分析、宏观经济分析等,挖掘投资机会。 3. 模型建立与优化:Python具有丰富的机器学习、深度学习等库,可以借助Wind数据进行模型建立、参数优化等,提高投资策略的效果。 4. 可视化展示:通过Python的可视化库,将数据以图形化形式展示,直观地呈现分析结果,方便决策者理解和使用。 总之,Wind金融客户端Python的结合,为金融数据分析提供了更大的灵活性和功能扩展性。无论是量化交易、风险管理还是资产配置等领域,都能通过Python编程实现更多定制化的需求,帮助投资者更准确地把握市场机遇。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值