| | |
| | | * @param onFailure 失败回调 |
| | | */ |
| | | public void openLong(String quantity, Consumer<String> onSuccess, Runnable onFailure) { |
| | | submitOrder("buy", "long", quantity, "market", null, false, "t-okx-grid-long", onSuccess, onFailure); |
| | | submitOrder("buy", "long", quantity, "market", null, false, null, onSuccess, onFailure); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param onFailure 失败回调 |
| | | */ |
| | | public void openShort(String quantity, Consumer<String> onSuccess, Runnable onFailure) { |
| | | submitOrder("sell", "short", quantity, "market", null, false, "t-okx-grid-short", onSuccess, onFailure); |
| | | submitOrder("sell", "short", quantity, "market", null, false, null, onSuccess, onFailure); |
| | | } |
| | | |
| | | /** |
| | |
| | | params.put("tdMode", tdMode); |
| | | params.put("side", side); |
| | | params.put("posSide", posSide); |
| | | params.put("ordType", "conditional"); |
| | | params.put("ordType", "trigger"); |
| | | params.put("sz", size); |
| | | params.put("triggerPx", triggerPrice); |
| | | params.put("triggerPxType", "last"); |
| | | params.put("orderPx", "-1"); // 市价成交 |
| | | params.put("orderPx", "-1"); |
| | | |
| | | String resp = okxAccount.requestHandler.sendSignedRequest( |
| | | okxAccount.baseUrl, "/api/v5/trade/order-algo", params, HttpMethod.POST, okxAccount.isSimluate()); |
| | |
| | | params.put("posSide", posSide); |
| | | params.put("ordType", "conditional"); |
| | | params.put("sz", size); |
| | | params.put("triggerPx", triggerPrice); |
| | | params.put("triggerPxType", "last"); |
| | | params.put("orderPx", "-1"); // 市价成交 |
| | | params.put("slTriggerPx", triggerPrice); |
| | | params.put("slTriggerPxType", "last"); |
| | | params.put("slOrdPx", "-1"); |
| | | |
| | | String resp = okxAccount.requestHandler.sendSignedRequest( |
| | | okxAccount.baseUrl, "/api/v5/trade/order-algo", params, HttpMethod.POST, okxAccount.isSimluate()); |
| | |
| | | } |
| | | executor.execute(() -> { |
| | | try { |
| | | LinkedHashMap<String, Object> params = new LinkedHashMap<>(); |
| | | params.put("instId", instId); |
| | | params.put("algoId", algoId); |
| | | String resp = okxAccount.requestHandler.sendSignedRequest( |
| | | okxAccount.baseUrl, "/api/v5/trade/cancel-algos", params, HttpMethod.POST, okxAccount.isSimluate()); |
| | | String body = "[{\"instId\":\"" + instId + "\",\"algoId\":\"" + algoId + "\"}]"; |
| | | String resp = okxAccount.requestHandler.sendSignedRequestRaw( |
| | | okxAccount.baseUrl, "/api/v5/trade/cancel-algos", body, HttpMethod.POST, okxAccount.isSimluate()); |
| | | log.info("[OkxExec] 条件单已取消, algoId:{}", algoId); |
| | | if (onSuccess != null) { |
| | | onSuccess.accept(algoId); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 异步取消所有未完成的 algo 订单。 |
| | | * 异步取消所有未完成的 algo 订单(best-effort,失败仅警告)。 |
| | | */ |
| | | public void cancelAllAlgoOrders() { |
| | | executor.execute(() -> { |
| | | try { |
| | | LinkedHashMap<String, Object> params = new LinkedHashMap<>(); |
| | | params.put("instId", instId); |
| | | String resp = okxAccount.requestHandler.sendSignedRequest( |
| | | okxAccount.baseUrl, "/api/v5/trade/cancel-algos", params, HttpMethod.POST, okxAccount.isSimluate()); |
| | | String body = "[{\"instId\":\"" + instId + "\",\"instType\":\"SWAP\"}]"; |
| | | String resp = okxAccount.requestHandler.sendSignedRequestRaw( |
| | | okxAccount.baseUrl, "/api/v5/trade/cancel-algos", body, HttpMethod.POST, okxAccount.isSimluate()); |
| | | log.info("[OkxExec] 已尝试清除条件单, resp:{}", resp); |
| | | } catch (Exception e) { |
| | | log.error("[OkxExec] 清除条件单失败", e); |
| | | log.warn("[OkxExec] 清除条件单失败(若无挂单可忽略), msg:{}", e.getMessage()); |
| | | } |
| | | }); |
| | | } |