当前位置: 首页 > article >正文

JAVA接入WebScoket行情接口

Java脚好用的库很多,开发效率一点不输Python。如果是日内策略,需要更实时的行情数据,不然策略滑点太大,容易跑偏结果。

之前爬行情网站提供的level1行情接口,实测平均更新延迟达到了6秒,超过10只股票并发请求频率过快很容易封IP。后面又尝试了买代理IP来请求,成本太高而且不稳定。

在Github上看到一个行情包,对接的是WebSocket协议,找到了一个Java版本封装的包,记录一下:

package com.client;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.ByteBuffer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.Inflater;
import java.util.zip.DataFormatException;

public class Client extends WebSocketClient {

    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");

    public Client(String url) throws URISyntaxException {
        super(new URI(url));
    }

    @Override
    public void onOpen(ServerHandshake shake) {
        //发送订阅命令
        this.send("add=lv1_600519,lv2_600519");
    }

    /**
     * 命令返回文本消息
     */
    @Override
    public void onMessage(String paramString) {
        System.out.println(sdf.format(new Date()) + " Text响应:" + paramString);
    }

    @Override
    public void onClose(int paramInt, String paramString, boolean paramBoolean) {
        System.out.println("连接关闭");
    }

    @Override
    public void onError(Exception e) {
        System.out.println("连接异常" + e);
    }

    /**
     * 行情接收处理
     */
    @Override
    public void onMessage(ByteBuffer bytes) {
        super.onMessage(bytes);
        String s="";
        try {
            //二进制解压缩
            byte[] dec=decompress(bytes.array());
            s = new String(dec, "UTF-8");
        }catch (IOException e){
            System.err.println("Binary解析IO异常:"+e.getMessage());
            return;
        }
        catch (DataFormatException e){
            System.err.println("Binary解析格式异常:"+e.getMessage());
            return;
        }
        System.out.println(sdf.format(new Date()) + " Binary响应:" + s);
    }

    /**
     * 解压缩方法
     */
    public static byte[] decompress(byte[] compressedData) throws DataFormatException {
        Inflater inflater = new Inflater(true);
        inflater.setInput(compressedData);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream(compressedData.length);
        byte[] buffer = new byte[1024];
        while (!inflater.finished()) {
            int count = inflater.inflate(buffer);
            outputStream.write(buffer, 0, count);
        }
        inflater.end();
        return outputStream.toByteArray();
    }
}

使用:

package com.client;

import java.net.URISyntaxException;

public class Main {
    public static void main(String[] args) throws URISyntaxException {
        String wsUrl = "ws://<服务器地址>?token=<token>";
        Client fd = new Client(wsUrl);
        fd.connect();
    }
}

引用地址:https://github.com/freevolunteer/bondTrader/blob/main/pyscript/jvUtil/HanqQing.py

订阅指令参考:JAVA量化之WebScoket行情接入


http://www.kler.cn/a/397478.html

相关文章:

  • 图形几何之美系列:二维凸包艺术赏析
  • JavaSE常用API-日期(计算两个日期时间差-高考倒计时)
  • Python学习------第八天
  • Java21和Java8性能优化详细对比
  • Wxml2Canvas小程序将dom转为图片,bug总结
  • SpringBoot整合Mybatis-Plus实践汇总
  • 高精度加法高精度乘法
  • 关键JavaScript进行表单验证:提升用户体验与数据完整性
  • 事务一致性的理解
  • 网络工程师教程第6版(2024年最新版)
  • 硬石电机学习2024116
  • element中封装axios如何实现请求函数自定义loading
  • 行车记录仪乱码解决方案与预防策略
  • 能源革命持续发力,华普微隔离器助力储能行业“向绿向新”
  • 米家电动牙刷拆解学习
  • MATLAB绘图
  • 【Linux】--环境变量
  • html5表单属性的用法
  • MySQL数据库1——数据库概论
  • Spring Boot 集成 RabbitMQ:消息生产与消费详解
  • MySQL初学之旅(3)约束
  • CentOS8 启动错误,enter emergency mode ,开机直接进入紧急救援模式,报错 Failed to mount /home 解决方法
  • Java 简单家居开关系统
  • HTML之表格学习记录
  • fine_tune_tansat2
  • 如何利用知识中台实现客户服务自动化?