Skip to content

xticktop/DemoXtickJava

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 

Repository files navigation

XTick Java SDK

实时行情报价数据接口

XTick提供实时行情报价数据接入解决方案 - Java版本SDK

项目介绍

XTick Java SDK是一个专业的金融数据API客户端库,提供了全面、准确、稳定的行情数据接入能力。本SDK基于Java语言开发,支持HTTP REST API和WebSocket实时推送两种方式,帮助开发者和研究者快速构建创新的交易和分析工具。

主要特性:

  • 🚀 支持实时行情数据推送(WebSocket)
  • 📊 提供完整的K线数据查询(多周期、复权支持)
  • 💹 丰富的技术指标计算(MACD、KDJ、RSI等100+指标)
  • 💰 财务数据查询(资产负债表、利润表、现金流量表等)
  • 🔥 热点数据追踪(龙虎榜、市场情绪、板块概念)
  • ⚡ 量化因子数据(47个量化指标字段)
  • 🔄 支持数据全推和按需订阅

官方网站: http://www.xtick.top
GitHub地址: https://github.com/xticktop/xtick
Gitee地址: https://gitee.com/xtick

已接入数据预览

接入数据预览

数据类别 数据细分 更新方式 数据全推 获取方式 历史数据范围
tick数据 tick实时数据 实时更新 数据全推 api调用、ws推送

指数和北证:2025年10月-至今

A股、ETF:2025年2月-至今

tick历史数据 盘后更新 按个股获取 api调用
竞价数据 竞价实时数据 实时更新 数据全推 api调用、ws推送

竞价历史:2025年7月-至今

竞价历史详情:2025年2月-至今

竞价历史数据 9:25分更新 数据全推 api调用
竞价历史详情数据 9:25分更新 按个股获取 api调用
分钟数据 1分钟实时数据 实时更新 数据全推 ws推送、ws推送

分钟级别数据:2024年4月-至今

所有分钟周期数据,均支持复权

1分钟K线数据 按1分钟频率实时更新 数据全推 api调用、ws推送
其它分钟K线数据 按1分钟频率实时更新 按个股获取 api调用
日线数据 日线实时数据 实时更新 数据全推 api调用

日线级别数据:公司上市-至今

日线数据支持复权

日线历史数据 3:05分更新 数据全推 api调用
量化数据 量化因子实时数据 实时更新 数据全推 api调用、ws推送 2008年1月-至今
量化因子历史数据 3:05分更新 数据全推 api调用
核心指标 核心指标实时数据 实时更新 按个股获取 api调用 参考量化数据
金融指标 金融指标实时数据 实时更新 按个股获取 api调用

分钟级别指标:2024年4月-至今

日线级别指标:公司上市-至今

金融指标历史数据 3:05分更新 按个股获取 api调用
财务数据 盘后更新 盘后更新 按个股获取 api调用 2008年1月-至今
其它数据 交易日历 3:05分更新 按个股获取 api调用 公司上市-至今
股票列表 盘后更新 按个股获取 api调用 每日更新
复权变更数据 盘后更新 按个股获取 api调用 公司上市-至今

API接口文档

XTick Java SDK提供了完整的API接口封装,主要分为以下几个模块:

核心类说明

  • XTickStockApiClient - HTTP API客户端主类,提供所有REST API接口的示例调用
  • XTickWebSocketClient - WebSocket实时数据推送客户端
  • XTickMarketApi - 行情数据API(K线、股票信息、交易日历等)
  • XTickIndicatorApi - 技术指标API(100+金融指标计算)
  • XTickWatchApi - 盯盘数据API(五档行情、龙虎榜、市场情绪等)
  • XTickCoreApi - 核心数据API(分时成交、分价表、竞价数据等)
  • XTickHotApi - 热点数据API(板块概念、资金流向、新闻舆情等)
  • XTickQuantApi - 量化数据API(47个量化因子字段)

接口分类

1. WebSocket订阅接口

重要提示: 数据接受和数据处理务必放在两个线程中,不要阻塞数据接受!

订阅方式分为两种场景:

场景A:按交易所订阅

