create a list of trade orders https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#place-an-order :param Array orders: list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amou
(self, orders, params={})
| 2138 | return orderObj |
| 2139 | |
| 2140 | def create_orders_request(self, orders, params={}) -> dict: |
| 2141 | """ |
| 2142 | create a list of trade orders |
| 2143 | https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#place-an-order |
| 2144 | :param Array orders: list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params |
| 2145 | :returns dict: an `order structure <https://docs.ccxt.com/?id=order-structure>` |
| 2146 | """ |
| 2147 | self.check_required_credentials() |
| 2148 | defaultSlippage = self.safe_string(self.options, 'defaultSlippage') |
| 2149 | defaultSlippage = self.safe_string(params, 'slippage', defaultSlippage) |
| 2150 | hasClientOrderId = False |
| 2151 | for i in range(0, len(orders)): |
| 2152 | rawOrder = orders[i] |
| 2153 | orderParams = self.safe_dict(rawOrder, 'params', {}) |
| 2154 | clientOrderId = self.safe_string_2(orderParams, 'clientOrderId', 'client_id') |
| 2155 | if clientOrderId is not None: |
| 2156 | hasClientOrderId = True |
| 2157 | if hasClientOrderId: |
| 2158 | for i in range(0, len(orders)): |
| 2159 | rawOrder = orders[i] |
| 2160 | orderParams = self.safe_dict(rawOrder, 'params', {}) |
| 2161 | clientOrderId = self.safe_string_2(orderParams, 'clientOrderId', 'client_id') |
| 2162 | if clientOrderId is None: |
| 2163 | raise ArgumentsRequired(self.id + ' createOrders() all orders must have clientOrderId if at least one has a clientOrderId') |
| 2164 | params = self.omit(params, ['slippage', 'clientOrderId', 'client_id', 'slippage', 'triggerPrice', 'stopPrice', 'stopLossPrice', 'takeProfitPrice', 'timeInForce']) |
| 2165 | nonce = self.milliseconds() |
| 2166 | orderReq = [] |
| 2167 | grouping = 'na' |
| 2168 | for i in range(0, len(orders)): |
| 2169 | rawOrder = orders[i] |
| 2170 | marketId = self.safe_string(rawOrder, 'symbol') |
| 2171 | market = self.market(marketId) |
| 2172 | symbol = market['symbol'] |
| 2173 | type = self.safe_string_upper(rawOrder, 'type') |
| 2174 | side = self.safe_string_upper(rawOrder, 'side') |
| 2175 | amount = self.safe_string(rawOrder, 'amount') |
| 2176 | price = self.safe_string(rawOrder, 'price') |
| 2177 | orderParams = self.safe_dict(rawOrder, 'params', {}) |
| 2178 | slippage = self.safe_string(orderParams, 'slippage', defaultSlippage) |
| 2179 | orderParams['slippage'] = slippage |
| 2180 | stopLoss = self.safe_value(orderParams, 'stopLoss') |
| 2181 | takeProfit = self.safe_value(orderParams, 'takeProfit') |
| 2182 | hasStopLoss = (stopLoss is not None) |
| 2183 | hasTakeProfit = (takeProfit is not None) |
| 2184 | orderParams = self.omit(orderParams, ['stopLoss', 'takeProfit']) |
| 2185 | mainOrderObj = self.create_order_request(symbol, type, side, amount, price, orderParams) |
| 2186 | if hasStopLoss or hasTakeProfit: |
| 2187 | # grouping opposed orders for sl/tp |
| 2188 | stopLossOrderTriggerPrice = self.safe_string_n(stopLoss, ['triggerPrice', 'stopPrice']) |
| 2189 | stopLossOrderType = self.safe_string(stopLoss, 'type', 'limit') |
| 2190 | stopLossOrderLimitPrice = self.safe_string_n(stopLoss, ['price', 'stopLossPrice'], stopLossOrderTriggerPrice) |
| 2191 | takeProfitOrderTriggerPrice = self.safe_string_n(takeProfit, ['triggerPrice', 'stopPrice']) |
| 2192 | takeProfitOrderType = self.safe_string(takeProfit, 'type', 'limit') |
| 2193 | takeProfitOrderLimitPrice = self.safe_string_n(takeProfit, ['price', 'takeProfitPrice'], takeProfitOrderTriggerPrice) |
| 2194 | grouping = self.safe_string(orderParams, 'grouping', 'normalTpsl') |
| 2195 | if grouping == 'positionTpsl': |
| 2196 | amount = '0' |
| 2197 | stopLossOrderType = 'market' |
no test coverage detected