Files
raptor-trading/invest-python-master/t_tech/invest/services.py

2345 lines
90 KiB
Python

# pylint:disable=redefined-builtin,too-many-lines
import logging
from datetime import datetime
from typing import Generator, Iterable, Iterator, List, Optional
import grpc
from deprecation import deprecated
from . import _grpc_helpers, utils
from ._error_hub import handle_error_hub_gen
from ._errors import handle_request_error, handle_request_error_gen
from .exceptions import RequestError
from .grpc import (
instruments_pb2,
instruments_pb2_grpc,
marketdata_pb2,
marketdata_pb2_grpc,
operations_pb2,
operations_pb2_grpc,
orders_pb2,
orders_pb2_grpc,
sandbox_pb2,
sandbox_pb2_grpc,
signals_pb2,
signals_pb2_grpc,
stoporders_pb2,
stoporders_pb2_grpc,
users_pb2,
users_pb2_grpc,
)
from .logging import get_tracking_id_from_call, log_request
from .market_data_stream.market_data_stream_manager import MarketDataStreamManager
from .metadata import get_metadata
from .schemas import (
AssetRequest,
AssetResponse,
AssetsRequest,
AssetsResponse,
BondResponse,
BondsResponse,
Brand,
BrokerReportRequest,
BrokerReportResponse,
CancelOrderRequest,
CancelOrderResponse,
CancelStopOrderRequest,
CancelStopOrderResponse,
CandleInterval,
CandleSource,
CloseSandboxAccountRequest,
CloseSandboxAccountResponse,
CreateFavoriteGroupRequest,
CreateFavoriteGroupResponse,
CurrenciesResponse,
CurrencyResponse,
CurrencyTransferRequest,
CurrencyTransferResponse,
DeleteFavoriteGroupRequest,
DeleteFavoriteGroupResponse,
DfaResponse,
DfasRequest,
DfasResponse,
EditFavoritesActionType,
EditFavoritesRequest,
EditFavoritesRequestInstrument,
EditFavoritesResponse,
EtfResponse,
EtfsResponse,
ExchangeOrderType,
FilterOptionsRequest,
FindInstrumentRequest,
FindInstrumentResponse,
FutureResponse,
FuturesResponse,
GenerateBrokerReportRequest,
GenerateDividendsForeignIssuerReportRequest,
GetAccountsRequest,
GetAccountsResponse,
GetAccountValuesRequest,
GetAccountValuesResponse,
GetAccruedInterestsRequest,
GetAccruedInterestsResponse,
GetAssetFundamentalsRequest,
GetAssetFundamentalsResponse,
GetAssetReportsRequest,
GetAssetReportsResponse,
GetBankAccountsRequest,
GetBankAccountsResponse,
GetBondCouponsRequest,
GetBondCouponsResponse,
GetBondEventsRequest,
GetBondEventsResponse,
GetBrandRequest,
GetBrandsRequest,
GetBrandsResponse,
GetBrokerReportRequest,
GetCandlesRequest,
GetCandlesResponse,
GetClosePricesRequest,
GetClosePricesResponse,
GetConsensusForecastsRequest,
GetConsensusForecastsResponse,
GetCountriesRequest,
GetCountriesResponse,
GetDividendsForeignIssuerReportRequest,
GetDividendsForeignIssuerRequest,
GetDividendsForeignIssuerResponse,
GetDividendsRequest,
GetDividendsResponse,
GetFavoriteGroupsRequest,
GetFavoriteGroupsResponse,
GetFavoritesRequest,
GetFavoritesResponse,
GetForecastRequest,
GetForecastResponse,
GetFuturesMarginRequest,
GetFuturesMarginResponse,
GetInfoRequest,
GetInfoResponse,
GetInsiderDealsRequest,
GetInsiderDealsResponse,
GetLastPricesRequest,
GetLastPricesResponse,
GetLastTradesRequest,
GetLastTradesResponse,
GetMarginAttributesRequest,
GetMarginAttributesResponse,
GetMarketValuesRequest,
GetMarketValuesResponse,
GetMaxLotsRequest,
GetMaxLotsResponse,
GetOperationsByCursorRequest,
GetOperationsByCursorResponse,
GetOrderBookRequest,
GetOrderBookResponse,
GetOrderPriceRequest,
GetOrderPriceResponse,
GetOrdersRequest,
GetOrdersRequestFilters,
GetOrdersResponse,
GetOrderStateRequest,
GetSignalsRequest,
GetSignalsResponse,
GetStopOrdersRequest,
GetStopOrdersResponse,
GetStrategiesRequest,
GetStrategiesResponse,
GetTechAnalysisRequest,
GetTechAnalysisResponse,
GetTradingStatusesRequest,
GetTradingStatusesResponse,
GetTradingStatusRequest,
GetTradingStatusResponse,
GetUserTariffRequest,
GetUserTariffResponse,
HistoricCandle,
IndicativesRequest,
IndicativesResponse,
InstrumentClosePriceRequest,
InstrumentExchangeType,
InstrumentIdType,
InstrumentRequest,
InstrumentResponse,
InstrumentsRequest,
InstrumentStatus,
InstrumentType,
LastPriceType,
MarketDataRequest,
MarketDataResponse,
MarketDataServerSideStreamRequest,
MoneyValue,
OpenSandboxAccountRequest,
OpenSandboxAccountResponse,
OperationsRequest,
OperationsResponse,
OperationsStreamRequest,
OperationsStreamResponse,
OperationState,
OptionResponse,
OptionsResponse,
OrderDirection,
OrderExecutionReportStatus,
OrderIdType,
OrderState,
OrderStateStreamRequest,
OrderStateStreamResponse,
OrderType,
Page,
PayInRequest,
PayInResponse,
PingDelaySettings,
PortfolioRequest,
PortfolioResponse,
PortfolioStreamRequest,
PortfolioStreamResponse,
PositionsRequest,
PositionsResponse,
PositionsStreamRequest,
PositionsStreamResponse,
PostOrderAsyncRequest,
PostOrderAsyncResponse,
PostOrderRequest,
PostOrderResponse,
PostStopOrderRequest,
PostStopOrderRequestTrailingData,
PostStopOrderResponse,
PriceType,
Quotation,
ReplaceOrderRequest,
RiskRatesRequest,
RiskRatesResponse,
SandboxPayInRequest,
SandboxPayInResponse,
ShareResponse,
SharesResponse,
StopOrderDirection,
StopOrderExpirationType,
StopOrderStatusOption,
StopOrderType,
StructuredNoteResponse,
StructuredNotesResponse,
TakeProfitType,
TimeInForceType,
TradeSourceType,
TradesStreamRequest,
TradesStreamResponse,
TradingSchedulesRequest,
TradingSchedulesResponse,
WithdrawLimitsRequest,
WithdrawLimitsResponse,
)
from .typedefs import AccountId
from .utils import get_intervals, now
__all__ = (
"Services",
"InstrumentsService",
"MarketDataService",
"MarketDataStreamService",
"OperationsService",
"OperationsStreamService",
"OrdersStreamService",
"OrdersService",
"UsersService",
"SandboxService",
"StopOrdersService",
"SignalService",
)
logger = logging.getLogger(__name__)
class Services:
def __init__(
self,
channel: grpc.Channel,
token: str,
sandbox_token: Optional[str] = None,
app_name: Optional[str] = None,
) -> None:
metadata = get_metadata(token, app_name)
sandbox_metadata = get_metadata(sandbox_token or token, app_name)
self.instruments = InstrumentsService(channel, metadata)
self.market_data = MarketDataService(channel, metadata)
self.market_data_stream = MarketDataStreamService(channel, metadata)
self.operations = OperationsService(channel, metadata)
self.operations_stream = OperationsStreamService(channel, metadata)
self.orders_stream = OrdersStreamService(channel, metadata)
self.orders = OrdersService(channel, metadata)
self.users = UsersService(channel, metadata)
self.sandbox = SandboxService(channel, sandbox_metadata)
self.stop_orders = StopOrdersService(channel, metadata)
self.signals = SignalService(channel, metadata)
def create_market_data_stream(self) -> MarketDataStreamManager:
return MarketDataStreamManager(
market_data_stream_service=self.market_data_stream
)
def cancel_all_orders(self, account_id: AccountId) -> None:
orders_service: OrdersService = self.orders
stop_orders_service: StopOrdersService = self.stop_orders
orders_response = orders_service.get_orders(account_id=account_id)
for order in orders_response.orders:
orders_service.cancel_order(account_id=account_id, order_id=order.order_id)
stop_orders_response = stop_orders_service.get_stop_orders(
account_id=account_id
)
for stop_order in stop_orders_response.stop_orders:
stop_orders_service.cancel_stop_order(
account_id=account_id, stop_order_id=stop_order.stop_order_id
)
# pylint:disable=too-many-nested-blocks
def get_all_candles(
self,
*,
from_: datetime,
to: Optional[datetime] = None,
interval: CandleInterval = CandleInterval(0),
figi: str = "",
instrument_id: str = "",
candle_source_type: Optional[CandleSource] = None,
) -> Generator[HistoricCandle, None, None]:
to = to or now()
previous_candles = set()
for current_from, current_to in get_intervals(interval, from_, to):
candles_response: GetCandlesResponse = self.market_data.get_candles(
figi=figi,
interval=interval,
from_=current_from,
to=current_to,
instrument_id=instrument_id,
candle_source_type=candle_source_type,
)
for candle in candles_response.candles:
if candle not in previous_candles:
yield candle
previous_candles.add(candle)
previous_candles = set(candles_response.candles)
class InstrumentsService(_grpc_helpers.Service):
_stub_factory = instruments_pb2_grpc.InstrumentsServiceStub
@handle_request_error("TradingSchedules")
def trading_schedules(
self,
*,
exchange: str = "",
from_: Optional[datetime] = None,
to: Optional[datetime] = None,
) -> TradingSchedulesResponse:
request = TradingSchedulesRequest()
request.exchange = exchange
if from_ is not None:
request.from_ = from_
if to is not None:
request.to = to
response, call = self.stub.TradingSchedules.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.TradingSchedulesRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "TradingSchedules")
return _grpc_helpers.protobuf_to_dataclass(response, TradingSchedulesResponse)
@handle_request_error("BondBy")
def bond_by(
self,
*,
id_type: InstrumentIdType = InstrumentIdType(0),
class_code: str = "",
id: str = "",
) -> BondResponse:
request = InstrumentRequest()
request.id_type = id_type
request.class_code = class_code
request.id = id
response, call = self.stub.BondBy.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "BondBy")
return _grpc_helpers.protobuf_to_dataclass(response, BondResponse)
@handle_request_error("Bonds")
def bonds(
self,
*,
instrument_status: InstrumentStatus = InstrumentStatus(0),
instrument_exchange: InstrumentExchangeType = InstrumentExchangeType(0),
) -> BondsResponse:
request = InstrumentsRequest()
request.instrument_status = instrument_status
request.instrument_exchange = instrument_exchange
response, call = self.stub.Bonds.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "Bonds")
return _grpc_helpers.protobuf_to_dataclass(response, BondsResponse)
@handle_request_error("CurrencyBy")
def currency_by(
self,
*,
id_type: InstrumentIdType = InstrumentIdType(0),
class_code: str = "",
id: str = "",
) -> CurrencyResponse:
request = InstrumentRequest()
request.id_type = id_type
request.class_code = class_code
request.id = id
response, call = self.stub.CurrencyBy.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "CurrencyBy")
return _grpc_helpers.protobuf_to_dataclass(response, CurrencyResponse)
@handle_request_error("Currencies")
def currencies(
self,
*,
instrument_status: InstrumentStatus = InstrumentStatus(0),
instrument_exchange: InstrumentExchangeType = InstrumentExchangeType(0),
) -> CurrenciesResponse:
request = InstrumentsRequest()
request.instrument_status = instrument_status
request.instrument_exchange = instrument_exchange
response, call = self.stub.Currencies.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "Currencies")
return _grpc_helpers.protobuf_to_dataclass(response, CurrenciesResponse)
@handle_request_error("EtfBy")
def etf_by(
self,
*,
id_type: InstrumentIdType = InstrumentIdType(0),
class_code: str = "",
id: str = "",
) -> EtfResponse:
request = InstrumentRequest()
request.id_type = id_type
request.class_code = class_code
request.id = id
response, call = self.stub.EtfBy.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "EtfBy")
return _grpc_helpers.protobuf_to_dataclass(response, EtfResponse)
@handle_request_error("Etfs")
def etfs(
self,
*,
instrument_status: InstrumentStatus = InstrumentStatus(0),
instrument_exchange: InstrumentExchangeType = InstrumentExchangeType(0),
) -> EtfsResponse:
request = InstrumentsRequest()
request.instrument_status = instrument_status
request.instrument_exchange = instrument_exchange
response, call = self.stub.Etfs.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "Etfs")
return _grpc_helpers.protobuf_to_dataclass(response, EtfsResponse)
@handle_request_error("FutureBy")
def future_by(
self,
*,
id_type: InstrumentIdType = InstrumentIdType(0),
class_code: str = "",
id: str = "",
) -> FutureResponse:
request = InstrumentRequest()
request.id_type = id_type
request.class_code = class_code
request.id = id
response, call = self.stub.FutureBy.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "FutureBy")
return _grpc_helpers.protobuf_to_dataclass(response, FutureResponse)
@handle_request_error("Futures")
def futures(
self,
*,
instrument_status: InstrumentStatus = InstrumentStatus(0),
instrument_exchange: InstrumentExchangeType = InstrumentExchangeType(0),
) -> FuturesResponse:
request = InstrumentsRequest()
request.instrument_status = instrument_status
request.instrument_exchange = instrument_exchange
response, call = self.stub.Futures.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "Futures")
return _grpc_helpers.protobuf_to_dataclass(response, FuturesResponse)
@handle_request_error("OptionBy")
def option_by(
self,
*,
id_type: InstrumentIdType = InstrumentIdType(0),
class_code: str = "",
id: str = "",
) -> OptionResponse:
request = InstrumentRequest()
request.id_type = id_type
request.class_code = class_code
request.id = id
response, call = self.stub.OptionBy.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "OptionBy")
return _grpc_helpers.protobuf_to_dataclass(response, OptionResponse)
@deprecated(details="Use `Client.instruments.options_by(...)` method instead")
@handle_request_error("Options")
def options(
self,
*,
instrument_status: InstrumentStatus = InstrumentStatus(0),
instrument_exchange: InstrumentExchangeType = InstrumentExchangeType(0),
) -> OptionsResponse:
request = InstrumentsRequest()
request.instrument_status = instrument_status
request.instrument_exchange = instrument_exchange
response, call = self.stub.Options.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "Options")
return _grpc_helpers.protobuf_to_dataclass(response, OptionsResponse)
@handle_request_error("OptionsBy")
def options_by(
self, *, basic_asset_uid: str = "", basic_asset_position_uid: str = ""
) -> OptionsResponse:
request = FilterOptionsRequest()
request.basic_asset_uid = basic_asset_uid
request.basic_asset_position_uid = basic_asset_position_uid
response, call = self.stub.OptionsBy.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.FilterOptionsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "OptionsBy")
return _grpc_helpers.protobuf_to_dataclass(response, OptionsResponse)
@handle_request_error("ShareBy")
def share_by(
self,
*,
id_type: InstrumentIdType = InstrumentIdType(0),
class_code: str = "",
id: str = "",
) -> ShareResponse:
request = InstrumentRequest()
request.id_type = id_type
request.class_code = class_code
request.id = id
response, call = self.stub.ShareBy.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "ShareBy")
return _grpc_helpers.protobuf_to_dataclass(response, ShareResponse)
@handle_request_error("Shares")
def shares(
self,
*,
instrument_status: InstrumentStatus = InstrumentStatus(0),
instrument_exchange: InstrumentExchangeType = InstrumentExchangeType(0),
) -> SharesResponse:
request = InstrumentsRequest()
request.instrument_status = instrument_status
request.instrument_exchange = instrument_exchange
response, call = self.stub.Shares.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "Shares")
return _grpc_helpers.protobuf_to_dataclass(response, SharesResponse)
@handle_request_error("Indicatives")
def indicatives(
self,
request: IndicativesRequest,
) -> IndicativesResponse:
response, call = self.stub.Indicatives.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "Indicatives")
return _grpc_helpers.protobuf_to_dataclass(response, IndicativesResponse)
@handle_request_error("GetAccruedInterests")
def get_accrued_interests(
self,
*,
figi: str = "",
from_: Optional[datetime] = None,
to: Optional[datetime] = None,
instrument_id: str = "",
) -> GetAccruedInterestsResponse:
request = GetAccruedInterestsRequest()
request.figi = figi
request.instrument_id = instrument_id
if from_ is not None:
request.from_ = from_
if to is not None:
request.to = to
response, call = self.stub.GetAccruedInterests.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.GetAccruedInterestsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetAccruedInterests")
return _grpc_helpers.protobuf_to_dataclass(
response, GetAccruedInterestsResponse
)
@handle_request_error("GetFuturesMargin")
def get_futures_margin(
self, *, figi: str = "", instrument_id: str = ""
) -> GetFuturesMarginResponse:
request = GetFuturesMarginRequest()
request.figi = figi
request.instrument_id = instrument_id
response, call = self.stub.GetFuturesMargin.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.GetFuturesMarginRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetFuturesMargin")
return _grpc_helpers.protobuf_to_dataclass(response, GetFuturesMarginResponse)
@handle_request_error("GetInstrumentBy")
def get_instrument_by(
self,
*,
id_type: InstrumentIdType = InstrumentIdType(0),
class_code: str = "",
id: str = "",
) -> InstrumentResponse:
request = InstrumentRequest()
request.id_type = id_type
request.class_code = class_code
request.id = id
response, call = self.stub.GetInstrumentBy.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetInstrumentBy")
return _grpc_helpers.protobuf_to_dataclass(response, InstrumentResponse)
@handle_request_error("GetDividends")
def get_dividends(
self,
*,
figi: str = "",
from_: Optional[datetime] = None,
to: Optional[datetime] = None,
instrument_id: str = "",
) -> GetDividendsResponse:
request = GetDividendsRequest()
request.figi = figi
request.instrument_id = instrument_id
if from_ is not None:
request.from_ = from_
if to is not None:
request.to = to
response, call = self.stub.GetDividends.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.GetDividendsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetDividends")
return _grpc_helpers.protobuf_to_dataclass(response, GetDividendsResponse)
@handle_request_error("GetBondCoupons")
def get_bond_coupons(
self,
*,
figi: str = "",
from_: Optional[datetime] = None,
to: Optional[datetime] = None,
instrument_id: str = "",
) -> GetBondCouponsResponse:
request = GetBondCouponsRequest()
request.figi = figi
request.instrument_id = instrument_id
if from_ is not None:
request.from_ = from_
if to is not None:
request.to = to
response, call = self.stub.GetBondCoupons.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.GetBondCouponsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetBondCoupons")
return _grpc_helpers.protobuf_to_dataclass(response, GetBondCouponsResponse)
@handle_request_error("GetBondEvents")
def get_bond_events(self, request: GetBondEventsRequest) -> GetBondEventsResponse:
response, call = self.stub.GetBondEvents.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.GetBondEventsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetBondEvents")
return _grpc_helpers.protobuf_to_dataclass(response, GetBondEventsResponse)
@handle_request_error("GetAssetBy")
def get_asset_by(
self,
*,
id: str = "",
) -> AssetResponse:
request = AssetRequest()
request.id = id
response, call = self.stub.GetAssetBy.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.AssetRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetAssetBy")
return _grpc_helpers.protobuf_to_dataclass(response, AssetResponse)
@handle_request_error("GetAssets")
def get_assets(
self,
request: AssetsRequest,
) -> AssetsResponse:
if request is None:
request = AssetsRequest()
response, call = self.stub.GetAssets.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.AssetsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetAssets")
return _grpc_helpers.protobuf_to_dataclass(response, AssetsResponse)
@handle_request_error("GetFavorites")
def get_favorites(
self,
*,
group_id: Optional[str] = None,
) -> GetFavoritesResponse:
request = GetFavoritesRequest()
if group_id is not None:
request.group_id = group_id
response, call = self.stub.GetFavorites.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.GetFavoritesRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetFavorites")
return _grpc_helpers.protobuf_to_dataclass(response, GetFavoritesResponse)
@handle_request_error("EditFavorites")
def edit_favorites(
self,
*,
instruments: Optional[List[EditFavoritesRequestInstrument]] = None,
action_type: Optional[EditFavoritesActionType] = None,
group_id: Optional[str] = None,
) -> EditFavoritesResponse:
request = EditFavoritesRequest()
if action_type is not None:
request.action_type = action_type
if instruments is not None:
request.instruments = instruments
if group_id is not None:
request.group_id = group_id
response, call = self.stub.EditFavorites.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.EditFavoritesRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "EditFavorites")
return _grpc_helpers.protobuf_to_dataclass(response, EditFavoritesResponse)
@handle_request_error("CreateFavoriteGroup")
def create_favorite_group(
self,
request: CreateFavoriteGroupRequest,
) -> CreateFavoriteGroupResponse:
response, call = self.stub.CreateFavoriteGroup.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.CreateFavoriteGroupRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "CreateFavoriteGroup")
return _grpc_helpers.protobuf_to_dataclass(
response, CreateFavoriteGroupResponse
)
@handle_request_error("DeleteFavoriteGroup")
def delete_favorite_group(
self,
request: DeleteFavoriteGroupRequest,
) -> DeleteFavoriteGroupResponse:
response, call = self.stub.DeleteFavoriteGroup.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.DeleteFavoriteGroupRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "DeleteFavoriteGroup")
return _grpc_helpers.protobuf_to_dataclass(
response, DeleteFavoriteGroupResponse
)
@handle_request_error("GetFavoriteGroups")
def get_favorite_groups(
self,
request: GetFavoriteGroupsRequest,
) -> GetFavoriteGroupsResponse:
response, call = self.stub.GetFavoriteGroups.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.GetFavoriteGroupsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetFavoriteGroups")
return _grpc_helpers.protobuf_to_dataclass(response, GetFavoriteGroupsResponse)
@handle_request_error("GetCountries")
def get_countries(
self,
) -> GetCountriesResponse:
request = GetCountriesRequest()
response, call = self.stub.GetCountries.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.GetCountriesRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetCountries")
return _grpc_helpers.protobuf_to_dataclass(response, GetCountriesResponse)
@handle_request_error("FindInstrument")
def find_instrument(
self,
*,
query: str = "",
instrument_kind: Optional[InstrumentType] = None,
api_trade_available_flag: Optional[bool] = None,
) -> FindInstrumentResponse:
request = FindInstrumentRequest()
request.query = query
if instrument_kind is not None:
request.instrument_kind = instrument_kind
if api_trade_available_flag is not None:
request.api_trade_available_flag = api_trade_available_flag
response, call = self.stub.FindInstrument.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.FindInstrumentRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "FindInstrument")
return _grpc_helpers.protobuf_to_dataclass(response, FindInstrumentResponse)
@handle_request_error("GetBrands")
def get_brands(
self,
paging: Optional[Page] = None,
) -> GetBrandsResponse:
request = GetBrandsRequest()
if paging is not None:
request.paging = paging
response, call = self.stub.GetBrands.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.GetBrandsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetBrands")
return _grpc_helpers.protobuf_to_dataclass(response, GetBrandsResponse)
@handle_request_error("GetBrandBy")
def get_brands_by(self, id: str = "") -> Brand:
request = GetBrandRequest()
request.id = id
response, call = self.stub.GetBrandBy.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.GetBrandRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetBrandBy")
return _grpc_helpers.protobuf_to_dataclass(response, Brand)
@handle_request_error("GetAssetFundamentals")
def get_asset_fundamentals(
self, request: GetAssetFundamentalsRequest
) -> GetAssetFundamentalsResponse:
response, call = self.stub.GetAssetFundamentals.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.GetAssetFundamentalsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetAssetFundamentals")
return _grpc_helpers.protobuf_to_dataclass(
response, GetAssetFundamentalsResponse
)
@handle_request_error("GetAssetReports")
def get_asset_reports(
self, request: GetAssetReportsRequest
) -> GetAssetReportsResponse:
response, call = self.stub.GetAssetReports.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.GetAssetReportsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetAssetReports")
return _grpc_helpers.protobuf_to_dataclass(response, GetAssetReportsResponse)
@handle_request_error("GetConsensusForecasts")
def get_consensus_forecasts(
self, request: GetConsensusForecastsRequest
) -> GetConsensusForecastsResponse:
response, call = self.stub.GetConsensusForecasts.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.GetConsensusForecastsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetConsensusForecasts")
return _grpc_helpers.protobuf_to_dataclass(
response, GetConsensusForecastsResponse
)
@handle_request_error("GetForecastBy")
def get_forecast_by(self, request: GetForecastRequest) -> GetForecastResponse:
response, call = self.stub.GetForecastBy.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.GetForecastRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetForecastBy")
return _grpc_helpers.protobuf_to_dataclass(response, GetForecastResponse)
@handle_request_error("GetRiskRates")
def get_risk_rates(self, request: RiskRatesRequest) -> RiskRatesResponse:
response, call = self.stub.GetRiskRates.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.RiskRatesRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetRiskRates")
return _grpc_helpers.protobuf_to_dataclass(response, RiskRatesResponse)
@handle_request_error("GetInsiderDeals")
def get_insider_deals(
self,
request: GetInsiderDealsRequest,
) -> GetInsiderDealsResponse:
response, call = self.stub.GetInsiderDeals.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.GetInsiderDealsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetInsiderDeals")
return _grpc_helpers.protobuf_to_dataclass(response, GetInsiderDealsResponse)
@handle_request_error("StructuredNoteBy")
def structured_note_by(self, request: InstrumentRequest) -> StructuredNoteResponse:
response, call = self.stub.StructuredNoteBy.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "StructuredNoteBy")
return _grpc_helpers.protobuf_to_dataclass(response, StructuredNoteResponse)
@handle_request_error("StructuredNotes")
def structured_notes(
self,
request: InstrumentsRequest,
) -> StructuredNotesResponse:
response, call = self.stub.StructuredNotes.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "StructuredNotes")
return _grpc_helpers.protobuf_to_dataclass(response, StructuredNotesResponse)
@handle_request_error("Dfas")
def dfas(
self,
) -> DfasResponse:
response, call = self.stub.Dfas.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
DfasRequest(), instruments_pb2.DfasRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "Dfas")
return _grpc_helpers.protobuf_to_dataclass(response, DfasResponse)
@handle_request_error("DfaBy")
def dfa_by(
self,
request: InstrumentRequest,
) -> DfaResponse:
response, call = self.stub.DfaBy.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, instruments_pb2.InstrumentRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "DfaBy")
return _grpc_helpers.protobuf_to_dataclass(response, DfaResponse)
class MarketDataService(_grpc_helpers.Service):
_stub_factory = marketdata_pb2_grpc.MarketDataServiceStub
@handle_request_error("GetCandles")
def get_candles(
self,
*,
figi: str = "",
from_: Optional[datetime] = None,
to: Optional[datetime] = None,
interval: CandleInterval = CandleInterval(0),
instrument_id: str = "",
candle_source_type: Optional[CandleSource] = None,
limit: Optional[int] = None,
) -> GetCandlesResponse:
request = GetCandlesRequest()
request.figi = figi
request.instrument_id = instrument_id
request.candle_source_type = candle_source_type
if from_ is not None:
request.from_ = from_
if to is not None:
request.to = to
if limit is not None:
request.limit = limit
request.interval = interval
response, call = self.stub.GetCandles.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, marketdata_pb2.GetCandlesRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetCandles")
return _grpc_helpers.protobuf_to_dataclass(response, GetCandlesResponse)
@handle_request_error("GetLastPrices")
def get_last_prices(
self,
*,
figi: Optional[List[str]] = None,
instrument_id: Optional[List[str]] = None,
last_price_type: LastPriceType = LastPriceType.LAST_PRICE_UNSPECIFIED,
instrument_status: Optional[InstrumentStatus] = None,
) -> GetLastPricesResponse:
figi = figi or []
instrument_id = instrument_id or []
request = GetLastPricesRequest()
request.figi = figi
request.instrument_id = instrument_id
request.last_price_type = last_price_type
if instrument_status:
request.instrument_status = instrument_status
response, call = self.stub.GetLastPrices.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, marketdata_pb2.GetLastPricesRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetLastPrices")
return _grpc_helpers.protobuf_to_dataclass(response, GetLastPricesResponse)
@handle_request_error("GetOrderBook")
def get_order_book(
self, *, figi: str = "", depth: int = 0, instrument_id: str = ""
) -> GetOrderBookResponse:
request = GetOrderBookRequest()
request.figi = figi
request.instrument_id = instrument_id
request.depth = depth
response, call = self.stub.GetOrderBook.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, marketdata_pb2.GetOrderBookRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetOrderBook")
return _grpc_helpers.protobuf_to_dataclass(response, GetOrderBookResponse)
@handle_request_error("GetTradingStatus")
def get_trading_status(
self, *, figi: str = "", instrument_id: str = ""
) -> GetTradingStatusResponse:
request = GetTradingStatusRequest()
request.figi = figi
request.instrument_id = instrument_id
response, call = self.stub.GetTradingStatus.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, marketdata_pb2.GetTradingStatusRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetTradingStatus")
return _grpc_helpers.protobuf_to_dataclass(response, GetTradingStatusResponse)
@handle_request_error("GetTradingStatuses")
def get_trading_statuses(
self, *, instrument_ids: Optional[List[str]] = None
) -> GetTradingStatusesResponse:
request = GetTradingStatusesRequest()
if instrument_ids:
request.instrument_id = instrument_ids
response, call = self.stub.GetTradingStatuses.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, marketdata_pb2.GetTradingStatusesRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetTradingStatuses")
return _grpc_helpers.protobuf_to_dataclass(response, GetTradingStatusesResponse)
@handle_request_error("GetLastTrades")
def get_last_trades(
self,
*,
figi: str = "",
from_: Optional[datetime] = None,
to: Optional[datetime] = None,
instrument_id: str = "",
trade_source: "TradeSourceType" = TradeSourceType.TRADE_SOURCE_UNSPECIFIED,
) -> GetLastTradesResponse:
request = GetLastTradesRequest()
request.figi = figi
request.instrument_id = instrument_id
if from_ is not None:
request.from_ = from_
if to is not None:
request.to = to
if trade_source is not None:
request.trade_source = trade_source
response, call = self.stub.GetLastTrades.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, marketdata_pb2.GetLastTradesRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetLastTrades")
return _grpc_helpers.protobuf_to_dataclass(response, GetLastTradesResponse)
@handle_request_error("GetClosePrices")
def get_close_prices(
self,
*,
instruments: Optional[List[InstrumentClosePriceRequest]] = None,
instrument_status: Optional[InstrumentStatus] = None,
) -> GetClosePricesResponse:
request = GetClosePricesRequest()
if instruments:
request.instruments = instruments
if instrument_status:
request.instrument_status = instrument_status
response, call = self.stub.GetClosePrices.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, marketdata_pb2.GetClosePricesRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetClosePrices")
return _grpc_helpers.protobuf_to_dataclass(response, GetClosePricesResponse)
@handle_request_error("GetTechAnalysis")
def get_tech_analysis(
self,
*,
request: GetTechAnalysisRequest,
) -> GetTechAnalysisResponse:
response, call = self.stub.GetTechAnalysis.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, marketdata_pb2.GetTechAnalysisRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetTechAnalysis")
return _grpc_helpers.protobuf_to_dataclass(response, GetTechAnalysisResponse)
@handle_request_error("GetMarketValues")
def get_market_values(
self,
*,
request: GetMarketValuesRequest,
) -> GetMarketValuesResponse:
response, call = self.stub.GetMarketValues.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, marketdata_pb2.GetMarketValuesRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetMarketValues")
return _grpc_helpers.protobuf_to_dataclass(response, GetMarketValuesResponse)
class MarketDataStreamService(_grpc_helpers.Service):
_stub_factory = marketdata_pb2_grpc.MarketDataStreamServiceStub
@staticmethod
def _convert_market_data_stream_request(
request_iterator: Iterable[MarketDataRequest],
) -> Iterable[marketdata_pb2.MarketDataRequest]:
for request in request_iterator:
yield _grpc_helpers.dataclass_to_protobuff(
request, marketdata_pb2.MarketDataRequest()
)
@handle_error_hub_gen()
@handle_request_error_gen("MarketDataStream")
def market_data_stream(
self,
request_iterator: Iterable[MarketDataRequest],
) -> Iterator[MarketDataResponse]:
for response in self.stub.MarketDataStream(
request_iterator=self._convert_market_data_stream_request(request_iterator),
metadata=self.metadata,
):
yield _grpc_helpers.protobuf_to_dataclass(response, MarketDataResponse)
@staticmethod
def _convert_market_data_server_side_stream_request(
request_iterator: Iterable[MarketDataServerSideStreamRequest],
) -> Iterable[marketdata_pb2.MarketDataServerSideStreamRequest]:
for request in request_iterator:
yield _grpc_helpers.dataclass_to_protobuff(
request, marketdata_pb2.MarketDataServerSideStreamRequest()
)
@handle_error_hub_gen()
@handle_request_error_gen("MarketDataServerSideStream")
def market_data_server_side_stream(
self,
request_iterator: Iterable[MarketDataServerSideStreamRequest],
) -> Iterable[MarketDataResponse]:
for response in self.stub.MarketDataServerSideStream(
request_iterator=self._convert_market_data_server_side_stream_request(
request_iterator
),
metadata=self.metadata,
):
yield _grpc_helpers.protobuf_to_dataclass(response, MarketDataResponse)
class OperationsService(_grpc_helpers.Service):
_stub_factory = operations_pb2_grpc.OperationsServiceStub
@handle_request_error("GetOperations")
def get_operations(
self,
*,
account_id: str = "",
from_: Optional[datetime] = None,
to: Optional[datetime] = None,
state: OperationState = OperationState(0),
figi: str = "",
) -> OperationsResponse:
request = OperationsRequest()
request.account_id = account_id
if from_ is not None:
request.from_ = from_
if to is not None:
request.to = to
request.state = state
request.figi = figi
response, call = self.stub.GetOperations.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, operations_pb2.OperationsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetOperations")
return _grpc_helpers.protobuf_to_dataclass(response, OperationsResponse)
@handle_request_error("GetPortfolio")
def get_portfolio(self, *, account_id: str = "") -> PortfolioResponse:
request = PortfolioRequest()
request.account_id = account_id
response, call = self.stub.GetPortfolio.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, operations_pb2.PortfolioRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetPortfolio")
return _grpc_helpers.protobuf_to_dataclass(response, PortfolioResponse)
@handle_request_error("GetPositions")
def get_positions(self, *, account_id: str = "") -> PositionsResponse:
request = PositionsRequest()
request.account_id = account_id
response, call = self.stub.GetPositions.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, operations_pb2.PositionsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetPositions")
return _grpc_helpers.protobuf_to_dataclass(response, PositionsResponse)
@handle_request_error("GetWithdrawLimits")
def get_withdraw_limits(self, *, account_id: str = "") -> WithdrawLimitsResponse:
request = WithdrawLimitsRequest()
request.account_id = account_id
response, call = self.stub.GetWithdrawLimits.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, operations_pb2.WithdrawLimitsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetWithdrawLimits")
return _grpc_helpers.protobuf_to_dataclass(response, WithdrawLimitsResponse)
@handle_request_error("GetBrokerReport")
def get_broker_report(
self,
*,
generate_broker_report_request: Optional[GenerateBrokerReportRequest] = None,
get_broker_report_request: Optional[GetBrokerReportRequest] = None,
) -> BrokerReportResponse:
request = BrokerReportRequest()
if generate_broker_report_request:
request.generate_broker_report_request = generate_broker_report_request
if get_broker_report_request:
request.get_broker_report_request = get_broker_report_request
response, call = self.stub.GetBrokerReport.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, operations_pb2.BrokerReportRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetBrokerReport")
return _grpc_helpers.protobuf_to_dataclass(response, BrokerReportResponse)
@handle_request_error("GetDividendsForeignIssuer")
def get_dividends_foreign_issuer(
self,
*,
generate_div_foreign_issuer_report: Optional[
GenerateDividendsForeignIssuerReportRequest
] = None,
get_div_foreign_issuer_report: Optional[
GetDividendsForeignIssuerReportRequest
] = None,
) -> GetDividendsForeignIssuerResponse:
request = GetDividendsForeignIssuerRequest()
if generate_div_foreign_issuer_report is not None:
request.generate_div_foreign_issuer_report = (
generate_div_foreign_issuer_report
)
if get_div_foreign_issuer_report is not None:
request.get_div_foreign_issuer_report = get_div_foreign_issuer_report
response, call = self.stub.GetDividendsForeignIssuer.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, operations_pb2.GetDividendsForeignIssuerRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetDividendsForeignIssuer")
return _grpc_helpers.protobuf_to_dataclass(
response, GetDividendsForeignIssuerResponse
)
@handle_request_error("GetOperationsByCursor")
def get_operations_by_cursor(
self,
request: GetOperationsByCursorRequest,
) -> GetOperationsByCursorResponse:
response, call = self.stub.GetOperationsByCursor.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, operations_pb2.GetOperationsByCursorRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetOperationsByCursor")
return _grpc_helpers.protobuf_to_dataclass(
response, GetOperationsByCursorResponse
)
class OperationsStreamService(_grpc_helpers.Service):
_stub_factory = operations_pb2_grpc.OperationsStreamServiceStub
@handle_error_hub_gen()
@handle_request_error_gen("PortfolioStream")
def portfolio_stream(
self,
*,
accounts: Optional[List[str]] = None,
ping_delay_ms: Optional[int] = None,
) -> Iterable[PortfolioStreamResponse]:
request = PortfolioStreamRequest()
ping_settings = PingDelaySettings()
if ping_delay_ms is not None:
ping_settings.ping_delay_ms = ping_delay_ms
request.ping_settings = ping_settings
if accounts:
request.accounts = accounts
else:
raise ValueError("accounts can not be empty")
for response in self.stub.PortfolioStream(
request=_grpc_helpers.dataclass_to_protobuff(
request, operations_pb2.PortfolioStreamRequest()
),
metadata=self.metadata,
):
yield _grpc_helpers.protobuf_to_dataclass(response, PortfolioStreamResponse)
@handle_error_hub_gen()
@handle_request_error_gen("PositionsStream")
def positions_stream(
self,
*,
accounts: Optional[List[str]] = None,
ping_delay_ms: Optional[int] = None,
with_initial_positions: Optional[bool] = None,
) -> Iterable[PositionsStreamResponse]:
request = PositionsStreamRequest()
if accounts:
request.accounts = accounts
else:
raise ValueError("accounts can not be empty")
ping_settings = PingDelaySettings()
if ping_delay_ms is not None:
ping_settings.ping_delay_ms = ping_delay_ms
request.ping_settings = ping_settings
if with_initial_positions:
request.with_initial_positions = with_initial_positions
for response in self.stub.PositionsStream(
request=_grpc_helpers.dataclass_to_protobuff(
request, operations_pb2.PositionsStreamRequest()
),
metadata=self.metadata,
):
yield _grpc_helpers.protobuf_to_dataclass(response, PositionsStreamResponse)
@handle_error_hub_gen()
@handle_request_error_gen("OperationsStream")
def operations_stream(
self,
request: OperationsStreamRequest,
) -> Iterable[OperationsStreamResponse]:
for response in self.stub.OperationsStream(
request=_grpc_helpers.dataclass_to_protobuff(
request, operations_pb2.OperationsStreamRequest()
),
metadata=self.metadata,
):
yield _grpc_helpers.protobuf_to_dataclass(
response, OperationsStreamResponse
)
class OrdersStreamService(_grpc_helpers.Service):
_stub_factory = orders_pb2_grpc.OrdersStreamServiceStub
@handle_error_hub_gen()
@handle_request_error_gen("TradesStream")
def trades_stream(
self,
*,
accounts: Optional[List[str]] = None,
ping_delay_ms: Optional[int] = None,
) -> Iterable[TradesStreamResponse]:
request = TradesStreamRequest()
if ping_delay_ms is not None:
request.ping_delay_ms = ping_delay_ms
if accounts:
request.accounts = accounts
else:
raise ValueError("accounts can not be empty")
for response in self.stub.TradesStream(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.TradesStreamRequest()
),
metadata=self.metadata,
):
yield _grpc_helpers.protobuf_to_dataclass(response, TradesStreamResponse)
@handle_error_hub_gen()
@handle_request_error_gen("OrderStateStream")
def order_state_stream(
self, *, request: OrderStateStreamRequest
) -> Iterable[OrderStateStreamResponse]:
for response in self.stub.OrderStateStream(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.OrderStateStreamRequest()
),
metadata=self.metadata,
):
yield _grpc_helpers.protobuf_to_dataclass(
response, OrderStateStreamResponse
)
class OrdersService(_grpc_helpers.Service):
_stub_factory = orders_pb2_grpc.OrdersServiceStub
@handle_request_error("PostOrder")
def post_order(
self,
*,
figi: str = "",
quantity: int = 0,
price: Optional[Quotation] = None,
direction: OrderDirection = OrderDirection(0),
account_id: str = "",
order_type: OrderType = OrderType(0),
order_id: str = "",
instrument_id: str = "",
time_in_force: TimeInForceType = TimeInForceType(0),
price_type: PriceType = PriceType(0),
confirm_margin_trade: bool = False,
) -> PostOrderResponse:
request = PostOrderRequest()
request.figi = figi
request.instrument_id = instrument_id
request.quantity = quantity
if price is not None:
request.price = price
request.direction = direction
request.account_id = account_id
request.order_type = order_type
if not utils.empty_or_uuid(order_id):
raise RequestError(
grpc.StatusCode.INVALID_ARGUMENT,
"order_id should be empty or uuid",
None,
)
request.order_id = order_id
request.time_in_force = time_in_force
request.price_type = price_type
if confirm_margin_trade:
request.confirm_margin_trade = confirm_margin_trade
response, call = self.stub.PostOrder.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.PostOrderRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "PostOrder")
return _grpc_helpers.protobuf_to_dataclass(response, PostOrderResponse)
@handle_request_error("PostOrderAsync")
def post_order_async(
self, request: PostOrderAsyncRequest
) -> PostOrderAsyncResponse:
if not utils.empty_or_uuid(request.order_id):
raise RequestError(
grpc.StatusCode.INVALID_ARGUMENT,
"order_id should be empty or uuid",
None,
)
response, call = self.stub.PostOrderAsync.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.PostOrderAsyncRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "PostOrderAsync")
return _grpc_helpers.protobuf_to_dataclass(response, PostOrderAsyncResponse)
@handle_request_error("CancelOrder")
def cancel_order(
self,
*,
account_id: str = "",
order_id: str = "",
order_id_type: Optional["OrderIdType"] = None,
) -> CancelOrderResponse:
request = CancelOrderRequest()
request.account_id = account_id
request.order_id = order_id
request.order_id_type = order_id_type
response, call = self.stub.CancelOrder.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.CancelOrderRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "CancelOrder")
return _grpc_helpers.protobuf_to_dataclass(response, CancelOrderResponse)
@handle_request_error("GetOrderState")
def get_order_state(
self,
*,
account_id: str = "",
order_id: str = "",
price_type: PriceType = PriceType(0),
order_id_type: Optional["OrderIdType"] = None,
) -> OrderState:
request = GetOrderStateRequest()
request.account_id = account_id
request.order_id = order_id
request.price_type = price_type
request.order_id_type = order_id_type
response, call = self.stub.GetOrderState.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.GetOrderStateRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetOrderState")
return _grpc_helpers.protobuf_to_dataclass(response, OrderState)
@handle_request_error("GetOrders")
def get_orders(
self,
*,
account_id: str = "",
from_: Optional[datetime] = None,
to: Optional[datetime] = None,
execution_status: Optional[List[OrderExecutionReportStatus]] = None,
) -> GetOrdersResponse:
# noinspection DuplicatedCode
request = GetOrdersRequest()
request.account_id = account_id
request.advanced_filters = GetOrdersRequestFilters()
if from_ is not None:
request.advanced_filters.from_ = from_
if to is not None:
request.advanced_filters.to = to
if execution_status is not None:
request.advanced_filters.execution_status = execution_status
response, call = self.stub.GetOrders.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.GetOrdersRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetOrders")
return _grpc_helpers.protobuf_to_dataclass(response, GetOrdersResponse)
@handle_request_error("ReplaceOrder")
def replace_order(self, request: ReplaceOrderRequest) -> PostOrderResponse:
response, call = self.stub.ReplaceOrder.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.ReplaceOrderRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "ReplaceOrder")
return _grpc_helpers.protobuf_to_dataclass(response, PostOrderResponse)
@handle_request_error("GetMaxLots")
def get_max_lots(self, request: GetMaxLotsRequest) -> GetMaxLotsResponse:
response, call = self.stub.GetMaxLots.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.GetMaxLotsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetMaxLots")
return _grpc_helpers.protobuf_to_dataclass(response, GetMaxLotsResponse)
@handle_request_error("GetOrderPrice")
def get_order_price(self, request: GetOrderPriceRequest) -> GetOrderPriceResponse:
response, call = self.stub.GetOrderPrice.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.GetOrderPriceRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetOrderPrice")
return _grpc_helpers.protobuf_to_dataclass(response, GetOrderPriceResponse)
class UsersService(_grpc_helpers.Service):
_stub_factory = users_pb2_grpc.UsersServiceStub
@handle_request_error("GetAccounts")
def get_accounts(self) -> GetAccountsResponse:
request = GetAccountsRequest()
response, call = self.stub.GetAccounts.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, users_pb2.GetAccountsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetAccounts")
return _grpc_helpers.protobuf_to_dataclass(response, GetAccountsResponse)
@handle_request_error("GetMarginAttributes")
def get_margin_attributes(
self, *, account_id: str = ""
) -> GetMarginAttributesResponse:
request = GetMarginAttributesRequest()
request.account_id = account_id
response, call = self.stub.GetMarginAttributes.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, users_pb2.GetMarginAttributesRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetMarginAttributes")
return _grpc_helpers.protobuf_to_dataclass(
response, GetMarginAttributesResponse
)
@handle_request_error("GetUserTariff")
def get_user_tariff(self) -> GetUserTariffResponse:
request = GetUserTariffRequest()
response, call = self.stub.GetUserTariff.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, users_pb2.GetUserTariffRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetUserTariff")
return _grpc_helpers.protobuf_to_dataclass(response, GetUserTariffResponse)
@handle_request_error("GetInfo")
def get_info(self) -> GetInfoResponse:
request = GetInfoRequest()
response, call = self.stub.GetInfo.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, users_pb2.GetInfoRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetInfo")
return _grpc_helpers.protobuf_to_dataclass(response, GetInfoResponse)
@handle_request_error("GetBankAccounts")
def get_bank_accounts(self) -> GetBankAccountsResponse:
request = GetBankAccountsRequest()
response, call = self.stub.GetBankAccounts.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, users_pb2.GetBankAccountsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetBankAccounts")
return _grpc_helpers.protobuf_to_dataclass(response, GetBankAccountsResponse)
@handle_request_error("CurrencyTransfer")
def currency_transfer(
self, request: CurrencyTransferRequest
) -> CurrencyTransferResponse:
response, call = self.stub.CurrencyTransfer.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, users_pb2.CurrencyTransferRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "CurrencyTransfer")
return _grpc_helpers.protobuf_to_dataclass(response, CurrencyTransferResponse)
@handle_request_error("PayIn")
def pay_in(self, request: PayInRequest) -> PayInResponse:
response, call = self.stub.PayIn.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, users_pb2.PayInRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "PayIn")
return _grpc_helpers.protobuf_to_dataclass(response, PayInResponse)
@handle_request_error("GetAccountValues")
def get_account_values(
self, request: GetAccountValuesRequest
) -> GetAccountValuesResponse:
response, call = self.stub.GetAccountValues.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, users_pb2.GetAccountValuesRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetAccountValues")
return _grpc_helpers.protobuf_to_dataclass(response, GetAccountValuesResponse)
class SandboxService(_grpc_helpers.Service):
_stub_factory = sandbox_pb2_grpc.SandboxServiceStub
@handle_request_error("OpenSandboxAccount")
def open_sandbox_account(
self, name: Optional[str] = ""
) -> OpenSandboxAccountResponse:
request = OpenSandboxAccountRequest()
request.name = name
response, call = self.stub.OpenSandboxAccount.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, sandbox_pb2.OpenSandboxAccountRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "OpenSandboxAccount")
return _grpc_helpers.protobuf_to_dataclass(response, OpenSandboxAccountResponse)
@deprecated(details="Use `SandboxClient.users.get_accounts(...)` method instead")
@handle_request_error("GetSandboxAccounts")
def get_sandbox_accounts(self) -> GetAccountsResponse:
request = GetAccountsRequest()
response, call = self.stub.GetSandboxAccounts.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, users_pb2.GetAccountsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetSandboxAccounts")
return _grpc_helpers.protobuf_to_dataclass(response, GetAccountsResponse)
@handle_request_error("CloseSandboxAccount")
def close_sandbox_account(
self, *, account_id: str = ""
) -> CloseSandboxAccountResponse:
request = CloseSandboxAccountRequest()
request.account_id = account_id
response, call = self.stub.CloseSandboxAccount.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, sandbox_pb2.CloseSandboxAccountRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "CloseSandboxAccount")
return _grpc_helpers.protobuf_to_dataclass(
response, CloseSandboxAccountResponse
)
@deprecated(details="Use `SandboxClient.orders.post_order(...)` method instead")
@handle_request_error("PostSandboxOrder")
def post_sandbox_order(
self,
*,
figi: str = "",
quantity: int = 0,
price: Optional[Quotation] = None,
direction: OrderDirection = OrderDirection(0),
account_id: str = "",
order_type: OrderType = OrderType(0),
order_id: str = "",
instrument_id: str = "",
time_in_force: TimeInForceType = TimeInForceType(0),
price_type: PriceType = PriceType(0),
) -> PostOrderResponse:
request = PostOrderRequest()
request.figi = figi
request.instrument_id = instrument_id
request.quantity = quantity
if price is not None:
request.price = price
request.direction = direction
request.account_id = account_id
request.order_type = order_type
if not utils.empty_or_uuid(order_id):
raise RequestError(
grpc.StatusCode.INVALID_ARGUMENT,
"order_id should be empty or uuid",
None,
)
request.order_id = order_id
request.time_in_force = time_in_force
request.price_type = price_type
response, call = self.stub.PostSandboxOrder.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.PostOrderRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "PostSandboxOrder")
return _grpc_helpers.protobuf_to_dataclass(response, PostOrderResponse)
@deprecated(details="Use `SandboxClient.orders.replace_order(...)` method instead")
@handle_request_error("ReplaceSandboxOrder")
def replace_sandbox_order(
self,
request: "ReplaceOrderRequest",
) -> PostOrderResponse:
response, call = self.stub.ReplaceSandboxOrder.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.ReplaceOrderRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "ReplaceSandboxOrder")
return _grpc_helpers.protobuf_to_dataclass(response, PostOrderResponse)
@deprecated(details="Use `SandboxClient.orders.get_orders(...)` method instead")
@handle_request_error("GetSandboxOrders")
def get_sandbox_orders(self, *, account_id: str = "") -> GetOrdersResponse:
request = GetOrdersRequest()
request.account_id = account_id
response, call = self.stub.GetSandboxOrders.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.GetOrdersRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetSandboxOrders")
return _grpc_helpers.protobuf_to_dataclass(response, GetOrdersResponse)
@deprecated(details="Use `SandboxClient.orders.cancel_order(...)` method instead")
@handle_request_error("CancelSandboxOrder")
def cancel_sandbox_order(
self,
*,
account_id: str = "",
order_id: str = "",
order_id_type: Optional["OrderIdType"] = None,
) -> CancelOrderResponse:
request = CancelOrderRequest()
request.account_id = account_id
request.order_id = order_id
request.order_id_type = order_id_type
response, call = self.stub.CancelSandboxOrder.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.CancelOrderRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "CancelSandboxOrder")
return _grpc_helpers.protobuf_to_dataclass(response, CancelOrderResponse)
@deprecated(
details="Use `SandboxClient.orders.get_order_state(...)` method instead"
)
@handle_request_error("GetSandboxOrderState")
def get_sandbox_order_state(
self,
*,
account_id: str = "",
order_id: str = "",
price_type: PriceType = PriceType(0),
order_id_type: Optional["OrderIdType"] = None,
) -> OrderState:
request = GetOrderStateRequest()
request.account_id = account_id
request.order_id = order_id
request.price_type = price_type
request.order_id_type = order_id_type
response, call = self.stub.GetSandboxOrderState.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.GetOrderStateRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetSandboxOrderState")
return _grpc_helpers.protobuf_to_dataclass(response, OrderState)
@deprecated(
details="Use `SandboxClient.operations.get_positions(...)` method instead"
)
@handle_request_error("GetSandboxPositions")
def get_sandbox_positions(self, *, account_id: str = "") -> PositionsResponse:
request = PositionsRequest()
request.account_id = account_id
response, call = self.stub.GetSandboxPositions.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, operations_pb2.PositionsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetSandboxPositions")
return _grpc_helpers.protobuf_to_dataclass(response, PositionsResponse)
@deprecated(
details="Use `SandboxClient.operations.get_operations(...)` method instead"
)
@handle_request_error("GetSandboxOperations")
def get_sandbox_operations(
self,
*,
account_id: str = "",
from_: Optional[datetime] = None,
to: Optional[datetime] = None,
state: OperationState = OperationState(0),
figi: str = "",
) -> OperationsResponse:
request = OperationsRequest()
request.account_id = account_id
if from_ is not None:
request.from_ = from_
if to is not None:
request.to = to
request.state = state
request.figi = figi
response, call = self.stub.GetSandboxOperations.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, operations_pb2.OperationsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetSandboxOperations")
return _grpc_helpers.protobuf_to_dataclass(response, OperationsResponse)
@deprecated(
details="Use `SandboxClient.operations.get_operations_by_cursor` method instead"
)
@handle_request_error("GetOperationsByCursor")
def get_operations_by_cursor(
self,
request: GetOperationsByCursorRequest,
) -> GetOperationsByCursorResponse:
response, call = self.stub.GetSandboxOperationsByCursor.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, operations_pb2.GetOperationsByCursorRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetOperationsByCursor")
return _grpc_helpers.protobuf_to_dataclass(
response, GetOperationsByCursorResponse
)
@deprecated(
details="Use `SandboxClient.operations.get_portfolio(...)` method instead"
)
@handle_request_error("GetSandboxPortfolio")
def get_sandbox_portfolio(self, *, account_id: str = "") -> PortfolioResponse:
request = PortfolioRequest()
request.account_id = account_id
response, call = self.stub.GetSandboxPortfolio.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, operations_pb2.PortfolioRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetSandboxPortfolio")
return _grpc_helpers.protobuf_to_dataclass(response, PortfolioResponse)
@handle_request_error("SandboxPayIn")
def sandbox_pay_in(
self, *, account_id: str = "", amount: Optional[MoneyValue] = None
) -> SandboxPayInResponse:
request = SandboxPayInRequest()
request.account_id = account_id
if amount is not None:
request.amount = amount
response, call = self.stub.SandboxPayIn.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, sandbox_pb2.SandboxPayInRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "SandboxPayIn")
return _grpc_helpers.protobuf_to_dataclass(response, SandboxPayInResponse)
@deprecated(
details="Use `SandboxClient.operations.get_withdraw_limits(...)` method instead"
)
@handle_request_error("GetSandboxWithdrawLimits")
def get_sandbox_withdraw_limits(
self,
*,
account_id: str = "",
) -> WithdrawLimitsResponse:
request = WithdrawLimitsRequest()
request.account_id = account_id
response, call = self.stub.GetSandboxWithdrawLimits.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, operations_pb2.WithdrawLimitsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetSandboxWithdrawLimits")
return _grpc_helpers.protobuf_to_dataclass(response, WithdrawLimitsResponse)
@handle_request_error("GetSandboxMaxLots")
def get_sandbox_max_lots(
self,
*,
request: GetMaxLotsRequest,
) -> GetMaxLotsResponse:
response, call = self.stub.GetSandboxMaxLots.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.GetMaxLotsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetSandboxMaxLots")
return _grpc_helpers.protobuf_to_dataclass(response, GetMaxLotsResponse)
@handle_request_error("PostSandboxOrderAsync")
def post_sandbox_order_async(
self,
*,
request: PostOrderAsyncRequest,
) -> PostOrderAsyncResponse:
response, call = self.stub.PostSandboxOrderAsync.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.PostOrderAsyncRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "PostSandboxOrderAsync")
return _grpc_helpers.protobuf_to_dataclass(response, PostOrderAsyncResponse)
@handle_request_error("PostSandboxStopOrder")
def post_sandbox_stop_order(
self,
*,
request: PostStopOrderRequest,
) -> PostStopOrderResponse:
response, call = self.stub.PostSandboxStopOrder.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, stoporders_pb2.PostStopOrderRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "PostSandboxStopOrder")
return _grpc_helpers.protobuf_to_dataclass(response, PostStopOrderResponse)
@handle_request_error("GetSandboxStopOrders")
def get_sandbox_stop_orders(
self,
*,
request: GetStopOrdersRequest,
) -> GetStopOrdersResponse:
response, call = self.stub.GetSandboxStopOrders.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, stoporders_pb2.GetStopOrdersRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetSandboxStopOrders")
return _grpc_helpers.protobuf_to_dataclass(response, GetStopOrdersResponse)
@handle_request_error("CancelSandboxStopOrder")
def cancel_sandbox_stop_order(
self,
*,
request: CancelStopOrderRequest,
) -> CancelStopOrderResponse:
response, call = self.stub.CancelSandboxStopOrder.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, stoporders_pb2.CancelStopOrderRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "CancelSandboxStopOrder")
return _grpc_helpers.protobuf_to_dataclass(response, CancelStopOrderResponse)
@handle_request_error("GetSandboxOrderPrice")
def get_sandbox_order_price(
self, request: GetOrderPriceRequest
) -> GetOrderPriceResponse:
response, call = self.stub.GetSandboxOrderPrice.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, orders_pb2.GetOrderPriceRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetSandboxOrderPrice")
return _grpc_helpers.protobuf_to_dataclass(response, GetOrderPriceResponse)
class StopOrdersService(_grpc_helpers.Service):
_stub_factory = stoporders_pb2_grpc.StopOrdersServiceStub
@handle_request_error("PostStopOrder")
def post_stop_order(
self,
*,
figi: str = "",
quantity: int = 0,
price: Optional[Quotation] = None,
stop_price: Optional[Quotation] = None,
direction: StopOrderDirection = StopOrderDirection(0),
account_id: str = "",
expiration_type: StopOrderExpirationType = StopOrderExpirationType(0),
stop_order_type: StopOrderType = StopOrderType(0),
expire_date: Optional[datetime] = None,
instrument_id: str = "",
exchange_order_type: ExchangeOrderType = ExchangeOrderType(0),
take_profit_type: TakeProfitType = TakeProfitType(0),
trailing_data: Optional[PostStopOrderRequestTrailingData] = None,
price_type: PriceType = PriceType(0),
order_id: str = "",
confirm_margin_trade: bool = False,
instant_execution: Optional[bool] = None,
) -> PostStopOrderResponse:
request = PostStopOrderRequest()
request.figi = figi
request.instrument_id = instrument_id
request.quantity = quantity
if price is not None:
request.price = price
if stop_price is not None:
request.stop_price = stop_price
request.direction = direction
request.account_id = account_id
request.expiration_type = expiration_type
request.stop_order_type = stop_order_type
if expire_date is not None:
request.expire_date = expire_date
request.exchange_order_type = exchange_order_type
request.take_profit_type = take_profit_type
if trailing_data is not None:
request.trailing_data = trailing_data
request.price_type = price_type
request.order_id = order_id
if confirm_margin_trade:
request.confirm_margin_trade = confirm_margin_trade
if instant_execution is not None:
request.instant_execution = instant_execution
response, call = self.stub.PostStopOrder.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, stoporders_pb2.PostStopOrderRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "PostStopOrder")
return _grpc_helpers.protobuf_to_dataclass(response, PostStopOrderResponse)
@handle_request_error("GetStopOrders")
def get_stop_orders(
self,
*,
account_id: str = "",
status: StopOrderStatusOption = StopOrderStatusOption(0),
from_: Optional[datetime] = None,
to: Optional[datetime] = None,
) -> GetStopOrdersResponse:
request = GetStopOrdersRequest()
request.account_id = account_id
request.status = status
if from_ is not None:
request.from_ = from_
if to is not None:
request.to = to
response, call = self.stub.GetStopOrders.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, stoporders_pb2.GetStopOrdersRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetStopOrders")
return _grpc_helpers.protobuf_to_dataclass(response, GetStopOrdersResponse)
@handle_request_error("CancelStopOrder")
def cancel_stop_order(
self, *, account_id: str = "", stop_order_id: str = ""
) -> CancelStopOrderResponse:
request = CancelStopOrderRequest()
request.account_id = account_id
request.stop_order_id = stop_order_id
response, call = self.stub.CancelStopOrder.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, stoporders_pb2.CancelStopOrderRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "CancelStopOrder")
return _grpc_helpers.protobuf_to_dataclass(response, CancelStopOrderResponse)
class SignalService(_grpc_helpers.Service):
_stub_factory = signals_pb2_grpc.SignalServiceStub
@handle_request_error("GetStrategies")
def get_strategies(
self,
*,
request: GetStrategiesRequest,
) -> GetStrategiesResponse:
response, call = self.stub.GetStrategies.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, signals_pb2.GetStrategiesRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetStrategies")
return _grpc_helpers.protobuf_to_dataclass(response, GetStrategiesResponse)
@handle_request_error("GetSignals")
def get_signals(
self,
*,
request: GetSignalsRequest,
) -> GetSignalsResponse:
response, call = self.stub.GetSignals.with_call(
request=_grpc_helpers.dataclass_to_protobuff(
request, signals_pb2.GetSignalsRequest()
),
metadata=self.metadata,
)
log_request(get_tracking_id_from_call(call), "GetSignals")
return _grpc_helpers.protobuf_to_dataclass(response, GetSignalsResponse)