订阅代码 说明 推送频率
bid.1 沪深京A股集合竞价期间竞价数据 实时
quant.data.1 沪深京A股量化因子数据 1分钟
quant.time.1 沪深京A股量化因子数据 实时
tick.SZ.1 深交所A股的tick数据 实时
tick.SZ.10 深交所指数的tick数据 实时
tick.SZ.20 深交所ETF的tick数据 实时
tick.SH.1 上交所A股的tick数据 实时
tick.SH.10 上交所指数的tick数据 实时
tick.SH.20 上交所ETF的tick数据 实时
tick.BJ.1 北交所A股的tick数据 实时
tick.HK.3 港交所港股的tick数据 实时
minute.SZ.1 深交所A股的1分钟k线数据 实时
minute.SZ.10 深交所指数的1分钟k线数据 实时
minute.SZ.20 深交所ETF的1分钟k线数据 实时
minute.SH.1 上交所A股的1分钟k线数据 实时
minute.SH.10 上交所指数的1分钟k线数据 实时
minute.SH.20 上交所ETF的1分钟k线数据 实时
minute.BJ.1 北交所A股的1分钟k线数据 实时
minute.HK.3 港交所港股的1分钟k线数据 实时
kline.1m.1 沪深京A股的1分钟k线数据 1分钟
kline.1m.10 沪深京指数的1分钟k线数据 1分钟
kline.1m.20 沪深京ETF的1分钟k线数据 1分钟
kline.1m.3 港股的1分钟k线数据 1分钟

场晦B:按个股订阅

  • 格式:股票代码.市场代码,例如:000001.SZ600000.SH
  • 支持最多50个股票同时订阅
  • 推送频率:实时

使用示例:

import org.xtick.XTickWebSocketClient;
import com.google.common.collect.ImmutableList;
import java.util.List;

public class WebSocketDemo {
    public static void main(String[] args) throws Exception {
        // 订阅多个股票的tick数据
        List<String> authCodes = ImmutableList.of("000001.SZ", "600000.SH");
        
        // 或者订阅全市场数据
        // List<String> authCodes = ImmutableList.of("tick.SZ.1", "tick.SH.1");
        
        String user = URLEncoder.encode(
            JsonUtil.toJson(TickSubcribeInfo.builder()
                .token(XTickConst.token)
                .authCodes(authCodes)
                .build()), 
            StandardCharsets.UTF_8.toString());
        
        XTickWebSocketClient wsClient = new XTickWebSocketClient(
            URI.create(String.format("ws://ws.xtick.top/ws/%s", user)));
        wsClient.exec();
    }
}

2. 行情数据接口 (XTickMarketApi)

获取K线数据

XTickMarketApi marketApi = new XTickMarketApi();

// 参数说明:
// type: 股票类别 (1=沪深京A股, 3=港股, 10=沪深指数, 20=沪深ETF)
// code: 股票代码
// period: K线周期 (1m/5m/15m/30m/1h/1d/1w/1mon/1q/1hy/1y)
// fq: 除权方式 (none/front/back/front_ratio/back_ratio)
// startDate: 起始日期 (yyyy-MM-dd)
// endDate: 结束日期 (yyyy-MM-dd)
String result = marketApi.getKlineMarket(
    1, "000001", "1d", "front", 
    "2025-01-01", "2025-12-31", 
    token, MethodType.POST);

List<XTickKlineData> klines = JsonUtil.jsonToList(result, XTickKlineData.class);

获取实时分钟数据

// 获取当天实时1分钟K线数据
String result = marketApi.getKlineMinute(1, "000001", "front", token, MethodType.POST);

获取股票列表

// symbol可选值:all/sz/sh/bj/hk/index/cyb/kcb/etf/st/ts
String result = marketApi.getStockInfo("sz", token, MethodType.POST);
List<XTickStockInfo> stocks = JsonUtil.jsonToList(result, XTickStockInfo.class);

获取交易日历

String result = marketApi.getCalendar(
    "000001", "2025-01-01", "2025-12-31", 
    token, MethodType.POST);
List<XTickStockCalendar> calendars = JsonUtil.jsonToList(result, XTickStockCalendar.class);

3. 技术指标接口 (XTickIndicatorApi)

