tushare提供了丰富的金融数据接口,也提供了很方便的sdk,但是对于非python的程序员而言,在学习量化的过程中,学习理论的同时又要边学python边熟悉sdk,过程比较吃力,也影响学习效率。好在官方同时提供了通过http调用的方式,从而大家可以使用自己熟悉的语言来完成相关的操作。475582
如果你也使用java语言,强烈推荐大佬开源的一款java sdk,基本涵盖了官方提供的所有接口。
Tushare官网: tushare.pro
项目地址: github.com/QHh6eQ/tush…
有了现成java版本的sdk,那只需要在项目中添加依赖,就可以放心食用啦。
- 添加依赖
<dependency>
<groupId>com.github.qhh6eq</groupId>
<artifactId>tushare-pro-java-sdk</artifactId>
<version>2.0.5-RELEASE</version>
</dependency>
- 调用api
final TusharePro.Builder builder = new TusharePro.Builder()
.setToken("**********"); // 你的token
TusharePro.setGlobal(builder.build()); // 设置全局配置
final KeyValue<String, String> list_status = StockBasic.Params.list_status.value("L");
// 打印 上海交易所所有上市的沪股通股票 信息
TushareProService.stockBasic(new Request<StockBasicEntity>() {} // 使用全局配置
.allFields() // 所有字段
.param(StockBasic.Params.exchange.value("SSE")) // 参数
.param(list_status) // 参数
.param("is_hs", "H")) // 参数
.forEach(System.out::println);
final OkHttpClient defaultHttpClient = new OkHttpClient.Builder()
.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.NONE))
.connectTimeout(42, TimeUnit.SECONDS)
.writeTimeout(42, TimeUnit.SECONDS)
.readTimeout(42, TimeUnit.SECONDS)
.build();
// 一个完整的例子
TushareProService.stockBasic(
new Request<StockBasicEntity>(builder.copy() // 将配置拷贝
.setMaxRetries(5) // 设置重试次数, 默认为3
.setRetrySleepTimeUnit(TimeUnit.SECONDS) // 设置重试sleep单位, 默认毫秒
.setRetrySleepTimeOut(60L) // 设置重试sleep时间, 默认为0
.setRequestExecutor(Executors.newSingleThreadExecutor((r -> {
Thread thread = new Thread(r);
thread.setDaemon(true);
return thread;
}))) // 设置请求线程池, 默认CachedThreadPool
.setHttpFunction(requestBytes -> { // requestBytes -> function -> responseBytes 请使用阻塞的方式
try {
okhttp3.Request request = new okhttp3.Request.Builder()
.url("http://api.tushare.pro")
.post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), requestBytes))
.build();
return defaultHttpClient.newCall(request).execute().body().bytes();
}
catch (IOException e) {
e.printStackTrace();
}
return null;
})
.build()){}
.allFields()
.param(StockBasic.Params.exchange.value("SZSE"))
.param(list_status))
.stream()
.filter(x -> "银行".equals(x.getIndustry()))
.forEach(System.out::println);