alor

package module
v0.0.0-...-98bf960 Latest Latest
Warning

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

Go to latest
Published: Jun 7, 2024 License: MIT Imports: 16 Imported by: 0

README

Golang SDK для работы с функционалом Alor OpenAPI V2 брокера Алор

Внимание: проект находится в процессе разработки. Сигнатура методов может быть изменена

Установка

go get github.com/Ruvad39/go-alor

какой api реализован

// GetTime текущее время сервера
GetTime(ctx context.Context) (time.Time, error)

// GetSecurity получить параметры по торговому инструменту
GetSecurity(ctx context.Context, board, symbol string) (Security, bool, error)

// GetSecurities получить список торговых инструментов
GetSecurities(ctx context.Context, opts ...Option) ([]Security, error)

// GetQuotes Получение информации о котировках для выбранных инструментов
GetQuotes(ctx context.Context, symbols string) ([]Quote, error)

// GetQuote Получение информации о котировках для одного выбранного инструмента
GetQuote(ctx context.Context, symbol string) (Quote, error)

// GetPortfolio Получение информации о портфеле
GetPortfolio(ctx context.Context, portfolio string) (Portfolio, error)

// GetPortfolioRisk Получение информации по портфельным рискам
GetPortfolioRisk(ctx context.Context, portfolio string) (PortfolioRisk, error)

// GetPositions получение информации о позициях
GetPositions(ctx context.Context, portfolio string) ([]Position, error)

// GetPosition Получение информации о позициях выбранного инструмента
GetPosition(ctx context.Context, portfolio, symbol string) (Position, bool, error)

// GetHistory Запрос истории для выбранных биржи и инструмента
GetHistory(ctx context.Context, symbol string, interval Interval, from, to int64) (History, error)

// GetCandles Запрос истории свечей для выбранного инструмента (вызывает GetHistory)
GetCandles(ctx context.Context, symbol string, interval Interval, from, to int64) ([]Candle, error)

// GetOrderBooks Получение информации о биржевом стакане
GetOrderBooks(ctx context.Context, symbol string) (OrderBook, error)

// GetOrders получение информации о всех заявках
GetOrders(ctx context.Context, portfolio string) ([]Order, error)

// GetOrder получение информации о выбранной заявке
GetOrder(ctx context.Context, portfolio, orderId string) (Order, error)

// SendOrder создать новый ордер
//SendOrder(ctx context.Context, order OrderRequest) (string, error)

//BuyMarket покупка по рынку
BuyMarket(ctx context.Context, symbol string, lot int32, comment string) (string, error)

// SellMarket продажа по рынку
SellMarket(ctx context.Context, symbol string, lot int32, comment string) (string, error)

// BuyLimit лимитная покупка
BuyLimit(ctx context.Context, symbol string, lot int32, price float64, comment string) (string, error)

// SellLimit лимитная продажа
SellLimit(ctx context.Context, symbol string, lot int32, price float64, comment string) (string, error)

// SubscribeCandles подписка на свечи
SubscribeCandles(ctx context.Context, symbol string, interval Interval, opts ...WSRequestOption) error

// SubscribeQuotes подписка на котировки
SubscribeQuotes(ctx context.Context, symbol string, opts ...WSRequestOption) error

// SubscribeOrders подписка на получение информации обо всех биржевых заявках с участием указанного портфеля
SubscribeOrders(ctx context.Context, portfolio string, opts ...WSRequestOption) error


Примеры

Пример создание клиента. Получение текущего времени сервера
ctx := context.Background()

// создание клиента     
refreshToken, _ := os.LookupEnv("ALOR_REFRESH")
// по умолчаию подключен Боевой контур
client, err := alor.NewClient(refreshToken)

if err != nil {
   slog.Error("ошибка создания alor.client: " + err.Error())
}

// получить текущее время сервера
// без авторизации задержка по времени 15 минут
servTime, err := client.GetTime(ctx)
if err != nil {
    fmt.Println(err) 
    return
 }
slog.Info("time", "servTime",servTime.String()) 

Получить параметры по торговому инструменту
board := "TQBR"
symbol :=  "SBER"
sec, ok, err := client.GetSecurity(ctx, board, symbol)
if err != nil {
    slog.Info("main.GetSecurity", "err", err.Error())
return
}
if !ok {
    slog.Info("main.GetSecurity", symbol, "нет такого инструмента")
//return
}
slog.Info("securities",
    "Symbol", sec.Symbol,
    "Exchange", sec.Exchange,
    "board", sec.Board,
    "ShortName", sec.ShortName,
    "LotSize", sec.LotSize,
    "MinStep", sec.MinStep,
)

// запрос списка инструментов
// sector = FORTS, FOND, CURR
// Если не указано иное значение параметра limit, в ответе возвращается только 25 объектов за раз
Sec, err := client.GetSecurities(ctx,
    alor.WithSector("FOND"),
    alor.WithBoard("TQBR"),
    //alor.WithLimit(5),
)
if err != nil {
slog.Info("main.GetSecurity", "err", err.Error())
return
}
slog.Info("GetSecurity", "кол-во", len(sec))
Получение информации о котировках для выбранных инструментов.
// Принимает несколько пар биржа-тикер. Пары отделены запятыми. Биржа и тикер разделены двоеточием
symbols := "MOEX:SIM4,MOEX:SBER"
sec, err := client.GetQuotes(ctx, symbols)
if err != nil {
	slog.Info("main.GetQuotes", "err", err.Error())
	return
}
for _, q := range sec {
slog.Info("Quotes",
    "symbol", q.Symbol,
    "description", q.Description,
    "lastPrice", q.LastPrice,
    "Bid", q.Bid,
    "ask", q.Ask,
    "LotValue", q.LotValue,
    "LotSize", q.LotSize,
    "OpenInterest", q.OpenInterest,
    "LastTime", q.LastTime().String(),
    )
}

// Получение информации о котировках для одного выбранного инструмента.
// Указываем тикер без указания биржи. Название биржи берется по умолчанию
symbol := "SRM4"
q, err := client.GetQuote(ctx, symbol)
slog.Info("Quotes",
    "symbol", q.Symbol,
    "description", q.Description,
    "lastPrice", q.LastPrice,
    "Bid", q.Bid,
    "ask", q.Ask,
    "LotValue", q.LotValue,
    "LotSize", q.LotSize,
    "OpenInterest", q.OpenInterest,
    "LastTime", q.LastTime().String(),
    )

// получение информации о биржевом стакане
//symbol = "SBER"
orderbook, err := client.GetOrderBooks(ctx, symbol)
if err != nil {
    slog.Info("main.GetOrderBooks", "err", err.Error())
    return
}