支持100+金融技术指标计算,包括:

常用指标示例:

XTickIndicatorApi indicatorApi = new XTickIndicatorApi();

// MACD指标
String result = indicatorApi.macd(
    1, "000001", "1d", "front",
    "2025-01-01", "2025-12-31",
    token, 
    2,   // inReal: 2=收盘价
    12,  // optInFastPeriod
    26,  // optInSlowPeriod
    9,   // optInSignalPeriod
    MethodType.POST);

// KDJ指标 (STOCH)
result = indicatorApi.stoch(
    1, "000001", "1d", "front",
    "2025-01-01", "2025-12-31",
    token,
    9,  // optInFastK_Period
    5,  // optInSlowK_Period
    2,  // optInSlowK_MAType (2=EMA)
    5,  // optInSlowD_Period
    2,  // optInSlowD_MAType (2=EMA)
    MethodType.POST);

// RSI指标
result = indicatorApi.rsi(
    1, "000001", "1d", "front",
    "2025-01-01", "2025-12-31",
    token,
    2,   // inReal: 2=收盘价
    14,  // optInTimePeriod
    MethodType.POST);

支持的指标列表(部分):

  • 趋势指标: ADX, ADXR, APO, AROON, MACD, MACDEXT, PPO, TRIX等
  • 震荡指标: CCI, CMO, MFI, RSI, STOCH, STOCHF, WILLR等
  • 成交量指标: AD, ADOSC, OBV, MFI等
  • 价格指标: AVGPRICE, MEDPRICE, TYPPRICE, WCLPRICE等
  • 希尔伯特变换: HTDCPERIOD, HTDCPHASE, HTPHASOR, HTSINE等
  • 其他指标: BOP, DX, MOM, PLUSDI, MINUSDI, ROC, ROCP等

详细指标文档请访问:http://www.xtick.top/indicator

4. 财务数据接口 (XTickMarketApi)

XTickMarketApi marketApi = new XTickMarketApi();

// 股东数
String result = marketApi.getHolderNum("000001", "2024-01-01", "2025-12-31", token, MethodType.POST);

// 财务指标
result = marketApi.getCoreFinancial("000001", "2024-01-01", "2025-12-31", token, MethodType.POST);

// 十大股东
result = marketApi.getTopHolder("000001", "2024-01-01", "2025-12-31", token, MethodType.POST);

// 十大流通股东
result = marketApi.getTopFlowHolder("000001", "2024-01-01", "2025-12-31", token, MethodType.POST);

财务报表类型:

  • Balance - 资产负债表
  • Income - 利润表
  • CashFlow - 现金流量表
  • Capital - 股本表
  • Holdernum - 股东数
  • Top10holder - 十大股东
  • Top10flowholder - 十大流通股东
  • Pershareindex - 每股指标

5. 盯盘数据接口 (XTickWatchApi)

XTickWatchApi watchApi = new XTickWatchApi();

// 买卖五档-实时数据
String result = watchApi.getFiveLevel(1, "000001", token, MethodType.POST);

// 分钟K线-实时数据
result = watchApi.getOrderMinute(1, "000001", "1", token, MethodType.POST);

// 日K线-实时数据
result = watchApi.getOrderDay(1, "000001", "1", token, MethodType.POST);


// 获取龙虎榜详情
result = watchApi.getLonghubang("2025-01-15", token, MethodType.POST);

// 获取市场成交额
result = watchApi.getAmount("2025-01-15", token, MethodType.POST);

6. 核心数据接口 (XTickCoreApi)

XTickCoreApi coreApi = new XTickCoreApi();

// 分时成交数据
String result = coreApi.getCoreFenbi(1, "000001", "2025-01-15", token, MethodType.POST);
List<XTickTimeDeal> fenbiDatas = JsonUtil.jsonToList(result, XTickTimeDeal.class);

// 分价表数据
result = coreApi.getCoreFenjia(1, "000001", "2025-01-15", token, MethodType.POST);
List<XTickTimePrice> fenjiaDatas = JsonUtil.jsonToList(result, XTickTimePrice.class);

