Class: InvestTinkoff::V1::Client

Inherits:
ClientBase show all
Defined in:
lib/invest_tinkoff/v1/client.rb

Direct Known Subclasses

SandboxClient

Constant Summary collapse

TIME_FORMAT =
'%FT%T%:z'
CANDLES_INTERVALS =
%w[1min 2min 3min 5min 10min 15min 30min hour day week month]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(token:, broker_account_id: nil, logger: nil) ⇒ Client

token - рабочий API token broker_account_id (опционально) - идентификатор счета logger (опиционально) - например: Rails.logger



14
15
16
17
18
19
20
# File 'lib/invest_tinkoff/v1/client.rb', line 14

def initialize token:, broker_account_id: nil, logger: nil
  super(
    token: token,
    broker_account_id: ,
    logger: logger
  )
end

Instance Attribute Details

#broker_account_idObject

Returns the value of attribute broker_account_id.



9
10
11
# File 'lib/invest_tinkoff/v1/client.rb', line 9

def 
  @broker_account_id
end

Instance Method Details

#market_bondsObject

Получение списка облигаций



89
90
91
# File 'lib/invest_tinkoff/v1/client.rb', line 89

def market_bonds
  get_api_request '/market/bonds'
end

#market_candles(figi:, from:, to:, interval:) ⇒ Object

Получение исторических свечей по FIGI Пример figi: ‘BBG000B9XRY4’ Пример from: Time.zone.now.beginning_of_week Пример to: Time.zone.now Пример interval: :1min, :2min, :3min, :5min, :10min, :15min, :30min, :hour, :day, :week, :month

Raises:

  • (ArgumentError)


114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/invest_tinkoff/v1/client.rb', line 114

def market_candles figi:, from:, to:, interval:
  raise ArgumentError, 'interval' unless CANDLES_INTERVALS.include? interval.to_s

  get_api_request(
    '/market/candles',
    {
      figi: figi,
      from: from.strftime(TIME_FORMAT),
      to: to.strftime(TIME_FORMAT),
      interval: interval
    }
  )
end

#market_currenciesObject

Получение списка валютных пар



99
100
101
# File 'lib/invest_tinkoff/v1/client.rb', line 99

def market_currencies
  get_api_request '/market/currencies'
end

#market_etfsObject

Получение списка ETF



94
95
96
# File 'lib/invest_tinkoff/v1/client.rb', line 94

def market_etfs
  get_api_request '/market/etfs'
end

#market_orderbook(figi:, depth: 20) ⇒ Object

Получение стакана по FIGI Пример figi: ‘BBG000B9XRY4’



105
106
107
# File 'lib/invest_tinkoff/v1/client.rb', line 105

def market_orderbook figi:, depth: 20
  get_api_request '/market/orderbook', { figi: figi, depth: depth }
end

#market_search_by_figi(figi) ⇒ Object

Получение инструмента по FIGI Пример figi: ‘BBG000B9XRY4’



130
131
132
# File 'lib/invest_tinkoff/v1/client.rb', line 130

def market_search_by_figi figi
  get_api_request '/market/search/by-figi', { figi: figi }
end

#market_search_by_ticker(ticker) ⇒ Object

Получение инструмента по тикеру Пример tiker: ‘AAPL’



136
137
138
# File 'lib/invest_tinkoff/v1/client.rb', line 136

def market_search_by_ticker ticker
  get_api_request '/market/search/by-ticker', { ticker: ticker }
end

#market_stocksObject

Получение списка акций



84
85
86
# File 'lib/invest_tinkoff/v1/client.rb', line 84

def market_stocks
  get_api_request '/market/stocks'
end

#operations(from:, to:, figi: nil) ⇒ Object

Получение списка операций Пример from: Time.zone.now.beginning_of_week Пример to: Time.zone.now Пример figi (опиционально): ‘BBG000B9XRY4’



148
149
150
151
152
153
154
155
# File 'lib/invest_tinkoff/v1/client.rb', line 148

def operations from:, to:, figi: nil
  query = {
    from: from.strftime(TIME_FORMAT),
    to: to.strftime(TIME_FORMAT)
  }
  query.merge! figi: figi if figi.present?
  get_api_request '/operations', query
end

#ordersObject

Получение списка активных заявок



27
28
29
# File 'lib/invest_tinkoff/v1/client.rb', line 27

def orders
  get_api_request '/orders'
end

#orders_cancel(id) ⇒ Object

Отмена заявки



61
62
63
# File 'lib/invest_tinkoff/v1/client.rb', line 61

def orders_cancel id
  post_api_request '/orders/cancel', query: { orderId: id }
end

#orders_limit_order(figi:, operation:, lots:, price:) ⇒ Object

Создание лимитной заявки Пример figi: ‘BBG000B9XRY4’ Пример operation: :buy, :sell



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/invest_tinkoff/v1/client.rb', line 34

def orders_limit_order figi:, operation:, lots:, price:
  post_api_request(
    '/orders/limit-order',
    body: {
      lots: lots,
      operation: operation.to_s.capitalize,
      price: price
    },
    query: { figi: figi }
  )
end

#orders_market_order(figi:, operation:, lots:) ⇒ Object

Создание рыночной заявки Пример figi: ‘BBG000B9XRY4’ Пример operation: :buy, :sell



49
50
51
52
53
54
55
56
57
58
# File 'lib/invest_tinkoff/v1/client.rb', line 49

def orders_market_order figi:, operation:, lots:
  post_api_request(
    '/orders/market-order',
    body: {
      lots: lots,
      operation: operation.to_s.capitalize
    },
    query: { figi: figi }
  )
end

#portfolioObject

Получение портфеля клиента



70
71
72
# File 'lib/invest_tinkoff/v1/client.rb', line 70

def portfolio
  get_api_request '/portfolio'
end

#portfolio_currenciesObject

Получение валютных активов клиента



75
76
77
# File 'lib/invest_tinkoff/v1/client.rb', line 75

def portfolio_currencies
  get_api_request '/portfolio/currencies'
end

#user_accountsObject

Получение брокерских счетов клиента



162
163
164
# File 'lib/invest_tinkoff/v1/client.rb', line 162

def user_accounts
  get_api_request '/user/accounts'
end