sdk

package module
v0.6.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 29, 2020 License: Apache-2.0 Imports: 13 Imported by: 19

README

OpenAPI Go SDK

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

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

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

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

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

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

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

Быстрый старт

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

Примеры использования SDK находятся в директории examples

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

Основной репозиторий с документацией — в нем вы можете задать вопрос в Issues и получать информацию о релизах в Releases. Если возникают вопросы по данному SDK, нашёлся баг или есть предложения по улучшению, то можно задать его в Issues

Documentation

Overview

Package sdk provides REST and Stream clients for Tinkoff Invest OpenAPI. More documentation https://api-invest.tinkoff.ru/openapi/docs/.

Index

Constants

View Source
const DefaultAccount = "" // Номер счета (по умолчанию - Тинькофф)
View Source
const MaxOrderbookDepth = 20
View Source
const RestApiURL = "https://api-invest.tinkoff.ru/openapi"
View Source
const StreamingApiURL = "wss://api-invest.tinkoff.ru/openapi/md/v1/md-openapi/ws"

Variables

View Source
var ErrDepth = errors.Errorf("invalid depth. Should be in interval 0 < x <= %d", MaxOrderbookDepth)
View Source
var ErrForbidden = errors.New("invalid token")
View Source
var ErrNotFound = errors.New("Not found")
View Source
var ErrUnauthorized = errors.New("token not provided")

Functions

This section is empty.

Types

type Account added in v0.4.0

type Account struct {
	Type AccountType `json:"brokerAccountType"`
	ID   string      `json:"brokerAccountId"`
}

type AccountType added in v0.4.0

type AccountType string
const (
	AccountTinkoff    AccountType = "Tinkoff"
	AccountTinkoffIIS AccountType = "TinkoffIis"
)

type Candle

type Candle struct {
	FIGI       string         `json:"figi"`
	Interval   CandleInterval `json:"interval"`
	OpenPrice  float64        `json:"o"`
	ClosePrice float64        `json:"c"`
	HighPrice  float64        `json:"h"`
	LowPrice   float64        `json:"l"`
	Volume     float64        `json:"v"`
	TS         time.Time      `json:"time"`
}

type CandleEvent

type CandleEvent struct {
	FullEvent
	Candle Candle `json:"payload"`
}

type CandleInterval

type CandleInterval string
const (
	CandleInterval1Min   CandleInterval = "1min"
	CandleInterval2Min   CandleInterval = "2min"
	CandleInterval3Min   CandleInterval = "3min"
	CandleInterval5Min   CandleInterval = "5min"
	CandleInterval10Min  CandleInterval = "10min"
	CandleInterval15Min  CandleInterval = "15min"
	CandleInterval30Min  CandleInterval = "30min"
	CandleInterval1Hour  CandleInterval = "hour"
	CandleInterval2Hour  CandleInterval = "2hour"
	CandleInterval4Hour  CandleInterval = "4hour"
	CandleInterval1Day   CandleInterval = "day"
	CandleInterval1Week  CandleInterval = "week"
	CandleInterval1Month CandleInterval = "month"
)

type Currency

type Currency string
const (
	RUB Currency = "RUB"
	USD Currency = "USD"
	EUR Currency = "EUR"
	TRY Currency = "TRY"
	JPY Currency = "JPY"
	CNY Currency = "CNY"
	CHF Currency = "CHF"
	GBP Currency = "GBP"
	HKD Currency = "HKD"
)

type CurrencyBalance

type CurrencyBalance struct {
	Currency Currency `json:"currency"`
	Balance  float64  `json:"balance"`
	Blocked  float64  `json:"blocked"`
}

type Error

type Error struct {
	RequestID string `json:"request_id,omitempty"`
	Error     string `json:"error"`
}

type ErrorEvent

type ErrorEvent struct {
	FullEvent
	Error Error `json:"payload"`
}

type Event

type Event struct {
	Name string `json:"event"`
}

type FullEvent added in v0.6.0

type FullEvent struct {
	Name string    `json:"event"`
	Time time.Time `json:"time"`
}

type Instrument

type Instrument struct {
	FIGI              string         `json:"figi"`
	Ticker            string         `json:"ticker"`
	ISIN              string         `json:"isin"`
	Name              string         `json:"name"`
	MinPriceIncrement float64        `json:"minPriceIncrement"`
	Lot               int            `json:"lot"`
	Currency          Currency       `json:"currency"`
	Type              InstrumentType `json:"type"`
}

type InstrumentInfo

