Skip to content

jackblackjack/Insight.Tinkoff.InvestSdk

 
 

Repository files navigation

Unofficial Tinkoff Invest .Net Sdk

Build Status nuget version Nuget

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 сервисы инициализируются объектом конфигурации типа RestConfiguration:

  • string AccessToken - Токен доступа к API
  • string BaseUrl - Базовый адрес API, default = "https://api-invest.tinkoff.ru"
  • bool SandboxMode - Признак активна ли песочница, default = true

StreamMarketService инициализируется объектом конфигурации типа StreamConfiguration:

  • string AccessToken - Токен доступа к API
  • string Address - Адрес, по которому доступен WebSocket, default = "wss://api-invest.tinkoff.ru/openapi/md/v1/md-openapi/ws"

StreamMarketService

Механизм взаимодействия взят из официального sdk. 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 StreamConfiguration _config;
  
  public Program(StreamConfiguration 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; })
        .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();
    }
  }
}

Тесты

Вы можете запустить примитивные тесты для Rest сервисов добавив в файл Insight.Tinkoff.Invest.Tests/appsettings.json токен для сандбокса. По дефолту изменения файла игнорируются в .gitignore

About

Unofficial Tinkoff Invest OpenApi .Net/C# SDK

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 100.0%