在数字货币程序化交易开发中,通过Java程序自动获取交易所的币种列表(交易对)是构建量化策略、行情监控系统的第一步,本文将以技术教程的形式,讲解如何使用Java语言调用交易所公开API接口,获取并筛选币种信息。
特别提醒:请务必通过交易所官方网站获取API地址,谨防仿冒平台,涉及真实资金操作时请注意风险。
准备工作
开发环境
- JDK 11 及以上版本(使用内置 HttpClient)
- Maven 或 Gradle 项目管理工具
- JSON 解析库(本文使用 Jackson)
Maven 依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.16.0</version>
</dependency>
获取币种列表的入口接口
大多数主流交易所都提供公开的 REST API 用于查询交易对信息,通常无需身份验证即可访问,以查询现货交易对为例,接口路径一般为:
GET /api/v5/public/instruments?instType=SPOT
Java 代码实现
发送 HTTP 请求
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class MarketApiClient {
private final HttpClient httpClient;
public MarketApiClient() {
this.httpClient = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
}
public String getInstruments(String instType) throws Exception {
String url = "https://www.okx.com/api/v5/public/instruments?instType="
+ instType;
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response =
httpClient.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() != 200) {
throw new RuntimeException("请求失败,状态码:" + response.statusCode());
}
return response.body();
}
}
解析并筛选币种
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;
public class CoinSelector {
private static final ObjectMapper MAPPER = new ObjectMapper();
public List<String> filterCoins(String json, String keyword) throws Exception {
List<String> result = new ArrayList<>();
JsonNode root = MAPPER.readTree(json);
JsonNode data = root.get("data");
if (data != null && data.isArray()) {
for (JsonNode node : data) {
String instId = node.get("instId").asText(); // 如 BTC-USDT
String baseCcy = node.get("baseCcy").asText(); // 基础币种
String state = node