slog.Info("GetOrderBooks", "orderbook", orderbook.String())
bid, _ := orderbook.BestBid()
ask, _ := orderbook.BestAsk()
slog.Info("orderbook", "BestBid()", bid.Price, "BestAsk()", ask.Price)

другие примеры смотрите тут

Documentation

Index

Constants

View Source
const (
	OnCandleSubscribe = "BarsGetAndSubscribe" // Подписка на историю цен (свечи)

)

Variables

View Source
var ErrNotFound = errors.New("404 Not Found")
View Source
var TzMsk = initMoscow()

Functions

func IsActiveOrder

func IsActiveOrder(o Order) bool

func SetLogger

func SetLogger(logger *slog.Logger)

Types

type APIError

type APIError struct {
	Code        string `json:"code"`
	Message     string `json:"message"`
	OrderNumber string `json:"orderNumber"`
	Status      int    `json:"-"` // статус HTTP ответа
}

func (APIError) Error

func (e APIError) Error() string

func (APIError) HTTPStatus

func (e APIError) HTTPStatus() int

type Candle

type Candle struct {
	Symbol   string   `json:"symbol"`   // Код финансового инструмента (Тикер)
	Interval Interval `json:"interval"` // Интервал свечи
	Time     int64    `json:"time"`     // Время (UTC) (Unix time seconds)
	Close    float64  `json:"close"`    // Цена при закрытии
	Open     float64  `json:"open"`     // Цена при открытии
	High     float64  `json:"high"`     // Максимальная цена
	Low      float64  `json:"low"`      // Минимальная цена
	Volume   int32    `json:"volume"`   // Объём
}

Candle Параметры свечи

func (*Candle) CsvHeader

func (k *Candle) CsvHeader() string

func (*Candle) CsvRecord

func (k *Candle) CsvRecord() string

возвращает строку через запятую

func (*Candle) GeTime

func (k *Candle) GeTime() time.Time

GeTime вернем время начала свечи в формате time.Time

func (*Candle) StringRecord

func (k *Candle) StringRecord() []string

возвращает массив строки для записи через "encoding/csv"

type CandleCloseFunc

type CandleCloseFunc func(candle Candle)

type Client

type Client struct {
	Exchange   string // С какой биржей работаем по умолчанию
	HTTPClient *http.Client
	Stream
	// contains filtered or unexported fields
}

Client define API client

func NewClient

func NewClient(token string) *Client

NewClient создание нового клиента

func (*Client) BuyLimit

func (c *Client) BuyLimit(ctx context.Context, symbol string, lot int32, price float64, comment string) (string, error)

BuyLimit лимитная покупка

func (*Client) BuyMarket

func (c *Client) BuyMarket(ctx context.Context, symbol string, lot int32, comment string) (string, error)

BuyMarket покупка по рынку

func (*Client) CancelOrder

func (c *Client) CancelOrder(ctx context.Context, portfolio, orderId string) (bool, error)

CancelOrder отменить заявку TODO решить что возвращать

func (*Client) GetCandles

func (c *Client) GetCandles(ctx context.Context, symbol string, interval Interval, from, to int64) ([]Candle, error)

GetCandles Запрос свечей для выбранного инструмента биржу берем по умолчанию

func (*Client) GetHistory

func (c *Client) GetHistory(ctx context.Context, symbol string, interval Interval, from, to int64) (History, error)

GetHistory Запрос истории для выбранных биржи и инструмента биржу берем по умолчанию

func (*Client) GetJWT

func (c *Client) GetJWT() (string, error)

GetJWT получим accessToken

func (*Client) GetLoginPositions

func (c *Client) GetLoginPositions(ctx context.Context, login string) ([]Position, error)

https://apidev.alor.ru/md/v2/Clients/P039004/positions?format=Simple GetLoginPositions Получение информации о позициях по логину TODO использовать паттерн ok ([]Position, bool, error) ?

func (*Client) GetOrder

func (c *Client) GetOrder(ctx context.Context, portfolio, orderId string) (Order, error)

GetOrder получение информации о выбранной заявке

func (*Client) GetOrderBooks

func (c *Client) GetOrderBooks(ctx context.Context, symbol string) (OrderBook, error)

GetOrderBooks Получение информации о биржевом стакане

func (*Client) GetOrders

func (c *Client) GetOrders(ctx context.Context, portfolio string) ([]Order, error)

GetOrders получение информации о всех заявках

func (*Client) GetPortfolio

func (c *Client) GetPortfolio(ctx context.Context, portfolio string) (Portfolio, error)

GetPortfolio Получение информации о портфеле

func (*Client) GetPortfolioFortsRisk

func (c *Client) GetPortfolioFortsRisk(ctx context.Context, portfolio string) (PortfolioFortsRisk, error)

GetPortfolioFortsRisk Получение информации по портфельным рискам

func (*Client) GetPortfolioID

func (c *Client) GetPortfolioID(board string) string

GetPortfolioID получим номер счета от кода режима торгов

func (*Client) GetPortfolioRisk

func (c *Client) GetPortfolioRisk(ctx context.Context, portfolio string) (PortfolioRisk, error)

GetPortfolioRisk Получение информации по портфельным рискам

func (*Client) GetPosition

func (c *Client) GetPosition(ctx context.Context, portfolio, symbol string) (Position, bool, error)

Получение информации о позициях выбранного инструмента TODO использовать паттерн ok (Position, bool, error) ? для этого нужно правильно обраьатывать ошибку

func (*Client) GetPositions

func (c *Client) GetPositions(ctx context.Context, portfolio string) ([]Position, error)

GetPositions получение информации о позициях TODO использовать паттерн ok ([]Position, bool, error) ?

func (*Client) GetQuote

func (c *Client) GetQuote(ctx context.Context, symbol string) (Quote, error)

GetQuote Получение информации о котировках для одного выбранного инструмента. Указываем тикер без указания биржи. Название биржи берется по умолчанию

func (*Client) GetQuotes

func (c *Client) GetQuotes(ctx context.Context, symbols string) ([]Quote, error)

GetQuotes Получение информации о котировках для выбранных инструментов. Принимает несколько пар биржа-тикер. Пары отделены запятыми. Биржа и тикер разделены двоеточием

func (*Client) GetSecurities

func (c *Client) GetSecurities(ctx context.Context, opts ...Option) ([]Security, error)

GetSecurities получить список торговых инструментов Объекты в ответе сортируются по объёму торгов. Если не указано иное значение параметра limit, в ответе возвращается только 25 объектов за раз

func (*Client) GetSecurity

func (c *Client) GetSecurity(ctx context.Context, board, symbol string) (Security, bool, error)

