mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-16 01:06:59 +08:00
fix: address code review issues for GetOpenOrders
- Add error logging for OKX/Bitget API failures (was silently swallowed) - Fix Lighter position side logic to handle reduce-only orders - Change verbose debug logs from Infof to Debugf level
This commit is contained in:
@@ -1109,7 +1109,10 @@ func (t *BitgetTrader) GetOpenOrders(symbol string) ([]OpenOrder, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data, err := t.doRequest("GET", bitgetPendingPath, params)
|
data, err := t.doRequest("GET", bitgetPendingPath, params)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
|
logger.Warnf("[Bitget] Failed to get pending orders: %v", err)
|
||||||
|
}
|
||||||
|
if err == nil && data != nil {
|
||||||
var orders struct {
|
var orders struct {
|
||||||
EntrustedList []struct {
|
EntrustedList []struct {
|
||||||
OrderId string `json:"orderId"`
|
OrderId string `json:"orderId"`
|
||||||
@@ -1154,7 +1157,10 @@ func (t *BitgetTrader) GetOpenOrders(symbol string) ([]OpenOrder, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
planData, err := t.doRequest("GET", "/api/v2/mix/order/orders-plan-pending", planParams)
|
planData, err := t.doRequest("GET", "/api/v2/mix/order/orders-plan-pending", planParams)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
|
logger.Warnf("[Bitget] Failed to get plan orders: %v", err)
|
||||||
|
}
|
||||||
|
if err == nil && planData != nil {
|
||||||
var planOrders struct {
|
var planOrders struct {
|
||||||
EntrustedList []struct {
|
EntrustedList []struct {
|
||||||
OrderId string `json:"orderId"`
|
OrderId string `json:"orderId"`
|
||||||
|
|||||||
@@ -214,7 +214,7 @@ func (t *LighterTraderV2) GetActiveOrders(symbol string) ([]OrderResponse, error
|
|||||||
endpoint := fmt.Sprintf("%s/api/v1/accountActiveOrders?account_index=%d&market_id=%d",
|
endpoint := fmt.Sprintf("%s/api/v1/accountActiveOrders?account_index=%d&market_id=%d",
|
||||||
t.baseURL, t.accountIndex, marketIndex)
|
t.baseURL, t.accountIndex, marketIndex)
|
||||||
|
|
||||||
logger.Infof("📋 LIGHTER GetActiveOrders: endpoint=%s", endpoint)
|
logger.Debugf("📋 LIGHTER GetActiveOrders: endpoint=%s", endpoint)
|
||||||
|
|
||||||
// Send GET request
|
// Send GET request
|
||||||
req, err := http.NewRequest("GET", endpoint, nil)
|
req, err := http.NewRequest("GET", endpoint, nil)
|
||||||
@@ -237,7 +237,7 @@ func (t *LighterTraderV2) GetActiveOrders(symbol string) ([]OrderResponse, error
|
|||||||
return nil, fmt.Errorf("failed to read response: %w", err)
|
return nil, fmt.Errorf("failed to read response: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Infof("📋 LIGHTER GetActiveOrders raw response: %s", string(body))
|
logger.Debugf("📋 LIGHTER GetActiveOrders raw response: %s", string(body))
|
||||||
|
|
||||||
// Parse response - Lighter API uses "orders" field, not "data"
|
// Parse response - Lighter API uses "orders" field, not "data"
|
||||||
var apiResp struct {
|
var apiResp struct {
|
||||||
|
|||||||
@@ -713,10 +713,20 @@ func (t *LighterTraderV2) GetOpenOrders(symbol string) ([]OpenOrder, error) {
|
|||||||
orderType = "TAKE_PROFIT_MARKET"
|
orderType = "TAKE_PROFIT_MARKET"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine position side based on order direction
|
// Determine position side based on order direction and reduce-only flag
|
||||||
positionSide := "LONG"
|
positionSide := "LONG"
|
||||||
if side == "SELL" {
|
if order.ReduceOnly {
|
||||||
positionSide = "SHORT"
|
// For reduce-only orders, position side is opposite to order side
|
||||||
|
if side == "BUY" {
|
||||||
|
positionSide = "SHORT" // Buying to close short
|
||||||
|
} else {
|
||||||
|
positionSide = "LONG" // Selling to close long
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// For opening orders
|
||||||
|
if side == "SELL" {
|
||||||
|
positionSide = "SHORT"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse price and quantity from string fields
|
// Parse price and quantity from string fields
|
||||||
|
|||||||
@@ -1396,7 +1396,10 @@ func (t *OKXTrader) GetOpenOrders(symbol string) ([]OpenOrder, error) {
|
|||||||
// 1. Get pending limit orders
|
// 1. Get pending limit orders
|
||||||
path := fmt.Sprintf("%s?instId=%s&instType=SWAP", okxPendingOrdersPath, instId)
|
path := fmt.Sprintf("%s?instId=%s&instType=SWAP", okxPendingOrdersPath, instId)
|
||||||
data, err := t.doRequest("GET", path, nil)
|
data, err := t.doRequest("GET", path, nil)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
|
logger.Warnf("[OKX] Failed to get pending orders: %v", err)
|
||||||
|
}
|
||||||
|
if err == nil && data != nil {
|
||||||
var orders []struct {
|
var orders []struct {
|
||||||
OrdId string `json:"ordId"`
|
OrdId string `json:"ordId"`
|
||||||
InstId string `json:"instId"`
|
InstId string `json:"instId"`
|
||||||
@@ -1437,7 +1440,10 @@ func (t *OKXTrader) GetOpenOrders(symbol string) ([]OpenOrder, error) {
|
|||||||
// 2. Get pending algo orders (stop-loss/take-profit)
|
// 2. Get pending algo orders (stop-loss/take-profit)
|
||||||
algoPath := fmt.Sprintf("%s?instId=%s&instType=SWAP", okxAlgoPendingPath, instId)
|
algoPath := fmt.Sprintf("%s?instId=%s&instType=SWAP", okxAlgoPendingPath, instId)
|
||||||
algoData, err := t.doRequest("GET", algoPath, nil)
|
algoData, err := t.doRequest("GET", algoPath, nil)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
|
logger.Warnf("[OKX] Failed to get algo orders: %v", err)
|
||||||
|
}
|
||||||
|
if err == nil && algoData != nil {
|
||||||
var algoOrders []struct {
|
var algoOrders []struct {
|
||||||
AlgoId string `json:"algoId"`
|
AlgoId string `json:"algoId"`
|
||||||
InstId string `json:"instId"`
|
InstId string `json:"instId"`
|
||||||
|
|||||||
Reference in New Issue
Block a user