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调用 | 公司上市-至今 |
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个量化因子字段)
重要提示: 数据接受和数据处理务必放在两个线程中,不要阻塞数据接受!
订阅方式分为两种场景:
场景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.SZ、600000.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();
}
}获取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);支持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
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 - 每股指标
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);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);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);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通用工具
- 异步处理: WebSocket接收数据和业务处理务必分线程执行
- 批量查询: 合理设置批量参数,避免频繁调用
- 缓存策略: 对不常变化的数据(如股票列表、交易日历)进行缓存
- 连接池: HTTP请求建议使用连接池管理
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());
// 重试逻辑或错误处理
}- Token安全: 不要将Token硬编码在代码中,建议使用配置文件或环境变量
- 限流控制: 注意API调用频率,避免触发限流
- 数据验证: 对返回数据进行有效性验证
- 日志记录: 记录关键API调用和错误信息
访问 XTick官网 注册账号,登录后在个人中心获取Token。
SDK已实现自动重连机制,无需手动处理。如需自定义重连策略,可修改XTickWebSocketClient.onClose()方法。
period为分钟类型(1m、5m、15m、30m、1h),单次请求时间跨度最大为30天。
将code参数设置为"all",例如:
String result = marketApi.getKlineMarket(1, "all", "1d", "none",
"2025-01-15", "2025-01-15", token, MethodType.POST);- 沪深京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分更新 | 公司上市-至今 |
XTick提供了AI Skills开源项目,方便AI助手更好地理解和使用API:
- Gitee: https://gitee.com/xtick/skills
- GitHub: https://github.com/xticktop/skills
Skills文档路径:/doc/references
- 官方网站: http://www.xtick.top
- GitHub: https://github.com/xticktop/xtick
- Gitee: https://gitee.com/xtick
- 邮箱: xticktop@163.com
- QQ群: 加群备注:XTick
- 详细文档: 飞书文档
欢迎提交Issue和Pull Request!如果您发现bug或有改进建议,请通过以下方式反馈:
- 在GitHub/Gitee上提交Issue
- 发送邮件至 xticktop@163.com
- 加入QQ群交流
本项目仅供学习和研究使用,请勿用于商业用途。使用时请遵守XTick的使用条款。
感谢所有使用和支持XTick项目的开发者们!您的支持是我们持续维护和改进的动力。
⭐ 如果这个项目对您有帮助,请给我们一个Star! ⭐