GetSecurity получить параметры по торговому инструменту TODO использовать паттерн ok (Security, bool, error) ?

func (*Client) GetTime

func (c *Client) GetTime(ctx context.Context) (time.Time, error)

GetTime Запрос текущего UTC времени в формате Unix Time Seconds. Если этот запрос выполнен без авторизации, то будет возвращено время, которое было 15 минут назад.

func (*Client) NewCreateOrderService

func (c *Client) NewCreateOrderService() *CreateOrderService

NewCreateOrderService создать новый ордер

func (*Client) NewCreateOrderStopService

func (c *Client) NewCreateOrderStopService() *CreateOrderStopService

NewCreateOrderStopService создать новую stop/stopLimit заявку

func (*Client) NewWsService

func (c *Client) NewWsService(wsRequest IwsRequest) *WsService

func (*Client) SellLimit

func (c *Client) SellLimit(ctx context.Context, symbol string, lot int32, price float64, comment string) (string, error)

SellLimit лимитная продажа

func (*Client) SellMarket

func (c *Client) SellMarket(ctx context.Context, symbol string, lot int32, comment string) (string, error)

SellMarket продажа по рынку

func (*Client) SetFortsPortfolio

func (c *Client) SetFortsPortfolio(portfolio string)

SetFortsPortfolio установим номер счета для работы с рынком фортс

func (*Client) SetFxAPortfolio

func (c *Client) SetFxAPortfolio(portfolio string)

SetFxAPortfolio установим номер счета для работы с валютным рынком

func (*Client) SetLogDebug

func (c *Client) SetLogDebug(debug bool)

SetLogDebug установим уровень логгирования Debug

func (*Client) SetPortfolioID

func (c *Client) SetPortfolioID(portfolio string)

SetPortfolioID установим номер счета по умолчанию

func (*Client) SetStockPortfolio

func (c *Client) SetStockPortfolio(portfolio string)

SetStockPortfolio установим номер счета для работы с фондовым рынком

func (*Client) SubscribeCandles

func (c *Client) SubscribeCandles(ctx context.Context, symbol string, interval Interval, opts ...WSRequestOption) error

SubscribeCandles подписка на свечи

func (*Client) SubscribeOrders

func (c *Client) SubscribeOrders(ctx context.Context, portfolio string, opts ...WSRequestOption) error

SubscribeOrders подписка на получение информации обо всех биржевых заявках с участием указанного портфеля

func (*Client) SubscribeQuotes

func (c *Client) SubscribeQuotes(ctx context.Context, symbol string, opts ...WSRequestOption) error

SubscribeQuotes подписка на котировки

func (*Client) Version

func (c *Client) Version() string

(debug) вернем текущую версию

type ConditionType

type ConditionType string

ConditionType Условие срабатывания стоп/стоп-лимитной заявки

const (
	ConditionMore        ConditionType = "More"        // Цена срабатывания больше текущей цены
	ConditionLess        ConditionType = "Less"        // Цена срабатывания меньше текущей цены
	ConditionMoreOrEqual ConditionType = "MoreOrEqual" // Цена срабатывания больше или равна текущей цене
	ConditionLessOrEqual ConditionType = "LessOrEqual" // Цена срабатывания меньше или равна текущей цене
)

type CreateOrderService

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

CreateOrderService создать новую заявку (ордер)

func (*CreateOrderService) Board

func (s *CreateOrderService) Board(board string) *CreateOrderService

Board установим Код режима торгов

func (*CreateOrderService) Comment

func (s *CreateOrderService) Comment(comment string) *CreateOrderService

Comment установим комментарий

func (*CreateOrderService) Do

послать команду на создание нового ордера возвращает ID созданной заявки

func (*CreateOrderService) OrderType

func (s *CreateOrderService) OrderType(orderType OrderType) *CreateOrderService

OrderType установим тип заявки

func (*CreateOrderService) Portfolio

func (s *CreateOrderService) Portfolio(portfolio string) *CreateOrderService

Portfolio установим номер торгового счета

func (*CreateOrderService) Price

Price установить цену. Для лимитной заявки

func (*CreateOrderService) Qty

func (s *CreateOrderService) Qty(quantity int32) *CreateOrderService

Qty установим кол-во лот (Quantity)

func (*CreateOrderService) Side

Side установим направление ордера

func (*CreateOrderService) Symbol

func (s *CreateOrderService) Symbol(symbol string) *CreateOrderService

Symbol установим символ

func (*CreateOrderService) TimeInForce

func (s *CreateOrderService) TimeInForce(timeInForce TimeInForce) *CreateOrderService

TimeInForce установим Условие по времени действия заявки

type CreateOrderStopService

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

CreateOrderStopService создать новую stop/stopLimit заявку

func (*CreateOrderStopService) Activate

func (s *CreateOrderStopService) Activate(activate bool) *CreateOrderStopService

func (*CreateOrderStopService) Board

Board установим Код режима торгов

func (*CreateOrderStopService) Condition

Condition Условие срабатывания стоп/стоп-лимитной заявки

func (*CreateOrderStopService) Do

Do послать команду на создание новой stop/stopLimit возвращает ID созданной заявки

func (*CreateOrderStopService) OrderType

func (s *CreateOrderStopService) OrderType(orderType OrderType) *CreateOrderStopService

OrderType установим тип заявки

func (*CreateOrderStopService) Portfolio

func (s *CreateOrderStopService) Portfolio(portfolio string) *CreateOrderStopService

Portfolio установим номер торгового счета

func (*CreateOrderStopService) Price

Price установить цену. Для лимитной заявки

func (*CreateOrderStopService) Qty

Qty установим кол-во лот (Quantity)

func (*CreateOrderStopService) Side

Side установим направление ордера

func (*CreateOrderStopService) Symbol

Symbol установим символ

func (*CreateOrderStopService) TimeInForce

func (s *CreateOrderStopService) TimeInForce(timeInForce TimeInForce) *CreateOrderStopService

TimeInForce установим Условие по времени действия заявки

func (*CreateOrderStopService) TriggerPrice

func (s *CreateOrderStopService) TriggerPrice(price float64) *CreateOrderStopService

TriggerPrice Стоп-цена

type History

type History struct {
	Candles []Candle `json:"history"` // Данные по свечам
	Next    int64    `json:"next"`    // Время (UTC) начала следующей свечи
	Prev    int64    `json:"prev"`    // Время (UTC) начала предыдущей свечи
}

func (*History) GeNextTime

func (k *History) GeNextTime() time.Time

GeNextTime вернем время начала следующей свечи в формате time.Time

func (*History) GePrevTime

func (k *History) GePrevTime() time.Time

GePrevTime вернем время начала предыдущей свечи в формате time.Time

type IAlorClient