// 竞价数据-实时
result = coreApi.getCoreBidTime(1, "000001", "", token, MethodType.POST);
List<XTickBidTime> bidTimes = JsonUtil.jsonToList(result, XTickBidTime.class);

// 停牌股票
result = coreApi.getCoreTingpai(1, "603311", "2025-01-01", "2025-12-31", token, MethodType.POST);

// ST股票历史
result = coreApi.getCoreSt(1, "600636", "2025-01-01", "2025-12-31", token, MethodType.POST);

// 复权变更数据
result = coreApi.getCoreChuQuan(1, "000001", "2025-01-01", "2025-12-31", token, MethodType.POST);

// 历史价格
result = coreApi.getCorePrice(1, "000001", 1, "2025-01-01", "2025-12-31", token, MethodType.POST);

7. 热点数据接口 (XTickHotApi)

XTickHotApi hotApi = new XTickHotApi();

// 资金流向
String result = hotApi.getHotMoney(1, "000001", "2025-01-15", "2025-01-15", token, MethodType.POST);

// 股票板块
result = hotApi.getHotBoard(1, 1, "2025-01-15", token, MethodType.POST);

// 新闻资讯
result = hotApi.getHotNews(30, "2025-01-15", token, MethodType.POST);

// 分时K线
result = hotApi.getHotTimekline(1, "000001", token, MethodType.POST);

// 板块信息
result = hotApi.getHotBk("sw3", token, MethodType.POST);

// 概念关联
result = hotApi.getHotGainian("000001", token, MethodType.POST);

// 市场情绪
result = hotApi.getHotEmotion(1, "2025-01-15", token, MethodType.POST);

// 竞价历史
result = hotApi.getHotBidHistory(1, "000001", "2025-01-15", "2025-01-15", token, MethodType.POST);

// 竞价详情
result = hotApi.getHotBidDetail(1, "000001", "2025-01-15", token, MethodType.POST);

8. 量化数据接口 (XTickQuantApi)

XTickQuantApi quantApi = new XTickQuantApi();

// 获取量化因子实时数据
String result = quantApi.getQunatData(1, "all", token, MethodType.POST);
QuantPacket quantData = JsonUtil.jsonToObj(result, QuantPacket.class);

// 转换为字段Map(按指标字段组织数据)
Map<String, Object> fieldMap = quantData.toFieldMap();

// 转换为股票Map(按个股组织数据)
Map<String, Object> stockMap = quantData.toStockMap();

// 获取量化因子历史数据
result = quantApi.getQuantHistory("2025-01-15", token, MethodType.POST);

量化因子字段定义(47个字段):

字段代码 字段名称 字段代码 字段名称
x001 昨收价 x025 流通市值
x002 最新价 x026 市净率
x003 开盘价 x027 换手率
x004 最高价 x028 实际换手率
x005 最低价 x029 涨幅
x006 成交量 x030 5日涨幅
x007 成交额 x031 10日涨幅
x008 涨跌 x032 20日涨幅
x009 振幅 x033 5日均线
x010 均价 x034 10日均线
x011 现均差 x035 20日均线
x012 涨停价 x036 30日均线
x013 跌停价 x037 60日均线
x014 涨停板(-1/1) x038 120日均线
x015 涨速 x039 MACD-DIF
x016 1分钟涨速 x040 MACD-DEA
x017 2分钟涨速 x041 MACD-MACD
x018 3分钟涨速 x042 KDJ-K
x019 4分钟涨速 x043 KDJ-D
x020 5分钟涨速 x044 KDJ-J
x021 静态市盈率 x045 RSI
x022 动态市盈率 x046 WR
x023 TTM市盈率 x047 CCI
x024 总市值

项目结构

