import { Serializable } from '../../../internal/interfaces/serializable';
export declare class AddOrderReq implements Serializable {
    /**
     * Client Order ID: The ClientOid field is a unique ID created by the user (we recommend using a UUID), and can only contain numbers, letters, underscores (_), and hyphens (-). This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.  Please remember the orderId created by the service provider, it used to check for updates in order status.
     */
    clientOid: string;
    /**
     * Specify if the order is to \'buy\' or \'sell\'.
     */
    side: AddOrderReq.SideEnum;
    /**
     * symbol
     */
    symbol: string;
    /**
     * Specify if the order is a \'limit\' order or \'market\' order.   The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.  When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.  Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price; you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged.
     */
    type?: AddOrderReq.TypeEnum;
    /**
     * [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC
     */
    stp?: AddOrderReq.StpEnum;
    /**
     * Specify price for order  When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error.
     */
    price?: string;
    /**
     * Specify quantity for order.  When **type** is limited, size refers to the amount of trading targets (the asset name written in front) for the trading pair. The Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.  When **type** is market, select one out of two: size or funds
     */
    size?: string;
    /**
     * [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading
     */
    timeInForce?: AddOrderReq.TimeInForceEnum;
    /**
     * passive order labels, this is disabled when the order timing strategy is IOC or FOK
     */
    postOnly?: boolean;
    /**
     * [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)
     */
    hidden?: boolean;
    /**
     * Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)
     */
    iceberg?: boolean;
    /**
     * Maximum visible quantity in iceberg orders
     */
    visibleSize?: string;
    /**
     * Cancel after n seconds, the order timing strategy is GTT
     */
    cancelAfter?: number;
    /**
     * When **type** is market, select one out of two: size or funds
     */
    funds?: string;
    /**
     * True - isolated margin; false - cross margin. Default is false
     */
    isIsolated?: boolean;
    /**
     * When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate.
     */
    autoBorrow?: boolean;
    /**
     * AutoPay allows the return of borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount.
     */
    autoRepay?: boolean;
    /**
     * Private constructor, please use the corresponding static methods to construct the object.
     */
    private constructor();
    /**
     * Creates a new instance of the `AddOrderReq` class.
     * The builder pattern allows step-by-step construction of a `AddOrderReq` object.
     */
    static builder(): AddOrderReqBuilder;
    /**
     * Creates a new instance of the `AddOrderReq` class with the given data.
     */
    static create(data: {
        /**
         * Client Order ID: The ClientOid field is a unique ID created by the user (we recommend using a UUID), and can only contain numbers, letters, underscores (_), and hyphens (-). This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.  Please remember the orderId created by the service provider, it used to check for updates in order status.
         */
        clientOid: string;
        /**
         * Specify if the order is to \'buy\' or \'sell\'.
         */
        side: AddOrderReq.SideEnum;
        /**
         * symbol
         */
        symbol: string;
        /**
         * Specify if the order is a \'limit\' order or \'market\' order.   The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.  When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.  Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price; you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged.
         */
        type?: AddOrderReq.TypeEnum;
        /**
         * [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC
         */
        stp?: AddOrderReq.StpEnum;
        /**
         * Specify price for order  When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error.
         */
        price?: string;
        /**
         * Specify quantity for order.  When **type** is limited, size refers to the amount of trading targets (the asset name written in front) for the trading pair. The Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.  When **type** is market, select one out of two: size or funds
         */
        size?: string;
        /**
         * [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading
         */
        timeInForce?: AddOrderReq.TimeInForceEnum;
        /**
         * passive order labels, this is disabled when the order timing strategy is IOC or FOK
         */
        postOnly?: boolean;
        /**
         * [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)
         */
        hidden?: boolean;
        /**
         * Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)
         */
        iceberg?: boolean;
        /**
         * Maximum visible quantity in iceberg orders
         */
        visibleSize?: string;
        /**
         * Cancel after n seconds, the order timing strategy is GTT
         */
        cancelAfter?: number;
        /**
         * When **type** is market, select one out of two: size or funds
         */
        funds?: string;
        /**
         * True - isolated margin; false - cross margin. Default is false
         */
        isIsolated?: boolean;
        /**
         * When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate.
         */
        autoBorrow?: boolean;
        /**
         * AutoPay allows the return of borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount.
         */
        autoRepay?: boolean;
    }): AddOrderReq;
    /**
     * Convert the object to a JSON string.
     */
    toJson(): string;
    /**
     * Create an object from a JSON string.
     */
    static fromJson(input: string): AddOrderReq;
    /**
     * Create an object from Js Object.
     */
    static fromObject(jsonObject: Object): AddOrderReq;
}
export declare namespace AddOrderReq {
    enum SideEnum {
        /**
         *
         */
        BUY,
        /**
         *
         */
        SELL
    }
    enum TypeEnum {
        /**
         *
         */
        LIMIT,
        /**
         *
         */
        MARKET
    }
    enum StpEnum {
        /**
         *
         */
        DC,
        /**
         *
         */
        CO,
        /**
         *
         */
        CN,
        /**
         *
         */
        CB
    }
    enum TimeInForceEnum {
        /**
         *
         */
        GTC,
        /**
         *
         */
        GTT,
        /**
         *
         */
        IOC,
        /**
         *
         */
        FOK
    }
}
export declare class AddOrderReqBuilder {
    readonly obj: AddOrderReq;
    constructor(obj: AddOrderReq);
    /**
     * Client Order ID: The ClientOid field is a unique ID created by the user (we recommend using a UUID), and can only contain numbers, letters, underscores (_), and hyphens (-). This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.  Please remember the orderId created by the service provider, it used to check for updates in order status.
     */
    setClientOid(value: string): AddOrderReqBuilder;
    /**
     * Specify if the order is to \'buy\' or \'sell\'.
     */
    setSide(value: AddOrderReq.SideEnum): AddOrderReqBuilder;
    /**
     * symbol
     */
    setSymbol(value: string): AddOrderReqBuilder;
    /**
     * Specify if the order is a \'limit\' order or \'market\' order.   The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.  When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.  Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price; you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged.
     */
    setType(value: AddOrderReq.TypeEnum): AddOrderReqBuilder;
    /**
     * [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC
     */
    setStp(value: AddOrderReq.StpEnum): AddOrderReqBuilder;
    /**
     * Specify price for order  When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error.
     */
    setPrice(value: string): AddOrderReqBuilder;
    /**
     * Specify quantity for order.  When **type** is limited, size refers to the amount of trading targets (the asset name written in front) for the trading pair. The Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.  When **type** is market, select one out of two: size or funds
     */
    setSize(value: string): AddOrderReqBuilder;
    /**
     * [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading
     */
    setTimeInForce(value: AddOrderReq.TimeInForceEnum): AddOrderReqBuilder;
    /**
     * passive order labels, this is disabled when the order timing strategy is IOC or FOK
     */
    setPostOnly(value: boolean): AddOrderReqBuilder;
    /**
     * [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)
     */
    setHidden(value: boolean): AddOrderReqBuilder;
    /**
     * Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)
     */
    setIceberg(value: boolean): AddOrderReqBuilder;
    /**
     * Maximum visible quantity in iceberg orders
     */
    setVisibleSize(value: string): AddOrderReqBuilder;
    /**
     * Cancel after n seconds, the order timing strategy is GTT
     */
    setCancelAfter(value: number): AddOrderReqBuilder;
    /**
     * When **type** is market, select one out of two: size or funds
     */
    setFunds(value: string): AddOrderReqBuilder;
    /**
     * True - isolated margin; false - cross margin. Default is false
     */
    setIsIsolated(value: boolean): AddOrderReqBuilder;
    /**
     * When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate.
     */
    setAutoBorrow(value: boolean): AddOrderReqBuilder;
    /**
     * AutoPay allows the return of borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount.
     */
    setAutoRepay(value: boolean): AddOrderReqBuilder;
    /**
     * Get the final object.
     */
    build(): AddOrderReq;
}