type IAlorClient interface {

	// GetAccount получим номер счета от кода режима торгов
	GetAccount(board string) string

	// GetTime текущее время сервера
	GetTime(ctx context.Context) (time.Time, error)

	// GetSecurity получить параметры по торговому инструменту
	GetSecurity(ctx context.Context, board, symbol string) (Security, bool, error)

	// GetSecurities получить список торговых инструментов
	GetSecurities(ctx context.Context, opts ...Option) ([]Security, error)

	// GetQuotes Получение информации о котировках для выбранных инструментов
	GetQuotes(ctx context.Context, symbols string) ([]Quote, error)

	// GetQuote Получение информации о котировках для одного выбранного инструмента
	GetQuote(ctx context.Context, symbol string) (Quote, error)

	// GetPortfolio Получение информации о портфеле
	GetPortfolio(ctx context.Context, portfolio string) (Portfolio, error)

	// GetPortfolioRisk Получение информации по портфельным рискам
	GetPortfolioRisk(ctx context.Context, portfolio string) (PortfolioRisk, error)

	// GetPortfolioRisk Получение информации по рискам срочного рынка (FORTS) для указанного портфеля.
	GetPortfolioFortsRisk(ctx context.Context, portfolio string) (PortfolioFortsRisk, error)

	// GetPositions получение информации о позициях
	GetPositions(ctx context.Context, portfolio string) ([]Position, error)

	// GetPosition Получение информации о позициях выбранного инструмента
	GetPosition(ctx context.Context, portfolio, symbol string) (Position, bool, error)

	// GetHistory Запрос истории для выбранных биржи и инструмента
	GetHistory(ctx context.Context, symbol string, interval Interval, from, to int64) (History, error)

	// GetCandles Запрос истории свечей для выбранного инструмента (вызывает GetHistory)
	GetCandles(ctx context.Context, symbol string, interval Interval, from, to int64) ([]Candle, error)

	// GetOrderBooks Получение информации о биржевом стакане
	GetOrderBooks(ctx context.Context, symbol string) (OrderBook, error)

	// GetOrders получение информации о всех заявках
	GetOrders(ctx context.Context, portfolio string) ([]Order, error)

	// GetOrder получение информации о выбранной заявке
	GetOrder(ctx context.Context, portfolio, orderId string) (Order, error)

	//BuyMarket покупка по рынку
	BuyMarket(ctx context.Context, symbol string, lot int32, comment string) (string, error)

	// SellMarket продажа по рынку
	SellMarket(ctx context.Context, symbol string, lot int32, comment string) (string, error)

	// BuyLimit лимитная покупка
	BuyLimit(ctx context.Context, symbol string, lot int32, price float64, comment string) (string, error)

	// SellLimit лимитная продажа
	SellLimit(ctx context.Context, symbol string, lot int32, price float64, comment string) (string, error)

	// CancelOrder отменить заявку
	CancelOrder(ctx context.Context, portfolio, orderId string) (bool, error)

	// SubscribeCandles подписка на свечи
	SubscribeCandles(ctx context.Context, symbol string, interval Interval, opts ...WSRequestOption) error

	// SubscribeQuotes подписка на котировки
	SubscribeQuotes(ctx context.Context, symbol string, opts ...WSRequestOption) error

	// SubscribeOrders подписка на получение информации обо всех биржевых заявках с участием указанного портфеля
	SubscribeOrders(ctx context.Context, portfolio string, opts ...WSRequestOption) error
}

какой api реализован

type Instrument

type Instrument struct {
	Symbol          string `json:"symbol"`
	Exchange        string `json:"exchange"`
	InstrumentGroup string `json:"instrumentGroup,omitempty"`
}

type Interval

type Interval string

Interval период свечей

const (
	Interval_S15 Interval = "15"   // 15 секунд
	Interval_M1  Interval = "60"   // 60 секунд или 1 минута
	Interval_H1  Interval = "3600" // 3600 секунд или 1 час
	Interval_D1  Interval = "D"    // D — сутки (соответствует значению 86400)
	Interval_W1  Interval = "W"    // W — неделя (соответствует значению 604800)
	Interval_MN1 Interval = "M"    // M — месяц (соответствует значению 2592000)
	Interval_Y1  Interval = "Y"    // Y — год (соответствует значению 31536000)

)

Длительность таймфрейма. В качестве значения можно указать точное количество секунд или код таймфрейма

func ParseToInterval

func ParseToInterval(input string) (Interval, error)

ParseToInterval преобразуем символьную стоку в Interval

func (Interval) String

func (i Interval) String() string

func (Interval) ToString

func (i Interval) ToString() string

type IwsRequest

type IwsRequest interface {
	Marshal() ([]byte, error)
	GetOpCode() string
	GetGuid() string
	GetCode() string
	GetInterval() Interval
	SetToken(token string)
	SetExchange(exchange string)
}

IwsRequest Интерфейс которым должна обладать структура запроса для подписки

type JSResp

type JSResp struct {
	AccessToken string
}

type Option

type Option func(p *Options)

func WithBoard

func WithBoard(param string) Option

WithBoard Режим торгов (instrumentGroup)

func WithExchange

func WithExchange(param string) Option

WithExchange Биржа MOEX, SPBX

func WithLimit

func WithLimit(param int32) Option

WithLimit Ограничение на количество выдаваемых результатов поиска

func WithOffset

func WithOffset(param int32) Option

WithOffset Смещение начала выборки (для пагинации)

func WithQuery

func WithQuery(param string) Option

WithQuery Тикер (Код финансового инструмента) ищет по вхождению

func WithSector

func WithSector(param string) Option

WithSector Рынок на бирже FORTS, FOND, CURR

func WithSymbol

func WithSymbol(param string) Option

WithSymbol Код инструмента

type Options

type Options struct {
	Exchange string // Биржа MOEX, SPBX
	Sector   string // Рынок на бирже FORTS, FOND, CURR
	Board    string // Режим торгов (instrumentGroup)
	Symbol   string // Код инструмента
	Query    string // Query Тикер (Код финансового инструмента) ищет по вхождению
	Limit    int32  // Ограничение на количество выдаваемых результатов поиска
	Offset   int32  // Смещение начала выборки (для пагинации)

}

Options параметры запроса по методам

func NewOptions

func NewOptions() *Options

type Order