type InstrumentInfo struct {
	FIGI              string        `json:"figi"`
	TradeStatus       TradingStatus `json:"trade_status"`
	MinPriceIncrement float64       `json:"min_price_increment"`
	Lot               float64       `json:"lot"`
	AccruedInterest   float64       `json:"accrued_interest,omitempty"`
	LimitUp           float64       `json:"limit_up,omitempty"`
	LimitDown         float64       `json:"limit_down,omitempty"`
}

type InstrumentInfoEvent

type InstrumentInfoEvent struct {
	FullEvent
	Info InstrumentInfo `json:"payload"`
}

type InstrumentType added in v0.3.0

type InstrumentType string
const (
	InstrumentTypeStock    InstrumentType = "Stock"
	InstrumentTypeCurrency InstrumentType = "Currency"
	InstrumentTypeBond     InstrumentType = "Bond"
	InstrumentTypeEtf      InstrumentType = "Etf"
)

type Logger

type Logger interface {
	Printf(format string, args ...interface{})
}

type MoneyAmount

type MoneyAmount struct {
	Currency Currency `json:"currency"`
	Value    float64  `json:"value"`
}

type Operation

type Operation struct {
	ID               string          `json:"id"`
	Status           OperationStatus `json:"status"`
	Trades           []Trade         `json:"trades"`
	Commission       MoneyAmount     `json:"commission"`
	Currency         Currency        `json:"currency"`
	Payment          float64         `json:"payment"`
	Price            float64         `json:"price"`
	Quantity         int             `json:"quantity"`
	QuantityExecuted int             `json:"quantityExecuted"`
	FIGI             string          `json:"figi"`
	InstrumentType   InstrumentType  `json:"instrumentType"`
	IsMarginCall     bool            `json:"isMarginCall"`
	DateTime         time.Time       `json:"date"`
	OperationType    OperationType   `json:"operationType"`
}

type OperationStatus

type OperationStatus string
const (
	OperationStatusDone     OperationStatus = "Done"
	OperationStatusDecline  OperationStatus = "Decline"
	OperationStatusProgress OperationStatus = "Progress"
)

type OperationType

type OperationType string
const (
	BUY                             OperationType = "Buy"
	SELL                            OperationType = "Sell"
	OperationTypeBrokerCommission   OperationType = "BrokerCommission"
	OperationTypeExchangeCommission OperationType = "ExchangeCommission"
	OperationTypeServiceCommission  OperationType = "ServiceCommission"
	OperationTypeMarginCommission   OperationType = "MarginCommission"
	OperationTypeOtherCommission    OperationType = "OtherCommission"
	OperationTypePayIn              OperationType = "PayIn"
	OperationTypePayOut             OperationType = "PayOut"
	OperationTypeTax                OperationType = "Tax"
	OperationTypeTaxLucre           OperationType = "TaxLucre"
	OperationTypeTaxDividend        OperationType = "TaxDividend"
	OperationTypeTaxCoupon          OperationType = "TaxCoupon"
	OperationTypeTaxBack            OperationType = "TaxBack"
	OperationTypeRepayment          OperationType = "Repayment"
	OperationTypePartRepayment      OperationType = "PartRepayment"
	OperationTypeCoupon             OperationType = "Coupon"
	OperationTypeDividend           OperationType = "Dividend"
	OperationTypeSecurityIn         OperationType = "SecurityIn"
	OperationTypeSecurityOut        OperationType = "SecurityOut"
	OperationTypeBuyCard            OperationType = "BuyCard"
)

type Order

type Order struct {
	ID            string        `json:"orderId"`
	FIGI          string        `json:"figi"`
	Operation     OperationType `json:"operation"`
	Status        OrderStatus   `json:"status"`
	RequestedLots int           `json:"requestedLots"`
	ExecutedLots  int           `json:"executedLots"`
	Type          OrderType     `json:"type"`
	Price         float64       `json:"price"`
}

type OrderBook

type OrderBook struct {
	FIGI  string          `json:"figi"`
	Depth int             `json:"depth"`
	Bids  []PriceQuantity `json:"bids"`
	Asks  []PriceQuantity `json:"asks"`
}

type OrderBookEvent

type OrderBookEvent struct {
	FullEvent
	OrderBook OrderBook `json:"payload"`
}

type OrderStatus

type OrderStatus string
const (
	OrderStatusNew            OrderStatus = "New"
	OrderStatusPartiallyFill  OrderStatus = "PartiallyFill"
	OrderStatusFill           OrderStatus = "Fill"
	OrderStatusCancelled      OrderStatus = "Cancelled"
	OrderStatusReplaced       OrderStatus = "Replaced"
	OrderStatusPendingCancel  OrderStatus = "PendingCancel"
	OrderStatusRejected       OrderStatus = "Rejected"
	OrderStatusPendingReplace OrderStatus = "PendingReplace"
	OrderStatusPendingNew     OrderStatus = "PendingNew"
)

