Giter Club home page Giter Club logo

invest-openapi-java-sdk's Introduction

OpenAPI SDK для Java

Данный проект представляет собой инструментарий на языке Java для работы с OpenAPI Тинькофф Инвестиции, который можно использовать для создания торговых роботов.

Начало работы

Для сборки библиотеки понадобится Gradle версии не ниже 5, а также JDK версии не ниже 11. Затем в терминале перейдите в директорию проекта и выполните следующую команду

gradlew build

Или с помощью docker

docker run --rm -u gradle -v "$PWD":/home/gradle/project -w /home/gradle/project gradle:jdk11 gradle build

После успешной сборки в поддиректории sdk/build/libs появится jar-файл, который можно подключить к любому другому Java-проекту (или Java-совместимому, например, на таких языках, как Kotlin и Scala).

Где взять токен аутентификации?

В разделе инвестиций вашего личного кабинета tinkoff. Далее:

  • Перейдите в настройки
  • Проверьте, что функция "Подтверждение сделок кодом" отключена
  • Выпустите токен для торговли на бирже и режима "песочницы" (sandbox)
  • Скопируйте токен и сохраните, токен отображается только один раз, просмотреть его позже не получится, тем не менее вы можете выпускать неограниченное количество токенов

Документация

Для проекта можно сгенерировать javadoc-документацию с помощью команды

gradlew javadoc

Или с помощью docker

docker run --rm -u gradle -v "$PWD":/home/gradle/project -w /home/gradle/project gradle:jdk11 gradle javadoc

Единственной зависимостью в проекте явлется библиотека Jackson для работы с JSON.

Документацию непосредственно по OpenAPI можно найти по ссылке.

А если вкратце?

Для непосредственного взаимодействия с OpenAPI нужно создать подключение.

import ru.tinkoff.invest.openapi.wrapper.impl.ConnectionFactory;

var token = "super_token"; // токен авторизации
var connection = ConnectionFactory.connect(token, logger).join(); // содание подключения происходит асинхронно
// Для работы в "песочнице" используйте connectSandbox
var context = connection.context();

// Вся работа происходит через объект контекста, все запросы асинхронны
var portfolio = context.getPortfolio().join(); // получить текущий портфель

Для написания собственной торговой стратегии реализуйте интерфейс Strategy. Затем запустите исполнение стратегии через StrategyExecutor.

import ru.tinkoff.invest.openapi.Strategy;
import ru.tinkoff.invest.openapi.StrategyExecutor;

final var myStrategy = new Strategy() { /*...*/ };
final var strategyExecutor = new StrategyExecutor(context, strategy, logger);
strategyExecutor.run();

А пример готового робота есть?

В качестве примера готовой простой стратегии исследуйте устройство класса SimpleStopLossStrategy. Его использование продемонстрировано в подпроекте example. После сборки в поддиректории example/build/libs появится jar-файл, который запускает робота. При желании можно запустить робота в Docker-контейнере - есть соответствующий Dockerfile. После сборки проекта постройте docker-образ и запустите его.

docker build --tag=openapi-example .
docker run -ti --mount source=openapi_volume,target=/app/logs \
    -e "token=<auth_token>" \
    -e "ticker=<ticker>" \
    -e "interval=<candle_interval>" \
    -e "max_volume=<your_money>" \
    -e "use_sandbox=<true_or_false>" \
    openapi-example

В подключённой директории openapi_volume будет файл с подробным логом работы.

Краткое описание стратегии:

  • При старте происходит закупка заданного инструмента на сумму не превыщающую заданный в параметрах потолок. Наличие уже закупленного актива игнорируется.
  • Происходит слежение за ценами посредством изучения информации приходящей в свечах с заданным в параметрах интервалом. За текущую цену берётся средняя цена свечи.
  • В процессе слежения за ценой имитируются механизмы наподобие стоп-лоссов и тейк-профитов.
  • Если инструмент не торгуется, то робот бездействует.

ПРИВЕДЁННЫЙ В КАЧЕСТВЕ ПРИМЕРА РОБОТ ОЧЕНЬ ПРОСТ - НЕ РЕКОМЕНДУЕТСЯ ИСПОЛЬЗОВАТЬ ЕГО В РЕАЛЬНЫХ ТОРГАХ! В параметрах запуска можно указать включение режима "песочницы".

У меня есть вопрос

Основной репозиторий с документацией - в нем вы можете задать вопрос в Issues и получать информацию о релизах в Releases.

Если возникают вопросы по данному SDK, нашёлся баг или есть предложения по улучшению, то можно задать его в Issues, либо писать на почту:

invest-openapi-java-sdk's People

Contributors

alx-ef avatar hypeastrum avatar nikitamelnikov avatar vlakuc avatar xkrt avatar zlumyo avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.