type Order struct {
	ID             string      `json:"id"`             // Уникальный идентификатор заявки
	Symbol         string      `json:"symbol"`         // Тикер (Код финансового инструмента)
	BrokerSymbol   string      `json:"brokerSymbol"`   // Пара Биржа:Тикер
	Exchange       string      `json:"exchange"`       // Биржа
	Portfolio      string      `json:"portfolio"`      // Идентификатор клиентского портфеля
	Comment        string      `json:"comment"`        // Комментарий к заявке
	Type           OrderType   `json:"type"`           // Тип заявки limit - Лимитная заявка market - Рыночная заявка
	Side           SideType    `json:"side"`           // Направление сделки. buy — Купля sell — Продажа
	Status         OrderStatus `json:"status"`         // статус заявки
	TransitionTime string      `json:"transTime"`      // Дата и время выставления (UTC)
	UpdateTime     string      `json:"updateTime"`     // Дата и время изменения статуса заявки (UTC)
	EndTime        string      `json:"endTime"`        // Дата и время завершения (UTC)
	QtyUnits       int32       `json:"qtyUnits"`       // Количество (штуки)
	QtyBatch       int32       `json:"qtyBatch"`       // Количество (лоты)
	Qty            int32       `json:"qty"`            // Количество (лоты)
	FilledQtyUnits int32       `json:"filledQtyUnits"` // Количество исполненных (штуки)
	FilledQtyBatch int32       `json:"filledQtyBatch"` // Количество исполненных (лоты)
	Filled         int32       `json:"filled"`         // Количество исполненных (лоты)
	Price          float64     `json:"price"`          // Цена
	Existing       bool        `json:"existing"`       // True - для данных из "снепшота", то есть из истории. False - для новых событий
	TimeInForce    TimeInForce `json:"timeInForce"`    // Тип заявки oneday - До конца дня goodtillcancelled - Активна до отмены
	Volume         float64     `json:"volume"`         // Объем, для рыночных заявок - null

}

type OrderBook

type OrderBook struct {
	Bids        PriceVolumeSlice `json:"bids"`         // Биды
	Asks        PriceVolumeSlice `json:"asks"`         // Аски
	MsTimestamp int64            `json:"ms_timestamp"` // Время (UTC) в формате Unix Time Milliseconds
	Existing    bool             `json:"existing"`     // True - для данных из "снепшота", то есть из истории. False - для новых событий

}

OrderBook биржевой стакан

func (*OrderBook) BestAsk

func (b *OrderBook) BestAsk() (PriceVolume, bool)

func (*OrderBook) BestBid

func (b *OrderBook) BestBid() (PriceVolume, bool)

func (*OrderBook) LastTime

func (b *OrderBook) LastTime() time.Time

func (*OrderBook) String

func (b *OrderBook) String() string

type OrderFunc

type OrderFunc func(order Order)

type OrderRequest

type OrderRequest struct {
	OrderType       OrderType   `json:"-"`
	Side            SideType    `json:"side"`                      // Направление сделки: buy — Купля sell — Продажа
	Quantity        int32       `json:"quantity"`                  // Количество (лоты)
	Price           float64     `json:"price,omitempty"`           // Цена (только для лимитной)
	Comment         string      `json:"comment"`                   // Пользовательский комментарий к заявке
	Instrument      Instrument  `json:"instrument"`                // тикер
	User            User        `json:"user"`                      // данные portfolio
	TimeInForce     TimeInForce `json:"timeInForce"`               // Условие по времени действия заявки
	IcebergFixed    int32       `json:"icebergFixed,omitempty"`    // Видимая постоянная часть айсберг-заявки в лотах
	IcebergVariance float64     `json:"icebergVariance,omitempty"` // Амплитуда отклонения (в % от icebergFixed) случайной надбавки к видимой части айсберг-заявки. Только срочный рынок
}

type OrderResponse

type OrderResponse struct {
	Code        string `json:"code"`
	Message     string `json:"message"`
	OrderNumber string `json:"orderNumber"`
}

структура ответа

type OrderStatus

type OrderStatus string

OrderStatus статус заявки ( working filled canceled rejected)

const (
	OrderStatusWorking  OrderStatus = "working"  // На исполнении
	OrderStatusFilled   OrderStatus = "filled"   // Полностъю исполнилась (выполнилась)
	OrderStatusCanceled OrderStatus = "canceled" // Отменена
	OrderStatusRejected OrderStatus = "rejected" // отклонена

)

type OrderStopRequest

type OrderStopRequest struct {
	OrderType       OrderType     `json:"-"`
	Condition       ConditionType `json:"condition"`                 // Условие срабатывания стоп/стоп-лимитной заявки:
	Side            SideType      `json:"side"`                      // Направление сделки: buy — Купля sell — Продажа
	Quantity        int32         `json:"quantity"`                  // Количество (лоты)
	TriggerPrice    float64       `json:"triggerPrice"`              // Стоп-цена
	Price           float64       `json:"price,omitempty"`           // Цена выставления стоп-лимитной заявки
	StopEndUnixTime int64         `json:"stopEndUnixTime"`           // Срок действия (UTC) в формате Unix Time seconds
	Instrument      Instrument    `json:"instrument"`                // тикер
	User            User          `json:"user"`                      // данные portfolio
	TimeInForce     TimeInForce   `json:"timeInForce"`               // Условие по времени действия заявки
	IcebergFixed    int32         `json:"icebergFixed,omitempty"`    // Видимая постоянная часть айсберг-заявки в лотах
	IcebergVariance float64       `json:"icebergVariance,omitempty"` // Амплитуда отклонения (в % от icebergFixed) случайной надбавки к видимой части айсберг-заявки. Только срочный рынок
	Activate        bool          `json:"activate"`                  // Флаг указывает, создать активную заявку, или не активную. Не активная заявка отображается в системе, но не участвует в процессе выставления на биржу, пока не станет активной. Данный флаг необходим при создании группы заявок с типом TriggerBracketOrders
}

OrderStopRequest запрос на создание stop/stopLimit заявки

type OrderType

type OrderType string

OrderType Тип заявки (limit market stop stopLimit)

const (
	OrderTypeLimit     OrderType = "limit"     // Лимитная заявка
	OrderTypeMarket    OrderType = "market"    // Рыночная заявка
	OrderTypeStop      OrderType = "stop"      // Стоп-заявка
	OrderTypeStopLimit OrderType = "stopLimit" // Стоп-лимитная заявка
)

type Portfolio

type Portfolio struct {
	BuyingPowerAtMorning           float64 `json:"buyingPowerAtMorning"`           //Покупательская способность на утро
	BuyingPower                    float64 `json:"buyingPower"`                    // Покупательская способность
	Profit                         float64 `json:"profit"`                         // Прибыль за сегодня
	ProfitRate                     float64 `json:"profitRate"`                     // Норма прибыли, %
	PortfolioEvaluation            float64 `json:"portfolioEvaluation"`            // Ликвидный портфель
	PortfolioLiquidationValue      float64 `json:"portfolioLiquidationValue"`      // Оценка портфеля
	InitialMargin                  float64 `json:"initialMargin"`                  // Маржа
	RiskBeforeForcePositionClosing float64 `json:"riskBeforeForcePositionClosing"` // Риск до закрытия
	Commission                     float64 `json:"commission"`                     // Суммарная комиссия (null для Срочного рынка)
}

Portfolio информация о портфеле

type PortfolioFortsRisk

type PortfolioFortsRisk struct {
	Portfolio          string  `json:"portfolio"`          // Идентификатор клиентского портфеля
	MoneyFree          float64 `json:"moneyFree"`          // Свободные средства. Сумма рублей и залогов, дисконтированных в рубли, доступная для открытия позиций. (MoneyFree = MoneyAmount + VmInterCl – MoneyBlocked – VmReserve – Fee)
	MoneyBlocked       float64 `json:"moneyBlocked"`       // Средства, заблокированные под ГО
	Fee                float64 `json:"fee"`                // Списанный сбор
	MoneyOld           float64 `json:"moneyOld"`           // Общее количество рублей и дисконтированных в рубли залогов на начало сессии
	MoneyAmount        float64 `json:"moneyAmount"`        // Общее количество рублей и дисконтированных в рубли залогов
	MoneyPledgeAmount  float64 `json:"moneyPledgeAmount"`  // Сумма залогов, дисконтированных в рубли
	VmInterCl          float64 `json:"vmInterCl"`          // Вариационная маржа, списанная или полученная в пром. клиринг
	VmCurrentPositions float64 `json:"vmCurrentPositions"` // Сагрегированная вармаржа по текущим позициям
	VarMargin          float64 `json:"varMargin"`          // Вариационная маржа, рассчитанная по формуле VmCurrentPositions + VmInterCl
	IsLimitsSet        bool    `json:"isLimitsSet"`        // Наличие установленных денежного и залогового лимитов
}

type PortfolioRisk

type PortfolioRisk struct {
	Portfolio                 string  `json:"portfolio"`                 // Идентификатор клиентского портфеля
	Exchange                  string  `json:"exchange"`                  // Биржа:
	PortfolioEvaluation       float64 `json:"portfolioEvaluation"`       // Общая стоимость портфеля
	PortfolioLiquidationValue float64 `json:"portfolioLiquidationValue"` // Стоимость ликвидного портфеля
	InitialMargin             float64 `json:"initialMargin"`             // Начальная маржа
	MinimalMargin             float64 `json:"minimalMargin"`             // Минимальная маржа
	CorrectedMargin           float64 `json:"correctedMargin"`           // Скорректированная маржа
	RiskCoverageRatioOne      float64 `json:"riskCoverageRatioOne"`      // НПР1
	RiskCoverageRatioTwo      float64 `json:"riskCoverageRatioTwo"`      // НПР2
	RiskCategoryId            int32   `json:"riskCategoryId"`            // Категория риска.
	ClientType                string  `json:"clientType"`                // Тип клиента:
	HasForbiddenPositions     bool    `json:"hasForbiddenPositions"`     // Имеются ли запретные позиции
	HasNegativeQuantity       bool    `json:"hasNegativeQuantity"`       // Имеются ли отрицательные количества
}

type Position

type Position struct {
	Portfolio         string  `json:"portfolio"`         // Идентификатор клиентского портфеля
	Symbol            string  `json:"symbol"`            // Тикер (Код финансового инструмента)
	BrokerSymbol      string  `json:"brokerSymbol"`      // Пара Биржа:Тикер
	Exchange          string  `json:"exchange"`          // Биржа
	ShortName         string  `json:"shortName"`         // Короткое наименование
	Volume            float64 `json:"volume"`            // Объём, рассчитанный по средней цен
	CurrentVolume     float64 `json:"currentVolume"`     // Объём, рассчитанный по текущей цене
	AvgPrice          float64 `json:"avgPrice"`          // Средняя цена
	QtyUnits          float64 `json:"qtyUnits"`          // Количество (штуки)
	OpenUnits         float64 `json:"openUnits"`         // Количество открытых позиций на момент открытия (начала торгов)
	LotSize           float64 `json:"lotSize"`           // Размер лота
	QtyT0             float64 `json:"qtyT0"`             // Агрегированное количество T0 (штуки)
	QtyT1             float64 `json:"qtyT1"`             // Агрегированное количество T1 (штуки)
	QtyT2             float64 `json:"qtyT2"`             // Агрегированное количество T2 (штуки)
	QtyTFuture        float64 `json:"qtyTFuture"`        // Количество (штуки)
	QtyT0Batch        float64 `json:"qtyT0Batch"`        // Агрегированное количество T0 (лоты)
	QtyT1Batch        float64 `json:"qtyT1Batch"`        // Агрегированное количество T1 (лоты)
	QtyT2Batch        float64 `json:"qtyT2Batch"`        // Агрегированное количество T2 (лоты)
	QtyTFutureBatch   float64 `json:"qtyTFutureBatch"`   // Агрегированное количество TFuture (лоты)
	QtyBatch          float64 `json:"qtyBatch"`          // Агрегированное количество TFuture
	OpenQtyBatch      float64 `json:"openQtyBatch"`      // Агрегированное количество на момент открытия (начала торгов) (лоты)
	Qty               float64 `json:"qty"`               // Агрегированное количество (лоты)
	Open              float64 `json:"open"`              // Агрегированное количество на момент открытия (начала торгов) (штуки)
	DailyUnrealisedPl float64 `json:"dailyUnrealisedPl"` // Суммарная прибыль или суммарный убыток за день в процентах
	UnrealisedPl      float64 `json:"unrealisedPl"`      // Суммарная прибыль или суммарный убыток за день в валюте расчётов
	IsCurrency        bool    `json:"isCurrency"`        // True для валютных остатков (денег), false - для торговых инструментов
}

func (*Position) Lot

func (p *Position) Lot() int64

Lot вернем кол-во лот

type PriceVolume

type PriceVolume struct {
	Price  float64 `json:"price"`  // цена
	Volume int64   `json:"volume"` // объем
}

func (PriceVolume) String

func (p PriceVolume) String() string

type PriceVolumeSlice

type PriceVolumeSlice []PriceVolume

PriceVolumeSlice Биды Аски

func (PriceVolumeSlice) Copy

func (slice PriceVolumeSlice) Copy() PriceVolumeSlice

func (PriceVolumeSlice) First

func (slice PriceVolumeSlice) First() (PriceVolume, bool)

вернем первый элемент

func (PriceVolumeSlice) Len

func (slice PriceVolumeSlice) Len() int

func (PriceVolumeSlice) Second

