@method @name htx#createOrder @description create a trade order @see https://huobiapi.github.io/docs/spot/v1/en/#place-a-new-order // spot, margin @see https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#place-an-order // coin-m swap @see https://huobiapi.githu
(Object symbol, Object type, Object side, Object amount, Object... optionalArgs)
| 6033 | * @returns {object} an [order structure]{@link https://docs.ccxt.com/?id=order-structure} |
| 6034 | */ |
| 6035 | public java.util.concurrent.CompletableFuture<Object> createOrder(Object symbol, Object type, Object side, Object amount, Object... optionalArgs) |
| 6036 | { |
| 6037 | |
| 6038 | return java.util.concurrent.CompletableFuture.supplyAsync(() -> { |
| 6039 | |
| 6040 | Object price = Helpers.getArg(optionalArgs, 0, null); |
| 6041 | Object parameters = Helpers.getArg(optionalArgs, 1, new java.util.HashMap<String, Object>() {{}}); |
| 6042 | (this.loadMarkets()).join(); |
| 6043 | Object market = this.market(symbol); |
| 6044 | Object triggerPrice = this.safeNumberN(parameters, new java.util.ArrayList<Object>(java.util.Arrays.asList("triggerPrice", "stopPrice", "trigger_price"))); |
| 6045 | Object stopLossTriggerPrice = this.safeNumber2(parameters, "stopLossPrice", "sl_trigger_price"); |
| 6046 | Object takeProfitTriggerPrice = this.safeNumber2(parameters, "takeProfitPrice", "tp_trigger_price"); |
| 6047 | Object trailingPercent = this.safeNumber(parameters, "trailingPercent"); |
| 6048 | Object isTrailingPercentOrder = !Helpers.isEqual(trailingPercent, null); |
| 6049 | Object isTrigger = !Helpers.isEqual(triggerPrice, null); |
| 6050 | Object isStopLossTriggerOrder = !Helpers.isEqual(stopLossTriggerPrice, null); |
| 6051 | Object isTakeProfitTriggerOrder = !Helpers.isEqual(takeProfitTriggerPrice, null); |
| 6052 | Object response = null; |
| 6053 | if (Helpers.isTrue(Helpers.GetValue(market, "spot"))) |
| 6054 | { |
| 6055 | if (Helpers.isTrue(isTrailingPercentOrder)) |
| 6056 | { |
| 6057 | throw new NotSupported((String)Helpers.add(this.id, " createOrder() does not support trailing orders for spot markets")) ; |
| 6058 | } |
| 6059 | Object spotRequest = (this.createSpotOrderRequest(symbol, type, side, amount, price, parameters)).join(); |
| 6060 | response = (this.spotPrivatePostV1OrderOrdersPlace(spotRequest)).join(); |
| 6061 | } else |
| 6062 | { |
| 6063 | Object contractRequest = this.createContractOrderRequest(symbol, type, side, amount, price, parameters); |
| 6064 | if (Helpers.isTrue(Helpers.GetValue(market, "linear"))) |
| 6065 | { |
| 6066 | if (Helpers.isTrue(Helpers.isTrue(Helpers.isTrue(Helpers.isTrue(isTrigger) || Helpers.isTrue(isStopLossTriggerOrder)) || Helpers.isTrue(isTakeProfitTriggerOrder)) || Helpers.isTrue(isTrailingPercentOrder))) |
| 6067 | { |
| 6068 | response = (this.contractPrivatePostV5AlgoOrder(contractRequest)).join(); |
| 6069 | } else |
| 6070 | { |
| 6071 | response = (this.contractPrivatePostV5TradeOrder(contractRequest)).join(); |
| 6072 | } |
| 6073 | } else if (Helpers.isTrue(Helpers.GetValue(market, "inverse"))) |
| 6074 | { |
| 6075 | Object offset = this.safeString(parameters, "offset"); |
| 6076 | if (Helpers.isTrue(Helpers.isEqual(offset, null))) |
| 6077 | { |
| 6078 | throw new ArgumentsRequired((String)Helpers.add(this.id, " createOrder () requires an extra parameter params[\"offset\"] to be set to \"open\" or \"close\" when placing orders in inverse markets")) ; |
| 6079 | } |
| 6080 | if (Helpers.isTrue(Helpers.GetValue(market, "swap"))) |
| 6081 | { |
| 6082 | if (Helpers.isTrue(isTrigger)) |
| 6083 | { |
| 6084 | response = (this.contractPrivatePostSwapApiV1SwapTriggerOrder(contractRequest)).join(); |
| 6085 | } else if (Helpers.isTrue(Helpers.isTrue(isStopLossTriggerOrder) || Helpers.isTrue(isTakeProfitTriggerOrder))) |
| 6086 | { |
| 6087 | response = (this.contractPrivatePostSwapApiV1SwapTpslOrder(contractRequest)).join(); |
| 6088 | } else if (Helpers.isTrue(isTrailingPercentOrder)) |
| 6089 | { |
| 6090 | response = (this.contractPrivatePostSwapApiV1SwapTrackOrder(contractRequest)).join(); |
| 6091 | } else |
| 6092 | { |
no test coverage detected