src/main/java/org/xtick/
├── XTickStockApiClient.java      # HTTP API客户端主类(包含所有示例)
├── XTickWebSocketClient.java     # WebSocket实时数据推送客户端
├── api/                           # API接口模块
│   ├── XTickMarketApi.java       # 行情数据API
│   ├── XTickIndicatorApi.java    # 技术指标API
│   ├── XTickWatchApi.java        # 盯盘数据API
│   ├── XTickCoreApi.java         # 核心数据API
│   ├── XTickHotApi.java          # 热点数据API
│   ├── XTickQuantApi.java        # 量化数据API
│   └── XTickFinancialApi.java    # 财务数据API
├── bean/                          # 数据模型
│   ├── base/                      # 基础数据模型
│   ├── core/                      # 核心数据模型
│   ├── finance/                   # 财务数据模型
│   ├── hot/                       # 热点数据模型
│   └── ...                        # 其他数据模型
├── constant/                      # 常量定义
│   ├── XTickConst.java           # 系统常量
│   └── MethodType.java           # 请求方法类型
├── http/                          # HTTP工具
│   ├── HttpClientRest.java       # HTTP客户端封装
│   └── ...
└── util/                          # 工具类
    ├── JsonUtil.java             # JSON工具
    └── XTickUtil.java            # XTick通用工具

使用建议

1. 性能优化

  • 异步处理: WebSocket接收数据和业务处理务必分线程执行
  • 批量查询: 合理设置批量参数,避免频繁调用
  • 缓存策略: 对不常变化的数据(如股票列表、交易日历)进行缓存
  • 连接池: HTTP请求建议使用连接池管理

2. 错误处理

try {
    String result = marketApi.getKlineMarket(1, "000001", "1d", "front", 
        "2025-01-01", "2025-12-31", token, MethodType.POST);
    List<XTickKlineData> klines = JsonUtil.jsonToList(result, XTickKlineData.class);
    // 处理数据...
} catch (IOException e) {
    System.err.println("API调用失败: " + e.getMessage());
    // 重试逻辑或错误处理
}

3. 最佳实践

  • Token安全: 不要将Token硬编码在代码中,建议使用配置文件或环境变量
  • 限流控制: 注意API调用频率,避免触发限流
  • 数据验证: 对返回数据进行有效性验证
  • 日志记录: 记录关键API调用和错误信息

常见问题

Q1: 如何获取API Token?

访问 XTick官网 注册账号,登录后在个人中心获取Token。

Q2: WebSocket连接断开怎么办?

SDK已实现自动重连机制,无需手动处理。如需自定义重连策略,可修改XTickWebSocketClient.onClose()方法。

Q3: 分钟数据单次请求时间跨度限制?

period为分钟类型(1m、5m、15m、30m、1h),单次请求时间跨度最大为30天。

Q4: 如何获取全市场数据?

将code参数设置为"all",例如:

String result = marketApi.getKlineMarket(1, "all", "1d", "none", 
    "2025-01-15", "2025-01-15", token, MethodType.POST);

Q5: 支持哪些市场?

  • 沪深京A股 (type=1)
  • 港股 (type=3)
  • 沪深指数 (type=10)
  • 沪深ETF (type=20)

数据更新说明

数据类型 更新频率 历史数据范围
Tick实时数据 实时更新 2025年2月-至今(A股、ETF)
2025年10月-至今(指数、北证)
Tick历史数据 盘后更新 同上
竞价实时数据 实时更新 2025年7月-至今
竞价历史详情 9:25分更新 2025年2月-至今
1分钟K线 实时更新 2024年4月-至今
其他周期K线 实时更新 2024年4月-至今(支持复权)
日线数据 实时更新 公司上市-至今(支持复权)
量化因子 实时更新 2008年1月-至今
财务数据 盘后更新 2008年1月-至今
交易日历 3:05分更新 公司上市-至今

Skills资源

XTick提供了AI Skills开源项目,方便AI助手更好地理解和使用API:

Skills文档路径:/doc/references

社区与支持

贡献指南

欢迎提交Issue和Pull Request!如果您发现bug或有改进建议,请通过以下方式反馈:

  1. 在GitHub/Gitee上提交Issue
  2. 发送邮件至 xticktop@163.com
  3. 加入QQ群交流

许可证

本项目仅供学习和研究使用,请勿用于商业用途。使用时请遵守XTick的使用条款。

致谢

感谢所有使用和支持XTick项目的开发者们!您的支持是我们持续维护和改进的动力。


⭐ 如果这个项目对您有帮助,请给我们一个Star! ⭐

About

实时股票数据API,实时Tick数据,买卖五档数据,股票高频数据,tick数据,一分钟数据,五分钟数据,实时数据

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages