ru.tinkoff.piapi.core.InstrumentsService Maven / Gradle / Ivy
package ru.tinkoff.piapi.core;
import io.grpc.stub.StreamObserver;
import ru.tinkoff.piapi.contract.v1.*;
import ru.tinkoff.piapi.core.utils.DateUtils;
import ru.tinkoff.piapi.core.utils.Helpers;
import ru.tinkoff.piapi.core.utils.ValidationUtils;
import ru.tinkoff.piapi.contract.v1.InstrumentsServiceGrpc.InstrumentsServiceBlockingStub;
import ru.tinkoff.piapi.contract.v1.InstrumentsServiceGrpc.InstrumentsServiceStub;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.time.Instant;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.function.BiConsumer;
import java.util.function.Function;
/**
* Сервис предоставления справочной информации о ценных бумагах.
*
* Подробности в документации.
*/
public class InstrumentsService {
private final InstrumentsServiceBlockingStub instrumentsBlockingStub;
private final InstrumentsServiceStub instrumentsStub;
InstrumentsService(@Nonnull InstrumentsServiceBlockingStub instrumentsBlockingStub,
@Nonnull InstrumentsServiceStub instrumentsStub) {
this.instrumentsBlockingStub = instrumentsBlockingStub;
this.instrumentsStub = instrumentsStub;
}
/**
* Получение (синхронное) купонов по облигациям.
*
* @param figi Тикер облигации.
* @param from Начало периода по часовому поясу UTC.
* @param to Окончание периода по часовому поясу UTC.
* @return информация о купонах облигации.
*/
@Nonnull
public List getBondCouponsSync(@Nonnull String figi,
@Nonnull Instant from,
@Nonnull Instant to) {
ValidationUtils.checkFromTo(from, to);
return Helpers.unaryCall(() -> instrumentsBlockingStub.getBondCoupons(
GetBondCouponsRequest.newBuilder()
.setFigi(figi)
.setFrom(DateUtils.instantToTimestamp(from))
.setTo(DateUtils.instantToTimestamp(to))
.build()).getEventsList());
}
/**
* Получение (асинхронное) купонов по облигациям.
*
* @param figi Тикер облигации.
* @param from Начало периода по часовому поясу UTC.
* @param to Окончание периода по часовому поясу UTC.
* @return информация о купонах облигации.
*/
@Nonnull
public CompletableFuture> getBondCoupons(@Nonnull String figi,
@Nonnull Instant from,
@Nonnull Instant to) {
ValidationUtils.checkFromTo(from, to);
return Helpers.unaryCall(() -> Helpers.unaryAsyncCall(
observer -> instrumentsStub.getBondCoupons(
GetBondCouponsRequest.newBuilder()
.setFigi(figi)
.setFrom(DateUtils.instantToTimestamp(from))
.setTo(DateUtils.instantToTimestamp(to))
.build(), observer))
.thenApply(GetBondCouponsResponse::getEventsList));
}
/**
* Получение (синхронное) расписания торгов всех торговых площадок.
*
* Начало периода не должно быть меньше полуночи текущих суток по Московскому времени.
*
* @param from Начало периода по часовому поясу UTC.
* @param to Окончание периода по часовому поясу UTC.
* @return Расписания торгов.
*/
@Nonnull
public List getTradingSchedulesSync(@Nonnull Instant from,
@Nonnull Instant to) {
ValidationUtils.checkFromTo(from, to);
return Helpers.unaryCall(() -> instrumentsBlockingStub.tradingSchedules(
TradingSchedulesRequest.newBuilder()
.setFrom(DateUtils.instantToTimestamp(from))
.setTo(DateUtils.instantToTimestamp(to))
.build())
.getExchangesList());
}
/**
* Получение (синхронное) расписания торгов торговой площадки.
*
* Начало периода не должно быть меньше полуночи текущих суток по Московскому времени.
*
* @param exchange Наименование биржи или расчетного календаря.
* @param from Начало периода по часовому поясу UTC.
* @param to Окончание периода по часовому поясу UTC.
* @return Расписание торгов площадки (если таковая существует).
*/
@Nonnull
public TradingSchedule getTradingScheduleSync(@Nonnull String exchange,
@Nonnull Instant from,
@Nonnull Instant to) {
ValidationUtils.checkFromTo(from, to);
return Helpers.unaryCall(() -> instrumentsBlockingStub.tradingSchedules(
TradingSchedulesRequest.newBuilder()
.setExchange(exchange)
.setFrom(DateUtils.instantToTimestamp(from))
.setTo(DateUtils.instantToTimestamp(to))
.build())
.getExchangesList()
.get(0));
}
/**
* Получение (синхронное) облигации по тикеру и бирже.
*
* @param ticker Тикер облигации.
* @param classCode Биржевой класс-код.
* @return Облигация (если таковая есть).
*/
@Nonnull
public Bond getBondByTickerSync(@Nonnull String ticker,
@Nonnull String classCode) {
return getInstrumentByTickerSync(ticker, classCode, request -> instrumentsBlockingStub.bondBy(request).getInstrument());
}
/**
* Получение (синхронное) облигации по FIGI.
*
* @param figi FIGI облигации.
* @return Облигация (если таковая есть).
*/
@Nonnull
public Bond getBondByFigiSync(@Nonnull String figi) {
return getInstrumentByFigiSync(figi, request -> instrumentsBlockingStub.bondBy(request).getInstrument());
}
/**
* Получение (синхронное) облигации по uid.
*
* @param uid Уникальный идентификатор инструмента.
* @return Облигация (если таковая есть).
*/
@Nonnull
public Bond getBondByUidSync(@Nonnull String uid) {
return getInstrumentByUidSync(uid, request -> instrumentsBlockingStub.bondBy(request).getInstrument());
}
/**
* Получение (синхронное) облигации по positionUid.
*
* @param positionUid Уникальный идентификатор позиции.
* @return Облигация (если таковая есть).
*/
@Nonnull
public Bond getBondByPositionUidSync(@Nonnull String positionUid) {
return getInstrumentByPositionUidSync(positionUid, request -> instrumentsBlockingStub.bondBy(request).getInstrument());
}
/**
* Получение (синхронное) списка облигаций доступных для торговли через Tinkoff Invest API.
*
* @return Список облигаций.
*/
@Nonnull
public List getTradableBondsSync() {
return getBondsSync(InstrumentStatus.INSTRUMENT_STATUS_BASE);
}
/**
* Получение (синхронное) списка всех облигаций доступных в Тинькофф Инвестиции.
*
* @return Список облигаций.
*/
@Nonnull
public List getAllBondsSync() {
return getBondsSync(InstrumentStatus.INSTRUMENT_STATUS_ALL);
}
/**
* Получение (синхронное) списка облигаций.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @return Список облигаций.
*/
public List getBondsSync(InstrumentStatus instrumentStatus) {
return Helpers.unaryCall(() -> instrumentsBlockingStub.bonds(
InstrumentsRequest.newBuilder()
.setInstrumentStatus(instrumentStatus)
.build())
.getInstrumentsList());
}
/**
* Получение (синхронное) валюты по тикеру и бирже.
*
* @param ticker Тикер валюты.
* @param classCode Биржевой класс-код.
* @return Валюта (если таковая есть).
*/
@Nonnull
public Currency getCurrencyByTickerSync(@Nonnull String ticker,
@Nonnull String classCode) {
return getInstrumentByTickerSync(
ticker,
classCode,
request -> instrumentsBlockingStub.currencyBy(request).getInstrument());
}
/**
* Получение (синхронное) валюты по FIGI.
*
* @param figi FIGI валюты.
* @return Валюта (если таковая есть).
*/
@Nonnull
public Currency getCurrencyByFigiSync(@Nonnull String figi) {
return getInstrumentByFigiSync(figi, request -> instrumentsBlockingStub.currencyBy(request).getInstrument());
}
/**
* Получение (синхронное) валюты по uid.
*
* @param uid Уникальный идентификатор инструмента.
* @return Валюта (если таковая есть).
*/
@Nonnull
public Currency getCurrencyByUidSync(@Nonnull String uid) {
return getInstrumentByUidSync(uid, request -> instrumentsBlockingStub.currencyBy(request).getInstrument());
}
/**
* Получение (синхронное) валюты по positionUid.
*
* @param positionUid Уникальный идентификатор позиции.
* @return Валюта (если таковая есть).
*/
@Nonnull
public Currency getCurrencyByPositionUidSync(@Nonnull String positionUid) {
return getInstrumentByPositionUidSync(positionUid, request -> instrumentsBlockingStub.currencyBy(request).getInstrument());
}
/**
* Получение (синхронное) списка валют.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @return Список валют.
*/
public List getCurrenciesSync(InstrumentStatus instrumentStatus) {
return Helpers.unaryCall(() -> instrumentsBlockingStub.currencies(
InstrumentsRequest.newBuilder()
.setInstrumentStatus(instrumentStatus)
.build())
.getInstrumentsList());
}
/**
* Получение (синхронное) списка валют доступных для торговли через Tinkoff Invest API.
*
* @return Список валют.
*/
@Nonnull
public List getTradableCurrenciesSync() {
return getCurrenciesSync(InstrumentStatus.INSTRUMENT_STATUS_BASE);
}
/**
* Получение (синхронное) списка всех валют доступных в Тинькофф Инвестиции.
*
* @return Список валют.
*/
@Nonnull
public List getAllCurrenciesSync() {
return getCurrenciesSync(InstrumentStatus.INSTRUMENT_STATUS_ALL);
}
/**
* Получение (синхронное) фонда по тикеру и бирже.
*
* @param ticker Тикер фонда.
* @param classCode Биржевой класс-код.
* @return Фонд (если таковой есть).
*/
@Nonnull
public Etf getEtfByTickerSync(@Nonnull String ticker,
@Nonnull String classCode) {
return getInstrumentByTickerSync(ticker, classCode, request -> instrumentsBlockingStub.etfBy(request).getInstrument());
}
/**
* Получение (синхронное) фонда по FIGI.
*
* @param figi FIGI фонда.
* @return Фонд (если таковой есть).
*/
@Nonnull
public Etf getEtfByFigiSync(@Nonnull String figi) {
return getInstrumentByFigiSync(figi, request -> instrumentsBlockingStub.etfBy(request).getInstrument());
}
/**
* Получение (синхронное) фонда по uid.
*
* @param uid Уникальный идентификатор инструмента.
* @return Фонд (если таковой есть).
*/
@Nonnull
public Etf getEtfByUidSync(@Nonnull String uid) {
return getInstrumentByUidSync(uid, request -> instrumentsBlockingStub.etfBy(request).getInstrument());
}
/**
* Получение (синхронное) фонда по positionUid.
*
* @param positionUid Уникальный идентификатор позиции.
* @return Фонд (если таковой есть).
*/
@Nonnull
public Etf getEtfByPositionUidSync(@Nonnull String positionUid) {
return getInstrumentByPositionUidSync(positionUid, request -> instrumentsBlockingStub.etfBy(request).getInstrument());
}
/**
* Получение (синхронное) списка фондов.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @return Список фондов.
*/
public List getEtfsSync(InstrumentStatus instrumentStatus) {
return Helpers.unaryCall(() -> instrumentsBlockingStub.etfs(
InstrumentsRequest.newBuilder()
.setInstrumentStatus(instrumentStatus)
.build())
.getInstrumentsList());
}
/**
* Получение (синхронное) списка фондов.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @param exchangeType Площадка, на которой торгуется инструмент, возможные значения.
* Значения INSTRUMENT_EXCHANGE_UNSPECIFIED - не определено,
* INSTRUNENT_EXCHANGE_DEALER - торговля внутри дилера;
* @return Список фондов.
*/
public List getEtfsSync(InstrumentStatus instrumentStatus, InstrumentExchangeType exchangeType) {
return Helpers.unaryCall(() -> instrumentsBlockingStub.etfs(
InstrumentsRequest.newBuilder()
.setInstrumentStatus(instrumentStatus)
.setInstrumentExchange(exchangeType)
.build())
.getInstrumentsList());
}
/**
* Получение (синхронное) списка фондов доступных для торговли через Tinkoff Invest API.
*
* @return Список фондов.
*/
@Nonnull
public List getTradableEtfsSync() {
return getEtfsSync(InstrumentStatus.INSTRUMENT_STATUS_BASE);
}
/**
* Получение (синхронное) списка всех фондов доступных в Тинькофф Инвестиции.
*
* @return Список фондов.
*/
@Nonnull
public List getAllEtfsSync() {
return getEtfsSync(InstrumentStatus.INSTRUMENT_STATUS_ALL);
}
/**
* Получение (синхронное) фьючерса по тикеру и бирже.
*
* @param ticker Тикер фьючерса.
* @param classCode Биржевой класс-код.
* @return Фьючерс (если таковой есть).
*/
@Nonnull
public Future getFutureByTickerSync(@Nonnull String ticker,
@Nonnull String classCode) {
return getInstrumentByTickerSync(
ticker,
classCode,
request -> instrumentsBlockingStub.futureBy(request).getInstrument());
}
/**
* Получение (синхронное) фьючерса по FIGI.
*
* @param figi FIGI фьючерса.
* @return Фьючерс (если таковой есть).
*/
@Nonnull
public Future getFutureByFigiSync(@Nonnull String figi) {
return getInstrumentByFigiSync(figi, request -> instrumentsBlockingStub.futureBy(request).getInstrument());
}
/**
* Получение (синхронное) фьючерса по uid.
*
* @param uid Уникальный идентификатор инструмента.
* @return Фьючерс (если таковой есть).
*/
@Nonnull
public Future getFutureByUidSync(@Nonnull String uid) {
return getInstrumentByUidSync(uid, request -> instrumentsBlockingStub.futureBy(request).getInstrument());
}
/**
* Получение (синхронное) фьючерса по positionUid.
*
* @param positionUid Уникальный идентификатор позиции.
* @return Фьючерс (если таковой есть).
*/
@Nonnull
public Future getFutureByPositionUidSync(@Nonnull String positionUid) {
return getInstrumentByPositionUidSync(positionUid, request -> instrumentsBlockingStub.futureBy(request).getInstrument());
}
/**
* Получение (синхронное) списка фьючерсов.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @return Список фьючерсов.
*/
public List getFuturesSync(InstrumentStatus instrumentStatus) {
return Helpers.unaryCall(() -> instrumentsBlockingStub.futures(
InstrumentsRequest.newBuilder()
.setInstrumentStatus(instrumentStatus)
.build())
.getInstrumentsList());
}
/**
* Получение (синхронное) списка фьючерсов доступных для торговли через Tinkoff Invest API.
*
* @return Список фьючерсов.
*/
@Nonnull
public List getTradableFuturesSync() {
return getFuturesSync(InstrumentStatus.INSTRUMENT_STATUS_BASE);
}
/**
* Получение (синхронное) списка всех фьючерсов доступных в Тинькофф Инвестиции.
*
* @return Список фондов.
*/
@Nonnull
public List getAllFuturesSync() {
return getFuturesSync(InstrumentStatus.INSTRUMENT_STATUS_ALL);
}
/**
* Получение (синхронное) акции по тикеру и бирже.
*
* @param ticker Тикер акции.
* @param classCode Биржевой класс-код.
* @return Акция (если таковой есть).
*/
@Nonnull
public Share getShareByTickerSync(@Nonnull String ticker,
@Nonnull String classCode) {
return getInstrumentByTickerSync(
ticker,
classCode,
request -> instrumentsBlockingStub.shareBy(request).getInstrument());
}
/**
* Получение (синхронное) акции по FIGI.
*
* @param figi FIGI акции.
* @return Акция (если таковой есть).
*/
@Nonnull
public Share getShareByFigiSync(@Nonnull String figi) {
return getInstrumentByFigiSync(figi, request -> instrumentsBlockingStub.shareBy(request).getInstrument());
}
/**
* Получение (синхронное) акции по uid.
*
* @param uid Уникальный идентификатор инструмента.
* @return Акция (если таковой есть).
*/
@Nonnull
public Share getShareByUidSync(@Nonnull String uid) {
return getInstrumentByUidSync(uid, request -> instrumentsBlockingStub.shareBy(request).getInstrument());
}
/**
* Получение (синхронное) акции по positionUid.
*
* @param positionUid Уникальный идентификатор позиции.
* @return Акция (если таковой есть).
*/
@Nonnull
public Share getShareByPositionUidSync(@Nonnull String positionUid) {
return getInstrumentByPositionUidSync(positionUid, request -> instrumentsBlockingStub.shareBy(request).getInstrument());
}
/**
* Получение (синхронное) списка акций.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @return Список акций.
*/
public List getSharesSync(InstrumentStatus instrumentStatus) {
return Helpers.unaryCall(() -> instrumentsBlockingStub.shares(
InstrumentsRequest.newBuilder()
.setInstrumentStatus(instrumentStatus)
.build())
.getInstrumentsList());
}
/**
* Получение (синхронное) списка акций.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @param exchangeType Площадка, на которой торгуется инструмент, возможные значения.
* Значения INSTRUMENT_EXCHANGE_UNSPECIFIED - не определено,
* INSTRUNENT_EXCHANGE_DEALER - торговля внутри дилера;
* @return Список акций.
*/
public List getSharesSync(InstrumentStatus instrumentStatus, InstrumentExchangeType exchangeType) {
return Helpers.unaryCall(() -> instrumentsBlockingStub.shares(
InstrumentsRequest.newBuilder()
.setInstrumentStatus(instrumentStatus)
.setInstrumentExchange(exchangeType)
.build())
.getInstrumentsList());
}
/**
* Получение (синхронное) списка акций доступных для торговли через Tinkoff Invest API.
*
* @return Список акций.
*/
@Nonnull
public List getTradableSharesSync() {
return getSharesSync(InstrumentStatus.INSTRUMENT_STATUS_BASE);
}
/**
* Получение (синхронное) списка всех акций доступных в Тинькофф Инвестиции.
*
* @return Список акций.
*/
@Nonnull
public List getAllSharesSync() {
return getSharesSync(InstrumentStatus.INSTRUMENT_STATUS_ALL);
}
/**
* Получение (синхронное) накопленного купонного дохода по облигации.
*
* @param figi FIGI облигации.
* @param from Начало периода по часовому поясу UTC.
* @param to Конец периода по часовому поясу UTC.
* @return НКД по облигации (если есть).
*/
@Nonnull
public List getAccruedInterestsSync(@Nonnull String figi,
@Nonnull Instant from,
@Nonnull Instant to) {
ValidationUtils.checkFromTo(from, to);
return Helpers.unaryCall(() -> instrumentsBlockingStub.getAccruedInterests(
GetAccruedInterestsRequest.newBuilder()
.setFigi(figi)
.setFrom(DateUtils.instantToTimestamp(from))
.setTo(DateUtils.instantToTimestamp(to))
.build())
.getAccruedInterestsList());
}
/**
* Получение (синхронное) размера гарантийного обеспечения по фьючерсам.
*
* @param figi figi / instrument_uid инструмента.
* @return Размер гарантийного обеспечения по фьючерсу (если есть).
*/
@Nonnull
public GetFuturesMarginResponse getFuturesMarginSync(@Nonnull String figi) {
return Helpers.unaryCall(() -> instrumentsBlockingStub.getFuturesMargin(
GetFuturesMarginRequest.newBuilder()
.setInstrumentId(figi)
.build()));
}
/**
* Получение (синхронное) основной информации об инструменте.
*
* @param ticker Тикер инструмента.
* @param classCode Биржевой класс-код.
* @return Основная информация об инструменте (если есть).
*/
@Nonnull
public Instrument getInstrumentByTickerSync(@Nonnull String ticker,
@Nonnull String classCode) {
return getInstrumentByTickerSync(ticker, classCode, request -> instrumentsBlockingStub.getInstrumentBy(request).getInstrument());
}
/**
* Получение (синхронное) основной информации об инструменте.
*
* @param figi FIGI инструмента.
* @return Основная информация об инструменте (если есть).
*/
@Nonnull
public Instrument getInstrumentByFigiSync(@Nonnull String figi) {
return getInstrumentByFigiSync(figi, request -> instrumentsBlockingStub.getInstrumentBy(request).getInstrument());
}
/**
* Получение (синхронное) событий выплаты дивидендов по инструменту.
*
* @param figi FIGI инструмента.
* @param from Начало периода по часовому поясу UTC.
* @param to Конец периода по часовому поясу UTC.
* @return События выплаты дивидендов по инструменту (если есть).
*/
@Nonnull
public List getDividendsSync(@Nonnull String figi,
@Nonnull Instant from,
@Nonnull Instant to) {
ValidationUtils.checkFromTo(from, to);
return Helpers.unaryCall(() -> instrumentsBlockingStub.getDividends(
GetDividendsRequest.newBuilder()
.setFigi(figi)
.setFrom(DateUtils.instantToTimestamp(from))
.setTo(DateUtils.instantToTimestamp(to))
.build())
.getDividendsList());
}
/**
* Получение (синхронное) списка активов.
*
* @return Список активов.
*/
@Nonnull
public List getAssetsSync() {
return Helpers.unaryCall(() -> instrumentsBlockingStub.getAssets(AssetsRequest.getDefaultInstance()).getAssetsList());
}
/**
* Получение (асинхронное) списка активов.
*
* @return Список активов.
*/
@Nonnull
public CompletableFuture> getAssets() {
return Helpers.unaryAsyncCall(
observer -> instrumentsStub.getAssets(AssetsRequest.getDefaultInstance(), observer))
.thenApply(AssetsResponse::getAssetsList);
}
/**
* Получение (синхронное) актива по его идентификатору.
*
* @return Данные по активу.
*/
@Nonnull
public AssetFull getAssetBySync(String uid) {
return Helpers.unaryCall(() -> instrumentsBlockingStub.getAssetBy(AssetRequest.newBuilder().setId(uid).build()).getAsset());
}
/**
* Получение (асинхронное) актива по его идентификатору.
*
* @return Данные по активу.
*/
@Nonnull
public CompletableFuture getAssetBy(String uid) {
return Helpers.unaryAsyncCall(observer -> instrumentsStub.getAssetBy(AssetRequest.newBuilder().setId(uid).build(), observer))
.thenApply(AssetResponse::getAsset);
}
/**
* Получение (асинхронное) расписания торгов всех торговых площадок.
*
* Начало периода не должно быть меньше полуночи текущих суток по Московскому времени.
*
* @param from Начало периода по часовому поясу UTC.
* @param to Окончание периода по часовому поясу UTC.
* @return Расписания торгов.
*/
@Nonnull
public CompletableFuture> getTradingSchedules(@Nonnull Instant from,
@Nonnull Instant to) {
ValidationUtils.checkFromTo(from, to);
return Helpers.unaryAsyncCall(
observer -> instrumentsStub.tradingSchedules(
TradingSchedulesRequest.newBuilder()
.setFrom(DateUtils.instantToTimestamp(from))
.setTo(DateUtils.instantToTimestamp(to))
.build(),
observer))
.thenApply(TradingSchedulesResponse::getExchangesList);
}
/**
* Получение (асинхронное) расписания торгов торговой площадки.
*
* Начало периода не должно быть меньше полуночи текущих суток по Московскому времени.
*
* @param exchange Наименование биржи или расчетного календаря.
* @param from Начало периода по часовому поясу UTC.
* @param to Окончание периода по часовому поясу UTC.
* @return Расписание торгов площадки (если таковая существует).
*/
@Nonnull
public CompletableFuture getTradingSchedule(@Nonnull String exchange,
@Nonnull Instant from,
@Nonnull Instant to) {
ValidationUtils.checkFromTo(from, to);
return Helpers.unaryCall(() -> Helpers.unaryAsyncCall(
observer -> instrumentsStub.tradingSchedules(
TradingSchedulesRequest.newBuilder()
.setExchange(exchange)
.setFrom(DateUtils.instantToTimestamp(from))
.setTo(DateUtils.instantToTimestamp(to))
.build(),
observer))
.thenApply(x -> x.getExchangesList().get(0)));
}
/**
* Получение (асинхронное) облигации по тикеру и бирже.
*
* @param ticker Тикер облигации.
* @param classCode Биржевой класс-код.
* @return Облигация (если таковая есть).
*/
@Nonnull
public CompletableFuture getBondByTicker(@Nonnull String ticker,
@Nonnull String classCode) {
return getInstrumentByTicker(ticker, classCode, instrumentsStub::bondBy, BondResponse::getInstrument);
}
/**
* Получение (асинхронное) облигации по FIGI.
*
* @param figi FIGI облигации.
* @return Облигация (если таковая есть).
*/
@Nonnull
public CompletableFuture getBondByFigi(@Nonnull String figi) {
return getInstrumentByFigi(figi, instrumentsStub::bondBy, BondResponse::getInstrument);
}
/**
* Получение (асинхронное) облигации по uid.
*
* @param uid Уникальный идентификатор инструмента.
* @return Облигация (если таковая есть).
*/
@Nonnull
public CompletableFuture getBondByUid(@Nonnull String uid) {
return getInstrumentByUid(uid, instrumentsStub::bondBy, BondResponse::getInstrument);
}
/**
* Получение (асинхронное) облигации по positionUid.
*
* @param positionUid Уникальный идентификатор позиции.
* @return Облигация (если таковая есть).
*/
@Nonnull
public CompletableFuture getBondByPositionUid(@Nonnull String positionUid) {
return getInstrumentByPositionUid(positionUid, instrumentsStub::bondBy, BondResponse::getInstrument);
}
/**
* Получение (асинхронное) списка облигаций.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @return Список облигаций.
*/
public CompletableFuture> getBonds(InstrumentStatus instrumentStatus) {
return Helpers.unaryAsyncCall(
observer -> instrumentsStub.bonds(
InstrumentsRequest.newBuilder()
.setInstrumentStatus(instrumentStatus)
.build(),
observer))
.thenApply(BondsResponse::getInstrumentsList);
}
/**
* Получение (асинхронное) списка облигаций доступных для торговли через Tinkoff Invest API.
*
* @return Список облигаций.
*/
@Nonnull
public CompletableFuture> getTradableBonds() {
return getBonds(InstrumentStatus.INSTRUMENT_STATUS_BASE);
}
/**
* Получение (асинхронное) списка всех облигаций доступных в Тинькофф Инвестиции.
*
* @return Список облигаций.
*/
@Nonnull
public CompletableFuture> getAllBonds() {
return getBonds(InstrumentStatus.INSTRUMENT_STATUS_ALL);
}
/**
* Получение (асинхронное) валюты по тикеру и бирже.
*
* @param ticker Тикер валюты.
* @param classCode Биржевой класс-код.
* @return Валюта (если таковая есть).
*/
@Nonnull
public CompletableFuture getCurrencyByTicker(@Nonnull String ticker,
@Nonnull String classCode) {
return getInstrumentByTicker(
ticker,
classCode,
instrumentsStub::currencyBy,
CurrencyResponse::getInstrument);
}
/**
* Получение (асинхронное) валюты по FIGI.
*
* @param figi FIGI валюты.
* @return Валюта (если таковая есть).
*/
@Nonnull
public CompletableFuture getCurrencyByFigi(@Nonnull String figi) {
return getInstrumentByFigi(figi, instrumentsStub::currencyBy, CurrencyResponse::getInstrument);
}
/**
* Получение (асинхронное) валюты по uid.
*
* @param uid Уникальный идентификатор инструмента.
* @return Валюта (если таковая есть).
*/
@Nonnull
public CompletableFuture getCurrencyByUid(@Nonnull String uid) {
return getInstrumentByUid(uid, instrumentsStub::currencyBy, CurrencyResponse::getInstrument);
}
/**
* Получение (асинхронное) валюты по positionUid.
*
* @param positionUid Уникальный идентификатор позиции.
* @return Валюта (если таковая есть).
*/
@Nonnull
public CompletableFuture getCurrencyByPositionUid(@Nonnull String positionUid) {
return getInstrumentByPositionUid(positionUid, instrumentsStub::currencyBy, CurrencyResponse::getInstrument);
}
/**
* Получение (асинхронное) списка валют.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @return Список валют.
*/
public CompletableFuture> getCurrencies(InstrumentStatus instrumentStatus) {
return Helpers.unaryAsyncCall(
observer -> instrumentsStub.currencies(
InstrumentsRequest.newBuilder()
.setInstrumentStatus(instrumentStatus)
.build(),
observer))
.thenApply(CurrenciesResponse::getInstrumentsList);
}
/**
* Получение (асинхронное) списка валют доступных для торговли через Tinkoff Invest API.
*
* @return Список валют.
*/
@Nonnull
public CompletableFuture> getTradableCurrencies() {
return getCurrencies(InstrumentStatus.INSTRUMENT_STATUS_BASE);
}
/**
* Получение (асинхронное) списка всех вслют доступных в Тинькофф Инвестиции.
*
* @return Список валют.
*/
@Nonnull
public CompletableFuture> getAllCurrencies() {
return getCurrencies(InstrumentStatus.INSTRUMENT_STATUS_ALL);
}
/**
* Получение (асинхронное) фонда по тикеру и бирже.
*
* @param ticker Тикер фонда.
* @param classCode Биржевой класс-код.
* @return Фонд (если таковой есть).
*/
@Nonnull
public CompletableFuture getEtfByTicker(@Nonnull String ticker,
@Nonnull String classCode) {
return getInstrumentByTicker(ticker, classCode, instrumentsStub::etfBy, EtfResponse::getInstrument);
}
/**
* Получение (синхронное) фонда по FIGI.
*
* @param figi FIGI фонда.
* @return Фонд (если таковой есть).
*/
@Nonnull
public CompletableFuture getEtfByFigi(@Nonnull String figi) {
return getInstrumentByFigi(figi, instrumentsStub::etfBy, EtfResponse::getInstrument);
}
/**
* Получение (синхронное) фонда по uid.
*
* @param uid Уникальный идентификатор инструмента.
* @return Фонд (если таковой есть).
*/
@Nonnull
public CompletableFuture getEtfByUid(@Nonnull String uid) {
return getInstrumentByUid(uid, instrumentsStub::etfBy, EtfResponse::getInstrument);
}
/**
* Получение (синхронное) фонда по positionUid.
*
* @param positionUid Уникальный идентификатор позиции.
* @return Фонд (если таковой есть).
*/
@Nonnull
public CompletableFuture getEtfByPositionUid(@Nonnull String positionUid) {
return getInstrumentByPositionUid(positionUid, instrumentsStub::etfBy, EtfResponse::getInstrument);
}
/**
* Получение (асинхронное) списка фондов.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @return Список фондов.
*/
public CompletableFuture> getEtfs(InstrumentStatus instrumentStatus) {
return Helpers.unaryAsyncCall(
observer -> instrumentsStub.etfs(
InstrumentsRequest.newBuilder()
.setInstrumentStatus(instrumentStatus)
.build(),
observer))
.thenApply(EtfsResponse::getInstrumentsList);
}
/**
* Получение (асинхронное) списка фондов.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @param exchangeType Площадка, на которой торгуется инструмент, возможные значения.
* Значения INSTRUMENT_EXCHANGE_UNSPECIFIED - не определено,
* INSTRUNENT_EXCHANGE_DEALER - торговля внутри дилера;
* @return Список фондов.
*/
public CompletableFuture> getEtfs(InstrumentStatus instrumentStatus, InstrumentExchangeType exchangeType) {
return Helpers.unaryAsyncCall(
observer -> instrumentsStub.etfs(
InstrumentsRequest.newBuilder()
.setInstrumentStatus(instrumentStatus)
.setInstrumentExchange(exchangeType)
.build(),
observer))
.thenApply(EtfsResponse::getInstrumentsList);
}
/**
* Получение (асинхронное) списка фондов доступных для торговли через Tinkoff Invest API.
*
* @return Список фондов.
*/
@Nonnull
public CompletableFuture> getTradableEtfs() {
return getEtfs(InstrumentStatus.INSTRUMENT_STATUS_BASE);
}
/**
* Получение (асинхронное) списка всех фондов доступных в Тинькофф Инвестиции.
*
* @return Список фондов.
*/
@Nonnull
public CompletableFuture> getAllEtfs() {
return getEtfs(InstrumentStatus.INSTRUMENT_STATUS_ALL);
}
/**
* Получение (асинхронное) фьючерса по тикеру и бирже.
*
* @param ticker Тикер фьючерса.
* @param classCode Биржевой класс-код.
* @return Фьючерс (если таковой есть).
*/
@Nonnull
public CompletableFuture getFutureByTicker(@Nonnull String ticker,
@Nonnull String classCode) {
return getInstrumentByTicker(ticker, classCode, instrumentsStub::futureBy, FutureResponse::getInstrument);
}
/**
* Получение (асинхронное) фьючерса по FIGI.
*
* @param figi FIGI фьючерса.
* @return Фьючерс (если таковой есть).
*/
@Nonnull
public CompletableFuture getFutureByFigi(@Nonnull String figi) {
return getInstrumentByFigi(figi, instrumentsStub::futureBy, FutureResponse::getInstrument);
}
/**
* Получение (асинхронное) фьючерса по uid.
*
* @param uid Уникальный идентификатор инструмента.
* @return Фьючерс (если таковой есть).
*/
@Nonnull
public CompletableFuture getFutureByUid(@Nonnull String uid) {
return getInstrumentByUid(uid, instrumentsStub::futureBy, FutureResponse::getInstrument);
}
/**
* Получение (асинхронное) фьючерса по positionUid.
*
* @param positionUid Уникальный идентификатор позиции.
* @return Фьючерс (если таковой есть).
*/
@Nonnull
public CompletableFuture getFutureByPositionUid(@Nonnull String positionUid) {
return getInstrumentByPositionUid(positionUid, instrumentsStub::futureBy, FutureResponse::getInstrument);
}
/**
* Получение (асинхронное) списка фьючерсов.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @return Список фьючерсов.
*/
public CompletableFuture> getFutures(InstrumentStatus instrumentStatus) {
return Helpers.unaryAsyncCall(
observer -> instrumentsStub.futures(
InstrumentsRequest.newBuilder()
.setInstrumentStatus(instrumentStatus)
.build(),
observer))
.thenApply(FuturesResponse::getInstrumentsList);
}
/**
* Получение (асинхронное) списка фьючерсов доступных для торговли через Tinkoff Invest API.
*
* @return Список фьючерсов.
*/
@Nonnull
public CompletableFuture> getTradableFutures() {
return getFutures(InstrumentStatus.INSTRUMENT_STATUS_BASE);
}
/**
* Получение (асинхронное) списка всех фьючерсов доступных в Тинькофф Инвестиции.
*
* @return Список фондов.
*/
@Nonnull
public CompletableFuture> getAllFutures() {
return getFutures(InstrumentStatus.INSTRUMENT_STATUS_ALL);
}
/**
* Получение (асинхронное) акции по тикеру и бирже.
*
* @param ticker Тикер акции.
* @param classCode Биржевой класс-код.
* @return Акция (если таковой есть).
*/
@Nonnull
public CompletableFuture getShareByTicker(@Nonnull String ticker,
@Nonnull String classCode) {
return getInstrumentByTicker(ticker, classCode, instrumentsStub::shareBy, ShareResponse::getInstrument);
}
/**
* Получение (асинхронное) акции по FIGI.
*
* @param figi FIGI акции.
* @return Акция (если таковой есть).
*/
@Nonnull
public CompletableFuture getShareByFigi(@Nonnull String figi) {
return getInstrumentByFigi(figi, instrumentsStub::shareBy, ShareResponse::getInstrument);
}
/**
* Получение (асинхронное) акции по uid.
*
* @param uid Уникальный идентификатор инструмента.
* @return Акция (если таковой есть).
*/
@Nonnull
public CompletableFuture getShareByUid(@Nonnull String uid) {
return getInstrumentByUid(uid, instrumentsStub::shareBy, ShareResponse::getInstrument);
}
/**
* Получение (асинхронное) акции по positionUid.
*
* @param positionUid Уникальный идентификатор позиции.
* @return Акция (если таковой есть).
*/
@Nonnull
public CompletableFuture getShareByPositionUid(@Nonnull String positionUid) {
return getInstrumentByPositionUid(positionUid, instrumentsStub::shareBy, ShareResponse::getInstrument);
}
/**
* Получение (асинхронное) списка акций.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @return Список акций.
*/
public CompletableFuture> getShares(InstrumentStatus instrumentStatus) {
return Helpers.unaryAsyncCall(
observer -> instrumentsStub.shares(
InstrumentsRequest.newBuilder()
.setInstrumentStatus(instrumentStatus)
.build(),
observer))
.thenApply(SharesResponse::getInstrumentsList);
}
/**
* Получение (асинхронное) списка акций.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @param exchangeType Площадка, на которой торгуется инструмент, возможные значения.
* Значения INSTRUMENT_EXCHANGE_UNSPECIFIED - не определено,
* INSTRUNENT_EXCHANGE_DEALER - торговля внутри дилера;
* @return Список акций.
*/
public CompletableFuture> getShares(InstrumentStatus instrumentStatus,
InstrumentExchangeType exchangeType) {
return Helpers.unaryAsyncCall(
observer -> instrumentsStub.shares(
InstrumentsRequest.newBuilder()
.setInstrumentStatus(instrumentStatus)
.setInstrumentExchange(exchangeType)
.build(),
observer))
.thenApply(SharesResponse::getInstrumentsList);
}
/**
* Получение (асинхронное) списка акций доступных для торговли через Tinkoff Invest API.
*
* @return Список акций.
*/
@Nonnull
public CompletableFuture> getTradableShares() {
return getShares(InstrumentStatus.INSTRUMENT_STATUS_BASE);
}
/**
* Получение (асинхронное) списка всех акций доступных в Тинькофф Инвестиции.
*
* @return Список акций.
*/
@Nonnull
public CompletableFuture> getAllShares() {
return getShares(InstrumentStatus.INSTRUMENT_STATUS_ALL);
}
/**
* Получение (асинхронное) списка опционов.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @return Список опционов.
*/
public CompletableFuture> getOptions(InstrumentStatus instrumentStatus) {
return Helpers.unaryAsyncCall(
observer -> instrumentsStub.options(
InstrumentsRequest.newBuilder()
.setInstrumentStatus(instrumentStatus)
.build(),
observer))
.thenApply(OptionsResponse::getInstrumentsList);
}
/**
* Получение (асинхронное) списка опционов доступных для торговли через Tinkoff Invest API.
*
* @return Список опционов.
*/
@Nonnull
public CompletableFuture> getTradableOptions() {
return getOptions(InstrumentStatus.INSTRUMENT_STATUS_BASE);
}
/**
* Получение (асинхронное) списка всех опционов доступных в Тинькофф Инвестиции.
*
* @return Список опционов.
*/
@Nonnull
public CompletableFuture> getAllOptions() {
return getOptions(InstrumentStatus.INSTRUMENT_STATUS_ALL);
}
/**
* Получение (синхронное) списка опционов.
*
* @param instrumentStatus статус инструмента. Значения INSTRUMENT_STATUS_BASE, INSTRUMENT_STATUS_ALL
* @return Список опционов.
*/
public List