mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-12 15:26:55 +08:00
fix: add OKX support to order/position sync and fix WebSocket concurrent write
- Add OKX trader support in order_sync.go and position_sync.go - Change exchange.Type to exchange.ID for correct exchange identification - Add writeMu mutex to prevent concurrent WebSocket writes in combined_streams.go and websocket_client.go
This commit is contained in:
@@ -270,13 +270,17 @@ func (m *OrderSyncManager) getTraderConfig(traderID string) (*store.TraderFullCo
|
|||||||
func (m *OrderSyncManager) createTrader(config *store.TraderFullConfig) (Trader, error) {
|
func (m *OrderSyncManager) createTrader(config *store.TraderFullConfig) (Trader, error) {
|
||||||
exchange := config.Exchange
|
exchange := config.Exchange
|
||||||
|
|
||||||
switch exchange.Type {
|
// 使用 exchange.ID 判断具体的交易所,而不是 exchange.Type (cex/dex)
|
||||||
|
switch exchange.ID {
|
||||||
case "binance":
|
case "binance":
|
||||||
return NewFuturesTrader(exchange.APIKey, exchange.SecretKey, config.Trader.UserID), nil
|
return NewFuturesTrader(exchange.APIKey, exchange.SecretKey, config.Trader.UserID), nil
|
||||||
|
|
||||||
case "bybit":
|
case "bybit":
|
||||||
return NewBybitTrader(exchange.APIKey, exchange.SecretKey), nil
|
return NewBybitTrader(exchange.APIKey, exchange.SecretKey), nil
|
||||||
|
|
||||||
|
case "okx":
|
||||||
|
return NewOKXTrader(exchange.APIKey, exchange.SecretKey, exchange.Passphrase), nil
|
||||||
|
|
||||||
case "hyperliquid":
|
case "hyperliquid":
|
||||||
return NewHyperliquidTrader(exchange.SecretKey, exchange.HyperliquidWalletAddr, exchange.Testnet)
|
return NewHyperliquidTrader(exchange.SecretKey, exchange.HyperliquidWalletAddr, exchange.Testnet)
|
||||||
|
|
||||||
@@ -295,7 +299,7 @@ func (m *OrderSyncManager) createTrader(config *store.TraderFullConfig) (Trader,
|
|||||||
return NewLighterTrader(exchange.LighterPrivateKey, exchange.LighterWalletAddr, exchange.Testnet)
|
return NewLighterTrader(exchange.LighterPrivateKey, exchange.LighterWalletAddr, exchange.Testnet)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("不支持的交易所类型: %s", exchange.Type)
|
return nil, fmt.Errorf("不支持的交易所: %s", exchange.ID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -268,6 +268,9 @@ func (m *PositionSyncManager) createTrader(config *store.TraderFullConfig) (Trad
|
|||||||
case "bybit":
|
case "bybit":
|
||||||
return NewBybitTrader(exchange.APIKey, exchange.SecretKey), nil
|
return NewBybitTrader(exchange.APIKey, exchange.SecretKey), nil
|
||||||
|
|
||||||
|
case "okx":
|
||||||
|
return NewOKXTrader(exchange.APIKey, exchange.SecretKey, exchange.Passphrase), nil
|
||||||
|
|
||||||
case "hyperliquid":
|
case "hyperliquid":
|
||||||
return NewHyperliquidTrader(exchange.SecretKey, exchange.HyperliquidWalletAddr, exchange.Testnet)
|
return NewHyperliquidTrader(exchange.SecretKey, exchange.HyperliquidWalletAddr, exchange.Testnet)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user