Insight.Tinkoff.InvestSdk
1.0.0
See the version list below for details.
dotnet add package Insight.Tinkoff.InvestSdk --version 1.0.0
NuGet\Install-Package Insight.Tinkoff.InvestSdk -Version 1.0.0
<PackageReference Include="Insight.Tinkoff.InvestSdk" Version="1.0.0" />
paket add Insight.Tinkoff.InvestSdk --version 1.0.0
#r "nuget: Insight.Tinkoff.InvestSdk, 1.0.0"
// Install Insight.Tinkoff.InvestSdk as a Cake Addin #addin nuget:?package=Insight.Tinkoff.InvestSdk&version=1.0.0 // Install Insight.Tinkoff.InvestSdk as a Cake Tool #tool nuget:?package=Insight.Tinkoff.InvestSdk&version=1.0.0
Unofficial Tinkoff Invest .Net Sdk
About
Данное sdk предназначено для взаимодействия с OpenApi Тинькофф Инвестиций. Так как на момент публикации официального sdk больше половины работы над данным проектом было закончено, я решил, что буду пользоваться им и поддерживать по мере возможности. Вопросы и предложения прошу в Issues.
Get started
Для начала вам необходимо получить токен, процедура подробно описана здесь
Структура SDK
Взаимодействие с API происходит через следующие сервисы:
- MarketService - Получение информации об инструментах (Rest, реализует IMarketService)
- OrderService - Получение информации о лимитных заявках, а также их размещение (Rest, реализует IOrderService)
- PortfolioService - Получение информации о портфолио (Rest, реализует IPortfolioService)
- OperationService - Получение информации об операциях (Rest, реализует IOperationService)
- SandboxService - Взаимодействие с песочницей (Rest, реализует ISandboxService)
- StreamMarketService - Взаимодействие с API по протоколу WebSocket (WebSocket, Реализует IStreamMarketService)
Все Rest сервисы инициализируются объектом конфигурации типа TinkoffRestServiceConfiguration:
- string AccessToken - Токен доступа к API
- string BaseUrl - Базовый адрес API, default = "https://api-invest.tinkoff.ru"
- bool SandboxMode - Признак активна ли песочница, default = true
StreamMarketService инициализируется объектом конфигурации типа StreamMarketServiceConfiguration:
- string Token - Токен доступа к API
- string Address - Адрес, по которому доступен WebSocket
StreamMarketService
Данный сервис реализует интерфейс IStreamMarketService:
public interface IStreamMarketService
{
Task Send(IWsMessage message);
IObservable<WsMessage> AsObservable();
}
Соотвественно метод Send служит для отправки сообщений на подписку/отписку от событий. Типы исходящих сообщений реализуют интерфейс IWsMessage: SubscribeCandleMessage, UnsubscribeCandleMessage, SubscribeOrderBookMessage, UnsubscribeOrderBookMessage, SubscribeInstrumentInfoMessage, UnsubscribeInstrumentInfoMessage; Метод AsObservable() реализован с помощью System.Reactive, а именно с помощью Observable.FromEventPattern, благодаря этому вы получаете Push коллекцию, в которую будут приходить сообщения типа WsMessage: CandleMessage, OrderBookMessage, InstrumentInfoMessage. На выходе сообщения десериализуются в правильный тип на основе свойства Event, вы можете использовать Pattern Matching. Пример кода:
public sealed class Program {
private StreamMarketServiceConfiguration _config;
public Program(StreamMarketServiceConfiguration config) {
if(config == null)
throw new ArgumentNullException(nameof(config));
_config = config;
}
public async Task DoWork() {
using (var client = new StreamMarketService(_config))
{
IDisposable subscription = client
.AsObservable()
.Do(x =>
{
switch (x)
{
case CandleMessage message:
Console.WriteLine($"type: {message}, figi: {message.Payload.Figi}");
break;
default:
Console.WriteLine("Unknown message type");
break;
}
}, ex => { throw ex; })
.RetryAfterDelay(TimeSpan.FromSeconds(1))
.Subscribe();
await client.Send(new SubscribeCandleMessage
{
Figi = "{figi}",
Interval = CandleInterval.Minute
});
await Task.Delay(1000 * 5);
await client.Send(new UnsubscribeCandleMessage()
{
Figi = "{figi}",
Interval = CandleInterval.Minute
});
subscription?.Dispose()
}
}
}
RetryAfterDelay - лечит разрыв соединения.
Тесты
Вы можете запустить примитивные тесты для Rest сервисов добавив в файл Insight.Tinkoff.Invest.Tests/appsettings.json токен для сандбокса. По дефолту изменения файла игнорируются в .gitignore
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 is compatible. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
- MimeMapping (>= 1.0.1.17)
- Newtonsoft.Json (>= 12.0.2)
- PureWebSockets (>= 3.0.0)
- System.Reactive (>= 4.1.6)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
OpenApi 19.2 supported