func (slice PriceVolumeSlice) Second() (PriceVolume, bool)

вернем второй элемент

func (PriceVolumeSlice) SumDepth

func (slice PriceVolumeSlice) SumDepth() int64

вернем объем стакана

type Quote

type Quote struct {
	Symbol               string  `json:"symbol"`
	Exchanges            string  `json:"exchange"`
	Description          string  `json:"description"`
	PrevClosePrice       float64 `json:"prev_close_price"` // Цена предыдущего закрытия
	LastPrice            float64 `json:"last_price"`       // PriceLast
	OpenPrice            float64 `json:"open_price"`       // PriceOpen
	HighPrice            float64 `json:"high_price"`       // PriceMaximum
	LowPrice             float64 `json:"low_price"`        // PriceMinimum
	Ask                  float64 `json:"ask"`
	Bid                  float64 `json:"bid"`
	AskVol               float32 `json:"ask_vol"`              // Количество лотов в ближайшем аске в биржевом стакане
	BidVol               float32 `json:"bid_vol"`              // Количество лотов в ближайшем биде в биржевом стакане
	AskVolumeTotal       int32   `json:"total_ask_vol"`        // Суммарное количество лотов во всех асках в биржевом стакане
	BidVolumeTotal       int32   `json:"total_bid_vol"`        // Суммарное количество лотов во всех бидах в биржевом стакане
	LastPriceTimestamp   int64   `json:"last_price_timestamp"` //  Unix time seconds для значения поля last_price
	LotSize              float64 `json:"lotsize"`              // Размер лота
	LotValue             float64 `json:"lotvalue"`             // Суммарная стоимость лота
	FaceValue            float64 `json:"facevalue"`            // Показатель, значение которого варьируется в зависимости от выбранного рынка:
	OpenInterest         int64   `json:"open_interest"`        // Открытый интерес (open interest). Если не поддерживается инструментом — значение 0 или null
	OrderBookMSTimestamp int64   `json:"ob_ms_timestamp"`      // Временная метка (UTC) сообщения о состоянии биржевого стакана в формате Unix Time Milliseconds
	Type                 string  `json:"type"`                 // Полное название фьючерса

}

Quotes

func (Quote) LastTime

func (q Quote) LastTime() time.Time

переведем время с UTC-timestamp в Time и сразу поменяем в Московскеое время

type QuoteFunc

type QuoteFunc func(quote Quote)

type RequestOption

type RequestOption func(*request)

RequestOption define option type for request

func WithHeader

func WithHeader(key, value string, replace bool) RequestOption

WithHeader set or add a header value to the request

func WithHeaders

func WithHeaders(header http.Header) RequestOption

WithHeaders set or replace the headers of the request

type Security

type Security struct {
	Symbol       string  `json:"symbol"`                 // Symbol Тикер (Код финансового инструмента)
	ShortName    string  `json:"shortname"`              // Shortname Краткое наименование инструмента
	Description  string  `json:"description,omitempty"`  // Description Краткое описание инструмента
	Exchange     string  `json:"exchange"`               // Exchange Биржа
	Board        string  `json:"board"`                  //Код режима торгов (Борд):
	LotSize      float64 `json:"lotsize"`                // Lotsize Размер лота
	MinStep      float64 `json:"minstep"`                // Minstep Минимальный шаг цены
	PriceStep    float64 `json:"pricestep"`              // Pricestep Минимальный шаг цены, выраженный в рублях
	Cancellation string  `json:"cancellation,omitempty"` // Cancellation Дата и время (UTC) окончания действия
	//Cancellation           time.Time `json:"cancellation,omitempty"`  // Cancellation Дата и время (UTC) окончания действия
	CfiCode                string  `json:"cfiCode,omitempty"`       // CfiCode Тип ценной бумаги согласно стандарту ISO 10962
	ComplexProductCategory string  `json:"complexProductCategory"`  // ComplexProductCategory Требуемая категория для осуществления торговли инструментом
	Currency               string  `json:"currency,omitempty"`      // Currency Валюта
	Facevalue              float64 `json:"facevalue,omitempty"`     // Facevalue Номинальная стоимость
	Marginbuy              float64 `json:"marginbuy,omitempty"`     // Marginbuy Цена маржинальной покупки (заемные средства)
	Marginrate             float64 `json:"marginrate,omitempty"`    // Marginrate Отношение цены маржинальной покупки к цене последней сделки
	Marginsell             float64 `json:"marginsell,omitempty"`    // Marginsell Цена маржинальной продажи (заемные средства)
	PriceMax               float64 `json:"priceMax,omitempty"`      // PriceMax Максимальная цена
	PriceMin               float64 `json:"priceMin,omitempty"`      // PriceMin Минимальная цена
	PrimaryBoard           string  `json:"primary_board,omitempty"` // PrimaryBoard Код режима торгов
	Rating                 float64 `json:"rating,omitempty"`
	TheorPrice             float64 `json:"theorPrice,omitempty"`
	TheorPriceLimit        float64 `json:"theorPriceLimit,omitempty"`
	TradingStatus          int     `json:"tradingStatus,omitempty"` // TradingStatus Торговый статус инструмента
	TradingStatusInfo      string  `json:"tradingStatusInfo"`       // TradingStatusInfo Описание торгового статуса инструмента
	Type                   string  `json:"type,omitempty"`          // Type Тип
	Volatility             float64 `json:"volatility,omitempty"`    // Volatility Волативность

}

Security defines model for security.

type SideType

type SideType string

направление сдели ( buy sell)

const (
	SideTypeBuy  SideType = "buy"
	SideTypeSell SideType = "sell"
)

type Stream

type Stream struct {
	OnCandle CandleCloseFunc // Функция обработки появления новой свечи
	OnQuote  QuoteFunc       // Функция обработки появления котировки
	OnOrder  OrderFunc       // Функция обработки появления заявках
}

func (*Stream) PublishCandleClosed

func (s *Stream) PublishCandleClosed(candle Candle)

PublishCandleClosed пошлем данные по свече дальше = тем кто подписался

func (*Stream) PublishOrder

func (s *Stream) PublishOrder(order Order)

PublishOrder пошлем заявки тем кто подписался

func (*Stream) PublishQuotes

func (s *Stream) PublishQuotes(quote Quote)

PublishQuotes пошлем котировки = тем кто подписался

func (*Stream) SetOnCandle

func (s *Stream) SetOnCandle(f CandleCloseFunc)

SetOnCandle регистрирует функцию для вызова OnCandleClosed

func (*Stream) SetOnOrder

func (s *Stream) SetOnOrder(f OrderFunc)

SetOnOrder регистрирует функцию для вызова OnOrder

func (*Stream) SetOnQuote

