sdk

package module
v0.0.0-...-72128a9 Latest Latest
Warning

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

Go to latest
Published: Nov 12, 2019 License: Apache-2.0 Imports: 12 Imported by: 0

README

OpenAPI Go SDK

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

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

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

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

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

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

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

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

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

package main

import (
	"log"
	"os"

	sdk "github.com/TinkoffCreditSystems/invest-openapi-go-sdk"
)

func main() {
	const token = "your_token"

	logger := log.New(os.Stdout, "[invest-openapi-go-sdk]", log.LstdFlags)

	streamClient, err := sdk.NewStreamingClient(logger, token)
	if err != nil {
		logger.Fatalln(err)
	}

	restClient := sdk.NewRestClient(token)
}
У меня есть вопрос

Основной репозиторий с документацией — в нем вы можете задать вопрос в 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 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 ErrNotFound = errors.New("Not found")

Functions

This section is empty.

Types

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 {
	Event  string `json:"event"`
	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"
)

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 {
	Event string `json:"event"`
	Error Error  `json:"payload"`
}

type Event

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

type Instrument

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

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 {
	Event string         `json:"event"`
	Info  InstrumentInfo `json:"payload"`
}

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"`
	FIGI           string          `json:"figi"`
	InstrumentType string          `json:"instrumentType"`
	IsMarginCall   bool            `json:"isMarginCall"`
	DateTime       time.Time       `json:"date"`
	OperationType  OperationType   `json:"operationType"`
}

type OperationInterval

type OperationInterval string
const (
	OperationInterval1Day   OperationInterval = "1day"
	OperationInterval7Days  OperationInterval = "7days"
	OperationInterval14Days OperationInterval = "14days"
	OperationInterval30Days OperationInterval = "30days"
)

type OperationStatus

type OperationStatus string

type OperationType

type OperationType string
const (
	BUY  OperationType = "Buy"
	SELL OperationType = "Sell"
)

type Order

type Order struct {
	ID            string  `json:"orderId"`
	FIGI          string  `json:"figi"`
	Operation     string  `json:"operation"`
	Status        string  `json:"status"`
	RequestedLots int     `json:"requestedLots"`
	ExecutedLots  int     `json:"requestedLots"`
	Type          string  `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 {
	Event     string    `json:"event"`
	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"
)
const (
	OperationStatusDone     OrderStatus = "Done"
	OperationStatusDecline  OrderStatus = "Decline"
	OperationStatusProgress OrderStatus = "Progress"
)

type PlacedLimitOrder

type PlacedLimitOrder struct {
	ID            string      `json:"orderId"`
	Operation     string      `json:"operation"`
	Status        OrderStatus `json:"status"`
	RejectReason  string      `json:"rejectReason"`
	RequestedLots int         `json:"requestedLots"`
	ExecutedLots  int         `json:"executedLots"`
	Commission    MoneyAmount `json:"commission"`
}

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       string      `json:"instrumentType"`
	Balance              float64     `json:"balance"`
	Blocked              float64     `json:"blocked"`
	Lots                 int         `json:"lots"`
	ExpectedYield        MoneyAmount `json:"expectedYield"`
	AveragePositionPrice MoneyAmount `json:"averagePositionPrice"`
}

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) Bonds

func (c *RestClient) Bonds() ([]Instrument, error)

func (*RestClient) Candles

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

func (*RestClient) Currencies

func (c *RestClient) Currencies() ([]Instrument, error)

func (*RestClient) CurrenciesPortfolio

func (c *RestClient) CurrenciesPortfolio() ([]CurrencyBalance, error)

func (*RestClient) ETFs

func (c *RestClient) ETFs() ([]Instrument, error)

func (*RestClient) LimitOrder

func (c *RestClient) LimitOrder(figi string, lots int, operation OperationType, price float64) (PlacedLimitOrder, error)

func (*RestClient) Operations

func (c *RestClient) Operations(from time.Time, interval OperationInterval, figi string) ([]Operation, error)

func (*RestClient) OrderCancel

func (c *RestClient) OrderCancel(id string) error

func (*RestClient) Orderbook

func (c *RestClient) Orderbook(depth int, figi string) (RestOrderBook, error)

func (*RestClient) Orders

func (c *RestClient) Orders() ([]Order, error)

func (*RestClient) Portfolio

func (c *RestClient) Portfolio() (Portfolio, error)

func (*RestClient) PositionsPortfolio

func (c *RestClient) PositionsPortfolio() ([]PositionBalance, error)

func (*RestClient) SearchInstrumentByFIGI

func (c *RestClient) SearchInstrumentByFIGI(figi string) (Instrument, error)

func (*RestClient) SearchInstrumentByTicker

func (c *RestClient) SearchInstrumentByTicker(ticker string) ([]Instrument, error)

func (*RestClient) Stocks

func (c *RestClient) Stocks() ([]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"`
}

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() error

func (*SandboxRestClient) Register

func (c *SandboxRestClient) Register() error

func (*SandboxRestClient) SetCurrencyBalance

func (c *SandboxRestClient) SetCurrencyBalance(currency Currency, balance float64) error

func (*SandboxRestClient) SetPositionsBalance

func (c *SandboxRestClient) SetPositionsBalance(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"`
	Payload    struct {
		Message string `json:"message"`
		Code    string `json:"code"`
	} `json:"payload"`
}

func (TradingError) Error

func (t TradingError) Error() string

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"
)

Jump to

Keyboard shortcuts

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