import { OrderSide } from "@dydxprotocol/v4-client-js";
import { AccountInfo, Candle, CandleResolution, ClientParams, Order, Orderbook } from "../../context";
import { AbstractClient } from "../../client";
export declare class DydxClient extends AbstractClient {
    private dydxAccInfo;
    private indexerClient?;
    private validatorClient?;
    private compositeClient?;
    private localWallet?;
    private subaccount;
    private socketClient?;
    private accountHandler;
    private candlesHandler;
    private marketsHandler;
    private orderbookHandler;
    private tradesHandler;
    /**
     * Configuration for the dYdX Indexer API. This configuration specifies the endpoints
     * for the Indexer API and WebSocket connections.
     */
    private mainnetIndexerConfig;
    /**
     * Configuration for the dYdX Validator API. This configuration includes the endpoint
     * for the Validator API and settings related to the blockchain network, such as
     * denominations and decimals for various tokens.
     */
    private mainnetValidatorConfig;
    private mainnetNetwork;
    constructor(clientParams: ClientParams);
    initialize(): Promise<void>;
    /**
     * Creates a Socket Client for real-time WebSocket communication with the dYdX API.
     *
     * @param onOpen - Callback function invoked when the WebSocket connection is opened.
     * @param onClose - Callback function invoked when the WebSocket connection is closed.
     * @param onMessage - Callback function invoked when a message is received from the WebSocket.
     * @returns The SocketClient instance.
     */
    createSocketClient(): void;
    getPrice(): number;
    getOrderbook(): Orderbook;
    getAccountInfo(): AccountInfo;
    getCandles(resolution: CandleResolution): Candle[];
    /**
     * 计算短期单有效期切块数
     * @returns 最大+20
     */
    private calculateGoodTilBlock;
    /**
     * 下短期单
     * @param side 方向
     * @param price 价格
     * @param size 数量
     */
    shortTermOrder(clientId: number, side: OrderSide, price: number, size: number): Promise<void>;
    /**
     * 下短期单
     * @param side
     * @param price
     * @param size
     * @param timeInForce
     * @param reduceOnly
     */
    private placeShortTermOrder;
    /**
     * 市价下单
     * @param side
     * @param price
     * @param size
     * @param timeInForce
     * @param reduceOnly
     */
    private placeMarketOrder;
    /**
     * 市价买
     * @param price
     * @param size
     */
    buy(clientId: number, price: number, size: number): Promise<void>;
    /**
     * 市价卖
     * @param price
     * @param size
     * @param clientId
     */
    sell(clientId: number, price: number, size: number): Promise<void>;
    /**
     * 市价平仓
     * @param side
     * @param price
     * @param size
     */
    close(clientId: number, side: OrderSide, price: number, size: number): Promise<void>;
    /**
     * 限价下单
     * @param side 方向
     * @param price 价格
     * @param size 数量
     * @param goodTillTime
     */
    private placeLimitOrder;
    /**
     * 限价买
     * @param price
     * @param size
     * @param goodTillTime
     */
    buyLimit(clientId: number, price: number, size: number, goodTillTime?: number): Promise<void>;
    /**
     * 限价卖
     * @param price
     * @param size
     * @param clientId
     * @param goodTillTime
     */
    sellLimit(clientId: number, price: number, size: number, goodTillTime?: number): Promise<void>;
    /**
     * 限价平仓
     * @param side
     * @param price
     * @param size
     */
    closeLimit(clientId: number, side: OrderSide, price: number, size: number, goodTillTime?: number): Promise<void>;
    /**
     * 撤单
     * @param order 原订单
     */
    cancel(order: Order): Promise<void>;
    destroy(): void;
}
export declare enum ChannelTypes {
    Subaccounts = "v4_subaccounts",
    Markets = "v4_markets",
    Orderbook = "v4_orderbook",
    Candles = "v4_candles",
    Trades = "v4_trades"
}
