package com.xcong.excoin.modules.okxApi;
|
|
import com.xcong.excoin.modules.okxApi.wsHandler.handler.OkxAccountChannelHandler;
|
import com.xcong.excoin.modules.okxApi.wsHandler.handler.OkxCandlestickChannelHandler;
|
import com.xcong.excoin.modules.okxApi.wsHandler.handler.OkxOrderInfoChannelHandler;
|
import com.xcong.excoin.modules.okxApi.wsHandler.handler.OkxPositionsChannelHandler;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.PostConstruct;
|
import javax.annotation.PreDestroy;
|
import java.math.BigDecimal;
|
|
@Slf4j
|
@Component
|
public class OkxWebSocketClientManager {
|
|
private OkxKlineWebSocketClient wsKlineClient;
|
private OkxKlineWebSocketClient wsPrivateClient;
|
private OkxGridTradeService gridTradeService;
|
private OkxConfig config;
|
|
@PostConstruct
|
public void init() {
|
log.info("[管理器] 开始初始化...");
|
|
try {
|
config = OkxConfig.builder()
|
.apiKey("d90ca272391992b8e74f8f92cedb21ec")
|
.secretKey("1861e4f52de4bb53369ea3208d9ede38ece4777368030f96c77d27934c46c274")
|
.passphrase("Aa123123@")
|
.contract("BTC-USDT-SWAP")
|
.leverage("100")
|
.marginMode("cross")
|
.gridRate(new BigDecimal("0.0015"))
|
.overallTp(new BigDecimal("5"))
|
.maxLoss(new BigDecimal("15"))
|
.quantity("1")
|
.contractMultiplier(new BigDecimal("1"))
|
.unrealizedPnlPriceMode(OkxConfig.PnLPriceMode.LAST_PRICE)
|
.isProduction(false)
|
.build();
|
|
String accountName = "OKX_API";
|
gridTradeService = new OkxGridTradeService(config, accountName);
|
gridTradeService.startGrid();
|
|
wsKlineClient = new OkxKlineWebSocketClient(config.getWsKlineUrl());
|
wsKlineClient.addChannelHandler(new OkxCandlestickChannelHandler(config.getContract(), gridTradeService));
|
wsKlineClient.init();
|
log.info("[管理器] K线WS已连接, 已注册K线频道处理器");
|
|
wsPrivateClient = new OkxKlineWebSocketClient(
|
config.getWsPrivateUrl(),
|
config.getApiKey(),
|
config.getSecretKey(),
|
config.getPassphrase());
|
wsPrivateClient.addChannelHandler(new OkxPositionsChannelHandler(config.getContract(), gridTradeService));
|
wsPrivateClient.addChannelHandler(new OkxAccountChannelHandler());
|
wsPrivateClient.addChannelHandler(new OkxOrderInfoChannelHandler(config.getContract(), gridTradeService, config));
|
wsPrivateClient.init();
|
log.info("[管理器] 私有WS已连接, 已注册 3 个频道处理器");
|
|
gridTradeService.setWebSocketClient(wsPrivateClient.getWebSocketClient());
|
|
} catch (Exception e) {
|
log.error("[管理器] 初始化失败", e);
|
}
|
}
|
|
@PreDestroy
|
public void destroy() {
|
log.info("[管理器] 开始销毁...");
|
|
if (gridTradeService != null) {
|
gridTradeService.stopGrid();
|
}
|
if (wsKlineClient != null) {
|
wsKlineClient.destroy();
|
}
|
if (wsPrivateClient != null) {
|
wsPrivateClient.destroy();
|
}
|
|
log.info("[管理器] 销毁完成");
|
}
|
|
public OkxKlineWebSocketClient getKlineWebSocketClient() { return wsKlineClient; }
|
public OkxKlineWebSocketClient getPrivateWebSocketClient() { return wsPrivateClient; }
|
public OkxGridTradeService getGridTradeService() { return gridTradeService; }
|
}
|