type OrderType added in v0.3.0

type OrderType string
const (
	OrderTypeLimit  OrderType = "Limit"
	OrderTypeMarket OrderType = "Market"
)

type PlacedOrder added in v0.5.0

type PlacedOrder struct {
	ID            string        `json:"orderId"`
	Operation     OperationType `json:"operation"`
	Status        OrderStatus   `json:"status"`
	RejectReason  string        `json:"rejectReason"`
	RequestedLots int           `json:"requestedLots"`
	ExecutedLots  int           `json:"executedLots"`
	Commission    MoneyAmount   `json:"commission"`
	Message       string        `json:"message,omitempty"`
}

type Portfolio

type Portfolio struct {
	Positions  []PositionBalance
	Currencies []CurrencyBalance
}

type PositionBalance

type PositionBalance struct {
	FIGI                      string         `json:"figi"`
	Ticker                    string         `json:"ticker"`
	ISIN                      string         `json:"isin"`
	InstrumentType            InstrumentType `json:"instrumentType"`
	Balance                   float64        `json:"balance"`
	Blocked                   float64        `json:"blocked"`
	Lots                      int            `json:"lots"`
	ExpectedYield             MoneyAmount    `json:"expectedYield"`
	AveragePositionPrice      MoneyAmount    `json:"averagePositionPrice"`
	AveragePositionPriceNoNkd MoneyAmount    `json:"averagePositionPriceNoNkd"`
	Name                      string         `json:"name"`
}

type PriceQuantity

type PriceQuantity [2]float64 // 0 - price, 1 - quantity

type RestClient

type RestClient struct {
	// contains filtered or unexported fields
}

func NewRestClient

func NewRestClient(token string) *RestClient

func NewRestClientCustom

func NewRestClientCustom(token, apiURL string) *RestClient

func (*RestClient) Accounts added in v0.4.0

func (c *RestClient) Accounts(ctx context.Context) ([]Account, error)

func (*RestClient) Bonds

func (c *RestClient) Bonds(ctx context.Context) ([]Instrument, error)

func (*RestClient) Candles

func (c *RestClient) Candles(ctx context.Context, from, to time.Time, interval CandleInterval, figi string) ([]Candle, error)

func (*RestClient) Currencies

func (c *RestClient) Currencies(ctx context.Context) ([]Instrument, error)

func (*RestClient) CurrenciesPortfolio

func (c *RestClient) CurrenciesPortfolio(ctx context.Context, accountID string) ([]CurrencyBalance, error)

func (*RestClient) ETFs

func (c *RestClient) ETFs(ctx context.Context) ([]Instrument, error)

func (*RestClient) InstrumentByFIGI added in v0.6.0

func (c *RestClient) InstrumentByFIGI(ctx context.Context, figi string) (Instrument, error)

func (*RestClient) InstrumentByTicker added in v0.6.0

func (c *RestClient) InstrumentByTicker(ctx context.Context, ticker string) ([]Instrument, error)

func (*RestClient) LimitOrder

func (c *RestClient) LimitOrder(ctx context.Context, accountID, figi string, lots int, operation OperationType, price float64) (PlacedOrder, error)

func (*RestClient) MarketOrder added in v0.5.0

func (c *RestClient) MarketOrder(ctx context.Context, accountID, figi string, lots int, operation OperationType) (PlacedOrder, error)

func (*RestClient) Operations

func (c *RestClient) Operations(ctx context.Context, accountID string, from, to time.Time, figi string) ([]Operation, error)

func (*RestClient) OrderCancel

func (c *RestClient) OrderCancel(ctx context.Context, accountID, id string) error

func (*RestClient) Orderbook

func (c *RestClient) Orderbook(ctx context.Context, depth int, figi string) (RestOrderBook, error)

func (*RestClient) Orders

func (c *RestClient) Orders(ctx context.Context, accountID string) ([]Order, error)

func (*RestClient) Portfolio

func (c *RestClient) Portfolio(ctx context.Context, accountID string) (Portfolio, error)

func (*RestClient) PositionsPortfolio

func (c *RestClient) PositionsPortfolio(ctx context.Context, accountID string) ([]PositionBalance, error)

func (*RestClient) Stocks

func (c *RestClient) Stocks(ctx context.Context) ([]Instrument, error)

type RestOrderBook

