Skip to main content

STXOrderService

public class STXOrderService
{
    // Place a single order
    Task<STXConfirmedOrder> ConfirmOrderAsync(
        int price,
        int quantity,
        string marketId,
        STXOrderAction action,
        STXOrderType orderType,
        string clientOrderId = null,
        bool cancelOnDisconnect = true);

    // Place many orders
    Task<List<STXConfirmedOrder>> ConfirmOrdersAsync(
        IEnumerable<STXConfirmOrderParams> confirmOrderParams);

    // Cancel
    Task<string> CancelOrderAsync(string orderId);
    Task<List<STXCancelOrder>> CancelOrdersAsync(IEnumerable<string> orderIds);
    Task<List<STXCancelOrder>> CancelAllOrdersAsync();

    // History
    Task<STXMyOrderHistory> GetMyOrdersAsync(
        IEnumerable<STXOrderStatus> statusFilter = null,
        IEnumerable<string> marketIds = null,
        int? limit = null,
        int? offset = null,
        STXOrdersSortByField? sortBy = null,
        STXSortOrder? sortOrder = null);
}

STXConfirmOrderParams

For the batch variant:
public class STXConfirmOrderParams
{
    public int Price { get; set; }
    public int Quantity { get; set; }
    public string MarketId { get; set; }
    public STXOrderAction Action { get; set; }
    public STXOrderType OrderType { get; set; }
    public string ClientOrderId { get; set; }
    public bool CancelOnDisconnect { get; set; } = true;
    public STXOrderExpiration? Expiration { get; set; }
    public long? ExpirationTime { get; set; }  // UNIX microseconds for GOOD_TILL_TIME
}

Enums

EnumValues
STXOrderActionbuy, sell
STXOrderTypelimit, market
STXOrderStatuscreated, requested, accepted, open, filled, cancelled, rejected, partially_cancelled, delayed
STXOrderExpirationGOOD_TILL_START, GOOD_TILL_TIME
STXOrdersSortByFieldinsertedAt, price, quantity, marketId, …
STXSortOrderasc, desc

STXTradeService

public class STXTradeService
{
    Task<STXMyTradeHistory> GetMyTradesAsync(
        IEnumerable<string> marketIds = null,
        int? limit = null,
        int? offset = null,
        STXTradesSortByField? sortBy = null,
        STXSortOrder? sortOrder = null);

    Task<List<STXTrade>> GetMyTradesForOrderAsync(string orderId);
}

Channels used by trading workflows

ChannelEvents
STXActiveOrdersChannelOnOrderUpdate — fires on every order state transition; IsChannelConnectedAndUseCancelOnDisconnect gate ConfirmOrderAsync(cancelOnDisconnect: true).
STXActiveTradesChannelOnTrade — fires on every new fill
_activeOrders.OnOrderUpdate += update =>
{
    // update.Id, update.Status, update.FilledQuantity, update.AvgPrice, ...
};
await _activeOrders.ConnectAsync();

Errors worth catching

  • STXCancelOnDisconnectNotEnabledException — thrown by ConfirmOrderAsync / ConfirmOrdersAsync if cancelOnDisconnect: true and the active orders channel isn’t joined.
  • STXTokenExpiredException — refresh the token, then retry.
Full list: Errors & retries. Task-oriented examples: Trading.