dzhdmitry/tinkoff-invest-api
Composer 安装命令:
composer require dzhdmitry/tinkoff-invest-api
包简介
PHP client for Tinkoff Invest API
README 文档
README
Позволяет делать запросы к OpenAPI сервиса Тинькофф Инвестиции на языке PHP. Формат данных, получаемых по REST API, полностью соответствует схеме, указанной в документации для REST API.
В REST-клиенте реализованы следующие методы REST API:
- sandbox
- ✔ POST /sandbox/register
- ✔ POST /sandbox/currencies/balance
- ✔ POST /sandbox/positions/balance
- ✔ POST /sandbox/remove
- ✔ POST /sandbox/clear
- orders
- ✔ GET /orders
- ✔ POST /orders/limit-order
- ✔ POST /orders/market-order
- ✔ POST /orders/cancel
- portfolio
- ✔ GET /portfolio
- ✔ GET /portfolio/currencies
- market
- ✔ GET /market/stocks
- ✔ GET /market/bonds
- ✔ GET /market/etfs
- ✔ GET /market/currencies
- ✔ GET /market/orderbook
- ✔ GET /market/candles
- ✔ GET /market/search/by-figi
- ✔ GET /market/search/by-ticker
- operations
- ✔ GET /operations
- user
- ✔ GET /user/accounts
Также реализованы подписки на потоки данных по streaming протоколу:
- ✔ candle
- ✔ orderbook
- ✔ instrument_info
Требования
- PHP 7.4+
- Composer
Установка
- Установить клиент:
composer require dzhdmitry/tinkoff-invest-api
- Выполнить авторизацию, выпустить токены OpenAPI для биржи и Sandbox
Использование
// Пример 1. Получение списка акций use Dzhdmitry\TinkoffInvestApi\Rest\ClientFactory; // Создать клиент с токеном $client = (new ClientFactory())->create('YOUR_TRADE_TOKEN'); // Сделать запрос на получение списка акций $response = $client->market()->getStocks(); foreach ($response->getPayload()->getInstruments() as $instrument) { echo $instrument->getTicker() . "\n"; echo $instrument->getName() . "\n"; echo $instrument->getCurrency() . "\n"; }
// Пример 2. Получение портфеля клиента use Dzhdmitry\TinkoffInvestApi\Rest\ClientFactory; // Создать клиент с токеном $client = (new ClientFactory())->create('YOUR_TRADE_TOKEN'); $brokerAccountId = 'your-broker-account-id'; // Сделать запрос на получение портфеля клиента по счету $brokerAccountId $response = $client->portfolio()->get($brokerAccountId); foreach ($response->getPayload()->getPositions() as $position) { echo $position->getInstrumentType() . "\n"; echo $position->getTicker() . "\n"; echo $position->getName() . "\n"; echo $position->getBalance() . "\n"; }
// Пример 3. Создание лимитной заявки use Dzhdmitry\TinkoffInvestApi\Rest\ClientFactory; use Dzhdmitry\TinkoffInvestApi\Rest\Schema\Request\LimitOrderRequest; use Dzhdmitry\TinkoffInvestApi\Rest\Schema\Enum\OperationType; // Создать клиент с токеном $client = (new ClientFactory())->create('YOUR_TRADE_TOKEN'); // Сделать запрос на создание лимитной заявки на счете "Тинькофф" (Заявка на покупку 5 лотов USD по цене 75.20) $response = $client->orders()->postLimitOrder( 'BBG0013HGFT4', new LimitOrderRequest(5, OperationType::BUY, 75.20) ); $order = $response->getPayload(); echo $order->getOrderId() . "\n"; echo $order->getOperation() . "\n"; echo $order->getStatus() . "\n"; echo $order->getRequestedLots() . "\n"; echo $order->getExecutedLots() . "\n";
// Пример 4. Протокол Streaming use Dzhdmitry\TinkoffInvestApi\Streaming\ResponseDeserializerFactory; use Dzhdmitry\TinkoffInvestApi\Streaming\Schema\Payload\ErrorPayload; use Dzhdmitry\TinkoffInvestApi\Streaming\Schema\Payload\Orderbook; use Dzhdmitry\TinkoffInvestApi\Streaming\Schema\Request\OrderbookRequest; use Dzhdmitry\TinkoffInvestApi\Streaming\Schema\Response\AbstractResponse; use Dzhdmitry\TinkoffInvestApi\Streaming\Connection; use Dzhdmitry\TinkoffInvestApi\Streaming\WebsocketConnectionFactory; \Amp\Loop::run(function () { // Объект ResponseDeserializer можно использовать для десериализации ответов сервера $deserializer = (new ResponseDeserializerFactory())->create(); // Connection предоставляет упрощенный доступ к управлению подписками на потоки данных $connection = new Connection(yield WebsocketConnectionFactory::create('YOUR_TRADE_TOKEN')); // Подписка на информацию биржевой стакан по акциям Apple $connection->subscribe(new OrderbookRequest('BBG000B9XRY4', 4)); $i = 0; while ($message = yield $connection->receive()) { /** @var \Amp\Websocket\Message $message полученное из WebSocket сообщение */ /** @var AbstractResponse $response десериализованное тело сообщения */ $response = $deserializer->deserialize(yield $message->buffer()); echo $response->getEvent() . ' at ' . $response->getTime()->format(DATE_RFC3339) . "\n"; if ($response->getPayload() instanceof ErrorPayload) { echo ' - error: ' . $response->getPayload()->getError() . "\n"; } elseif ($response->getPayload() instanceof Orderbook) { echo ' - figi: ' . $response->getPayload()->getFigi() . "\n"; echo ' - bids: ' . count($response->getPayload()->getBids()) . "\n"; echo ' - asks: ' . count($response->getPayload()->getAsks()) . "\n"; } if (++$i >= 4) { // Закрыть соединение при получении 4 ответов $connection->close(); break; } // Получать каждое сообщение с интервалом в 1 сек yield \Amp\delay(1000); } });
Лицензия
Распространяется под лицензией MIT
dzhdmitry/tinkoff-invest-api 适用场景与选型建议
dzhdmitry/tinkoff-invest-api 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 226 次下载、GitHub Stars 达 10, 最近一次更新时间为 2020 年 09 月 08 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 dzhdmitry/tinkoff-invest-api 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 dzhdmitry/tinkoff-invest-api 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 226
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 10
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-09-08