type RestOrderBook struct {
	FIGI              string              `json:"figi"`
	Depth             int                 `json:"depth"`
	Bids              []RestPriceQuantity `json:"bids"`
	Asks              []RestPriceQuantity `json:"asks"`
	TradeStatus       TradingStatus       `json:"tradeStatus"`
	MinPriceIncrement float64             `json:"minPriceIncrement"`
	LastPrice         float64             `json:"lastPrice,omitempty"`
	ClosePrice        float64             `json:"closePrice,omitempty"`
	LimitUp           float64             `json:"limitUp,omitempty"`
	LimitDown         float64             `json:"limitDown,omitempty"`
	FaceValue         float64             `json:"faceValue,omitempty"`
}

type RestPriceQuantity

type RestPriceQuantity struct {
	Price    float64 `json:"price"`
	Quantity float64 `json:"quantity"`
}

type SandboxRestClient

type SandboxRestClient struct {
	*RestClient
}

func NewSandboxRestClient

func NewSandboxRestClient(token string) *SandboxRestClient

func NewSandboxRestClientCustom

func NewSandboxRestClientCustom(token, apiURL string) *SandboxRestClient

func (*SandboxRestClient) Clear

func (c *SandboxRestClient) Clear(ctx context.Context, accountID string) error

func (*SandboxRestClient) Register

func (c *SandboxRestClient) Register(ctx context.Context, accountType AccountType) (Account, error)

func (*SandboxRestClient) Remove added in v0.4.0

func (c *SandboxRestClient) Remove(ctx context.Context, accountID string) error

func (*SandboxRestClient) SetCurrencyBalance

func (c *SandboxRestClient) SetCurrencyBalance(ctx context.Context, accountID string, currency Currency, balance float64) error

func (*SandboxRestClient) SetPositionsBalance

func (c *SandboxRestClient) SetPositionsBalance(ctx context.Context, accountID, figi string, balance float64) error

type StreamingClient

type StreamingClient struct {
	// contains filtered or unexported fields
}

func NewStreamingClient

func NewStreamingClient(logger Logger, token string) (*StreamingClient, error)

func NewStreamingClientCustom

func NewStreamingClientCustom(logger Logger, token, apiURL string) (*StreamingClient, error)

func (*StreamingClient) Close

func (c *StreamingClient) Close() error

func (*StreamingClient) RunReadLoop

func (c *StreamingClient) RunReadLoop(fn func(event interface{}) error) error

func (*StreamingClient) SubscribeCandle

func (c *StreamingClient) SubscribeCandle(figi string, interval CandleInterval, requestID string) error

func (*StreamingClient) SubscribeInstrumentInfo

func (c *StreamingClient) SubscribeInstrumentInfo(figi, requestID string) error

func (*StreamingClient) SubscribeOrderbook

func (c *StreamingClient) SubscribeOrderbook(figi string, depth int, requestID string) error

func (*StreamingClient) UnsubscribeCandle

func (c *StreamingClient) UnsubscribeCandle(figi string, interval CandleInterval, requestID string) error

func (*StreamingClient) UnsubscribeInstrumentInfo

func (c *StreamingClient) UnsubscribeInstrumentInfo(figi, requestID string) error

func (*StreamingClient) UnsubscribeOrderbook

func (c *StreamingClient) UnsubscribeOrderbook(figi string, depth int, requestID string) error

type Trade

type Trade struct {
	ID       string    `json:"tradeId"`
	DateTime time.Time `json:"date"`
	Price    float64   `json:"price"`
	Quantity int       `json:"quantity"`
}

type TradingError

type TradingError struct {
	TrackingID string `json:"trackingId"`
	Status     string `json:"status"`
	Hint       string
	Payload    struct {
		Message string `json:"message"`
		Code    string `json:"code"`
	} `json:"payload"`
}

func (TradingError) Error

func (t TradingError) Error() string

func (TradingError) InvalidTokenSpace added in v0.4.0

func (t TradingError) InvalidTokenSpace() bool

func (TradingError) NotEnoughBalance

func (t TradingError) NotEnoughBalance() bool

type TradingStatus

type TradingStatus string
const (
	BreakInTrading               TradingStatus = "break_in_trading"
	NormalTrading                TradingStatus = "normal_trading"
	NotAvailableForTrading       TradingStatus = "not_available_for_trading"
	ClosingAuction               TradingStatus = "closing_auction"
	ClosingPeriod                TradingStatus = "closing_period"
	DarkPoolAuction              TradingStatus = "dark_pool_auction"
	DiscreteAuction              TradingStatus = "discrete_auction"
	OpeningPeriod                TradingStatus = "opening_period"
	OpeningAuctionPeriod         TradingStatus = "opening_auction_period"
	TradingAtClosingAuctionPrice TradingStatus = "trading_at_closing_auction_price"
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL