OpenAPI SDK для Java
РЕПОЗИТОРИЙ ЗАМОРОЖЕН! В связи с выходом новой реализации API, которая радикально отличается от той, с которой работает данный SDK, дальнейшее развитие этого репозитория остановлено. Для нового API создан новый репозиторий.
Данный проект представляет собой инструментарий на языке Java для работы с OpenAPI Тинькофф Инвестиции, который можно использовать для создания торговых роботов.
Начало работы
Для сборки библиотеки понадобится Apache Maven версии не ниже 3, а также JDK версии не ниже 8. Затем в терминале перейдите в директорию проекта и выполните следующую команду
mvn clean package
Или с помощью docker
# Linux/Mac версия
docker run -it --rm --name invest-openapi-java-sdk -v "$PWD":/usr/src/invest-openapi-java-sdk -w /usr/src/invest-openapi-java-sdk maven:3.6-jdk-11-slim mvn clean package
# Windows PowerShell версия
docker run -it --rm --name invest-openapi-java-sdk -v "$(pwd):/usr/src/invest-openapi-java-sdk".ToLower() -w /usr/src/invest-openapi-java-sdk maven:3.6-jdk-11-slim mvn clean package
Скорее всего вы увидите ошибки, связанные с подпроектом example - он требует JDK версии 11. Однако, сам SDK должен скомпилироваться.
После успешной сборки в поддиректории sdk-java8\target
появится jar-файл openapi-java-sdk-java8-<version>
, который можно подключить к любому
другому Java-проекту (или Java-совместимому, например, на таких языках, как Kotlin и Scala).
Где взять токен аутентификации?
В разделе инвестиций вашего личного кабинета tinkoff. Далее:
- Перейдите в настройки
- Проверьте, что функция "Подтверждение сделок кодом" отключена
- Выпустите токен для торговли на бирже и режима "песочницы" (sandbox)
- Скопируйте токен и сохраните, токен отображается только один раз, просмотреть его позже не получится, тем не менее вы можете выпускать неограниченное количество токенов
Документация
Для проекта можно сгенерировать javadoc-документацию с помощью команды
mvn javadoc:javadoc
Или с помощью docker
# Linux/Mac версия
docker run -it --rm --name invest-openapi-java-sdk -v "$PWD":/usr/src/invest-openapi-java-sdk -w /usr/src/invest-openapi-java-sdk maven:3.6-jdk-11-slim mvn javadoc:javadoc
Проект разделён на 3 части:
- core - содержит интерфейсы всех частей REST API и Streaming API, а также модели данных, которые они используют;
- sdk-java8 - содержит реализацию core-интерфейсов с использованием http-клиента из библиотеки OkHttp;
- example - простой пример использования core-интерфесов, реализованных в sdk-java8 (для компиляции необходим jdk11).
Модели данных core-части подготовлены для работы с JSON при помощи Jackson аннотаций.
Документацию непосредственно по OpenAPI можно найти по ссылке.
Каждая часть может быть подключена в качестве зависимости
<dependency>
<groupId>ru.tinkoff.invest</groupId>
<artifactId>openapi-java-sdk-core</artifactId>
<!-- <artifactId>openapi-java-sdk-java8</artifactId>-->
<!-- <artifactId>openapi-java-sdk-example</artifactId>-->
<version>0.4.1</version>
</dependency>
А если вкратце?
Для непосредственного взаимодействия с OpenAPI нужно создать подключение.
import org.reactivestreams.Subscriber;
import ru.tinkoff.invest.openapi.OpenApi;
import ru.tinkoff.invest.openapi.okhttp.OkHttpOpenApi;
import ru.tinkoff.invest.openapi.model.rest.*;
import ru.tinkoff.invest.openapi.model.streaming.*;
import java.util.concurrent.Executors;
class Example {
public static void main(String[] args) {
String token = "super_token"; // токен авторизации
boolean sandboxMode = true;
OpenApi api = new OkHttpOpenApi(token, sandboxMode);
if (api.isSandboxMode()) {
api.getSandboxContext().performRegistration(new SandboxRegisterRequest()).join();
}
Subscriber<StreamingEvent> listener = new Subscriber() { /* ваш вариант слушателя */ };
api.getStreamingContext().subscribe(listener);
// оформляем подписку на поток "свечей"
api.getStreamingContext().sendRequest(StreamingRequest.subscribeCandle("<какой-то figi>", CandleInterval.FIVE_MIN));
// Вся работа происходит через объекты контекста, все запросы асинхронны
Portfolio portfolio = api.getPortfolioContext.getPortfolio().join(); // получить текущий портфель
}
}
А пример готового робота есть?
Пример готового робота пока отсутствует, но планируется к добавлению.
У меня есть вопрос
Основной репозиторий с документацией - в нем вы можете задать вопрос в Issues и получать информацию о релизах в Releases.
Если возникают вопросы по данному SDK, нашёлся баг или есть предложения по улучшению, то можно задать его в Issues.