func (s *Stream) SetOnQuote(f QuoteFunc)

SetOnQuote регистрирует функцию для вызова OnQuote

type TimeInForce

type TimeInForce string

TimeInForce условие по времени действия заявки

const (
	TimeInForceGTC    TimeInForce = "goodtillcancelled" // Активна до отмены
	TimeInForceDAY    TimeInForce = "oneday"            // До конца дня
	TimeInForceFOK    TimeInForce = "fillorkill"        // Исполнить целиком или отклонить
	TimeInForceCancel TimeInForce = "immediateorcancel" // Снять остаток
)

type Trade

type Trade struct {
	Id           string    `json:"id"`           // Уникальный идентификатор сделки
	OrderNo      string    `json:"orderNo"`      // Уникальный идентификатор заявки
	Comment      string    `json:"comment"`      // Пользовательский комментарий к заявке
	Symbol       string    `json:"symbol"`       // Тикер (Код финансового инструмента).
	BrokerSymbol string    `json:"brokerSymbol"` // Пара Биржа:Тикер
	Exchange     string    `json:"exchange"`     // Биржа
	Date         time.Time `json:"date"`         // Дата и время завершения (UTC)
	Board        string    `json:"board"`        // Код режима торгов (Борд):
	QtyUnits     int32     `json:"qtyUnits"`     // Количество (штуки)
	QtyBatch     int       `json:"qtyBatch"`     // Количество (лоты)
	Qty          int       `json:"qty"`          // Количество (лоты)
	Price        float64   `json:"price"`        // Цена
	AccruedInt   int       `json:"accruedInt"`   // Начислено (НКД)
	Side         string    `json:"side"`         // Направление сделки:
	Existing     bool      `json:"existing"`     // True — для данных из "снепшота", то есть из истории. False — для новых событий
	Commission   float64   `json:"commission"`   // Суммарная комиссия (null для Срочного рынка)
	//RepoSpecificFields interface{} `json:"repoSpecificFields"` // Специальные поля для сделок РЕПО
	Volume float64 `json:"volume"` // Объём, рассчитанный по средней цене
}

структура сделки

type User

type User struct {
	Portfolio string `json:"portfolio"`
}

type WSRequestBase

type WSRequestBase struct {
	OpCode    string   `json:"opcode"`         // Код операции
	Guid      string   `json:"guid"`           // Уникальный идентификатор запроса. Все ответные сообщения будут иметь такое же значение поля guid
	Token     string   `json:"token"`          // Access Токен для авторизации запроса
	Exchange  string   `json:"exchange"`       // Биржа: MOEX — Московская Биржа SPBX — СПБ Биржа
	Frequency int32    `json:"freq"`           // Максимальная частота отдачи данных сервером в миллисекундах
	Format    string   `json:"format"`         // Формат представления возвращаемых данных: Simple, Slim, Heavy
	Code      string   `json:"code,omitempty"` // Код финансового инструмента (Тикер)
	Interval  Interval `json:"tf"`             // Длительность таймфрейма в секундах или код (D — дни, W — недели, M — месяцы, Y — годы)
	From      int64    `json:"from,omitempty"` // Дата и время (UTC) для первой запрашиваемой свечи
	//SkipHistory     bool     `json:"skipHistory,omitempty"`     // Флаг отсеивания исторических данных: true — отображать только новые данные false — отображать в том числе данные из истории
	SkipHistory     bool   `json:"skipHistory"`               // Флаг отсеивания исторических данных: true — отображать только новые данные false — отображать в том числе данные из истории
	Depth           int32  `json:"depth,omitempty"`           // Глубина стакана. Стандартное и максимальное значение — 20 (20х20).
	Portfolio       string `json:"portfolio,omitempty"`       // Идентификатор клиентского портфеля
	InstrumentGroup string `json:"instrumentGroup,omitempty"` // Код режима торгов (Борд):
	OrderStatuses   string `json:"orderStatuses,omitempty"`   // Опциональный фильтр по статусам заявок. Влияет только на фильтрацию первичных исторических данных при подписке. Возможные значения:
}

поля которые должны быть во всех запросах на подписку по websocket

func (*WSRequestBase) GetCode

func (r *WSRequestBase) GetCode() string

func (*WSRequestBase) GetGuid

func (r *WSRequestBase) GetGuid() string

func (*WSRequestBase) GetInterval

func (r *WSRequestBase) GetInterval() Interval

func (*WSRequestBase) GetOpCode

func (r *WSRequestBase) GetOpCode() string

func (*WSRequestBase) Marshal

func (r *WSRequestBase) Marshal() ([]byte, error)

func (*WSRequestBase) SetExchange

func (r *WSRequestBase) SetExchange(exchange string)

func (*WSRequestBase) SetToken

func (r *WSRequestBase) SetToken(token string)

type WSRequestOption

type WSRequestOption func(r *WSRequestBase)

func WithFrequency

func WithFrequency(param int32) WSRequestOption

type WSResponse

type WSResponse struct {
	Data      *json.RawMessage `json:"data"` // Данные по ответу
	Guid      string           `json:"guid"` // Уникальный идентификатор запроса
	WsMessage                  // Системное сообщение
}

type WsMessage

type WsMessage struct {
	Message     string `json:"message"`
	HttpCode    int    `json:"httpCode"`
	RequestGuid string `json:"requestGuid"`
}

func (*WsMessage) String

func (m *WsMessage) String() string

type WsService

type WsService struct {
	WsRequest  IwsRequest    // Структура запроса для подписки (wsRequest)
	CloseC     chan struct{} // CloseC сигнальный канал для закрытия коннекта
	ReconnectC chan struct{} // ReconnectC сигнальный канал для необходимости реконекта
	// contains filtered or unexported fields
}

WSService сервис для подписок

func (*WsService) Close

func (s *WsService) Close()

Close закроем сигнальный канал, что бы закончить работу

func (*WsService) Connect

func (s *WsService) Connect(ctx context.Context) error

Connect запускаем поток и создаем соединение с websocket

func (*WsService) DialAndConnect

func (s *WsService) DialAndConnect(ctx context.Context) error

DialAndConnect создаем соединение с websocket. Запрашиваем подписку. Вызываем чтение данных

func (*WsService) Do

func (s *WsService) Do(ctx context.Context) error

Do запуск сервиса

func (*WsService) Read

func (s *WsService) Read(ctx context.Context, conn *websocket.Conn)

Read Чтение данных с websocket func (s *StandardStream) Read(ctx context.Context, conn *websocket.Conn, cancel context.CancelFunc) {

func (*WsService) Reconnect

func (s *WsService) Reconnect()

Reconnect в сигнальный канал рекконета пошлем сообщение

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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