Подбор облигаций для покупки доступных у брокера Тинькофф.
Часть данных собирается из Tinkoff Invest API, часть из API Московской биржи.
⚠ Поскольку сбор данных занимает долгое время, при запуске сервера запускается сбора данных по расписанию (раз в 4 часа).
Текущая версия рабочего приложения доступна по адресу https://bonds.rame0.ru/.
Из исходного кода:
# Загрузка исходного кода
$ git clone https://github.com/rame0/bonds-filter-tinkoff.git
Варианты запуска:
На данный момент рекомендуется запускать из исходников. Запуск из Docker сейчас требует наличие установленного и настроенного
Traefik
.
В папке server
, скопируйте файл .env.example
в .env
и откройте его в любом текстовом редакторе.
Для работы приложения нужно получить токен для доступа к Tinkoff Invest API. Для этого нужно:
- Зарегистрироваться в Tinkoff Invest.
- Перейти в личный кабинет.
- В самом низу страницы будет раздел "Токены Tinkoff Invest API"
- Нажать на кнопку "Создать токен".
- В открывшемся окне выбрать счет (или оставить по умолчанию "Все счета")
- Для большей безопасности, можно создать отдельный пустой счет и использовать его, поскольку приложению нужно только API. Ему не нужен доступ к портфелю и операциям.
- Поставить галочку на "Только для чтения" (это важно, чтобы приложение точно не могло ни чего делать со счетом)
- Нажать на кнопку "Выпустить токен"
- В открывшемся окне нажмите "Скопировать токен"
Этот токен нужно вставить в открытый файл .env
. В свойство TINKOFF_API_TOKEN
. Должно получиться так:
# Тинькоф API токен
TINKOFF_API_TOKEN=t.j6Ij**************tmQDoD4-J1LJc8f9sFvC7HWb****************************************UCEzA
# ID боевого счете
REAL_ACCOUNT_ID=
# ID счета в песочнице
SANDBOX_ACCOUNT_ID=
Все остальные свойства можно не заполнять. В данной версии они не нужны.
Сохраните и закройте файл.
- Node.js 16 или старше.
- pnpm 8 или старше.
- Можно использовать и
npm
, ноpnpm
работает быстрее и использует меньше места на диске. - Если используется
npm
, то вместоpnpm
в командах ниже нужно использоватьnpm
.
- Можно использовать и
Переходим в папку с проектом:
$ cd bonds-filter-tinkoff
Устанавливаем зависимости сервера:
$ cd server && pnpm install && cd ..
Устанавливаем зависимости UI:
$ cd UI && pnpm install && cd ..
Для запуска нужно открыть 2 окна терминала и в каждом из них перейти в папку с проектом.
В первом окне запускаем сервер:
$ cd server && pnpm start
Результат выполнения команды должен быть примерно такой:
> bonds-filter-tinkoff@1.1.0 start /home/ra/projects/bonds-filter-tinkoff/server
> ./node_modules/.bin/moleculer-runner --config dist/moleculer.config.js dist/src/services/{**,**/**,**/**/**}/*.service.js
[2023-08-13T13:04:08.740Z] INFO ra-243915/BROKER: Moleculer v0.14.28 is starting...
...
...
[2023-08-13T13:04:08.953Z] INFO ra-243915/$NODE: Service '$node' started.
[2023-08-13T13:04:08.953Z] INFO ra-243915/BONDS: Service 'bonds' started.
[2023-08-13T13:04:08.953Z] INFO ra-243915/API: API Gateway listening on http://0.0.0.0:3000
...
...
[2023-08-13T13:04:08.955Z] INFO ra-243915/BROKER: ✔ ServiceBroker with 3 service(s) started successfully in 9ms.
[2023-08-13T13:04:09.457Z] DEBUG ra-243915/BROKER: Broadcast '$api.aliases.regenerated' event.
[2023-08-13T13:04:09.457Z] DEBUG ra-243915/BROKER: Broadcast '$api.aliases.regenerated' local event.
Во втором окне запускаем UI:
$ cd UI && pnpm preview
Результат выполнения команды должен быть примерно такой:
> bonds-filter-tinkoff@0.0.0 preview /home/ra/projects/bonds-filter-tinkoff/UI
> vite preview
➜ Local: http://localhost:4173/
➜ Network: use --host to expose
Интерфейс доступен по адресу указанному в консоли (в примере выше это http://localhost:4173/
).
! Текущая реализация требует наличия Traefik
. В будущем это будет исправлено.
Нужно добавить в файл /etc/hosts
запись:
127.0.0.1 bonds-filter.local
Переходим в папку с проектом:
$ cd bonds-filter-tinkoff
Запускаем:
docker-compose up --build
После успешной сборки и запуска контейнеров, интерфейс будет доступен по адресу http://bonds-filter.local/.
В корне проекта есть файл kube.example.yaml
. В нем описаны все необходимые ресурсы для запуска приложения в
Kubernetes.
Также, в настройках ingress
закомментированы примеры настроек для Traefik
.
- Заменить
<YOUR_API_KEY>
на ваш ключ API Tinkoff. - Заменить в
ingress
с<YOUR_HOST>
на свой домен.