mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-14 16:26:57 +08:00
✨ feat(trader): aster平仓后自动取消挂单
- 调整 CloseLong/CloseShort 逻辑, 在平仓后调用 CancelAllOrders 清理挂单
This commit is contained in:
@@ -195,11 +195,11 @@ func (t *AsterTrader) formatQuantity(symbol string, quantity float64) (float64,
|
|||||||
func (t *AsterTrader) formatFloatWithPrecision(value float64, precision int) string {
|
func (t *AsterTrader) formatFloatWithPrecision(value float64, precision int) string {
|
||||||
// 使用指定精度格式化
|
// 使用指定精度格式化
|
||||||
formatted := strconv.FormatFloat(value, 'f', precision, 64)
|
formatted := strconv.FormatFloat(value, 'f', precision, 64)
|
||||||
|
|
||||||
// 去除末尾的0和小数点(如果有)
|
// 去除末尾的0和小数点(如果有)
|
||||||
formatted = strings.TrimRight(formatted, "0")
|
formatted = strings.TrimRight(formatted, "0")
|
||||||
formatted = strings.TrimRight(formatted, ".")
|
formatted = strings.TrimRight(formatted, ".")
|
||||||
|
|
||||||
return formatted
|
return formatted
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -556,7 +556,7 @@ func (t *AsterTrader) OpenLong(symbol string, quantity float64, leverage int) (m
|
|||||||
priceStr := t.formatFloatWithPrecision(formattedPrice, prec.PricePrecision)
|
priceStr := t.formatFloatWithPrecision(formattedPrice, prec.PricePrecision)
|
||||||
qtyStr := t.formatFloatWithPrecision(formattedQty, prec.QuantityPrecision)
|
qtyStr := t.formatFloatWithPrecision(formattedQty, prec.QuantityPrecision)
|
||||||
|
|
||||||
log.Printf(" 📏 精度处理: 价格 %.8f -> %s (精度=%d), 数量 %.8f -> %s (精度=%d)",
|
log.Printf(" 📏 精度处理: 价格 %.8f -> %s (精度=%d), 数量 %.8f -> %s (精度=%d)",
|
||||||
limitPrice, priceStr, prec.PricePrecision, quantity, qtyStr, prec.QuantityPrecision)
|
limitPrice, priceStr, prec.PricePrecision, quantity, qtyStr, prec.QuantityPrecision)
|
||||||
|
|
||||||
params := map[string]interface{}{
|
params := map[string]interface{}{
|
||||||
@@ -618,7 +618,7 @@ func (t *AsterTrader) OpenShort(symbol string, quantity float64, leverage int) (
|
|||||||
priceStr := t.formatFloatWithPrecision(formattedPrice, prec.PricePrecision)
|
priceStr := t.formatFloatWithPrecision(formattedPrice, prec.PricePrecision)
|
||||||
qtyStr := t.formatFloatWithPrecision(formattedQty, prec.QuantityPrecision)
|
qtyStr := t.formatFloatWithPrecision(formattedQty, prec.QuantityPrecision)
|
||||||
|
|
||||||
log.Printf(" 📏 精度处理: 价格 %.8f -> %s (精度=%d), 数量 %.8f -> %s (精度=%d)",
|
log.Printf(" 📏 精度处理: 价格 %.8f -> %s (精度=%d), 数量 %.8f -> %s (精度=%d)",
|
||||||
limitPrice, priceStr, prec.PricePrecision, quantity, qtyStr, prec.QuantityPrecision)
|
limitPrice, priceStr, prec.PricePrecision, quantity, qtyStr, prec.QuantityPrecision)
|
||||||
|
|
||||||
params := map[string]interface{}{
|
params := map[string]interface{}{
|
||||||
@@ -693,7 +693,7 @@ func (t *AsterTrader) CloseLong(symbol string, quantity float64) (map[string]int
|
|||||||
priceStr := t.formatFloatWithPrecision(formattedPrice, prec.PricePrecision)
|
priceStr := t.formatFloatWithPrecision(formattedPrice, prec.PricePrecision)
|
||||||
qtyStr := t.formatFloatWithPrecision(formattedQty, prec.QuantityPrecision)
|
qtyStr := t.formatFloatWithPrecision(formattedQty, prec.QuantityPrecision)
|
||||||
|
|
||||||
log.Printf(" 📏 精度处理: 价格 %.8f -> %s (精度=%d), 数量 %.8f -> %s (精度=%d)",
|
log.Printf(" 📏 精度处理: 价格 %.8f -> %s (精度=%d), 数量 %.8f -> %s (精度=%d)",
|
||||||
limitPrice, priceStr, prec.PricePrecision, quantity, qtyStr, prec.QuantityPrecision)
|
limitPrice, priceStr, prec.PricePrecision, quantity, qtyStr, prec.QuantityPrecision)
|
||||||
|
|
||||||
params := map[string]interface{}{
|
params := map[string]interface{}{
|
||||||
@@ -717,6 +717,12 @@ func (t *AsterTrader) CloseLong(symbol string, quantity float64) (map[string]int
|
|||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("✓ 平多仓成功: %s 数量: %s", symbol, qtyStr)
|
log.Printf("✓ 平多仓成功: %s 数量: %s", symbol, qtyStr)
|
||||||
|
|
||||||
|
// 平仓后取消该币种的所有挂单(止损止盈单)
|
||||||
|
if err := t.CancelAllOrders(symbol); err != nil {
|
||||||
|
log.Printf(" ⚠ 取消挂单失败: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -770,7 +776,7 @@ func (t *AsterTrader) CloseShort(symbol string, quantity float64) (map[string]in
|
|||||||
priceStr := t.formatFloatWithPrecision(formattedPrice, prec.PricePrecision)
|
priceStr := t.formatFloatWithPrecision(formattedPrice, prec.PricePrecision)
|
||||||
qtyStr := t.formatFloatWithPrecision(formattedQty, prec.QuantityPrecision)
|
qtyStr := t.formatFloatWithPrecision(formattedQty, prec.QuantityPrecision)
|
||||||
|
|
||||||
log.Printf(" 📏 精度处理: 价格 %.8f -> %s (精度=%d), 数量 %.8f -> %s (精度=%d)",
|
log.Printf(" 📏 精度处理: 价格 %.8f -> %s (精度=%d), 数量 %.8f -> %s (精度=%d)",
|
||||||
limitPrice, priceStr, prec.PricePrecision, quantity, qtyStr, prec.QuantityPrecision)
|
limitPrice, priceStr, prec.PricePrecision, quantity, qtyStr, prec.QuantityPrecision)
|
||||||
|
|
||||||
params := map[string]interface{}{
|
params := map[string]interface{}{
|
||||||
@@ -794,6 +800,12 @@ func (t *AsterTrader) CloseShort(symbol string, quantity float64) (map[string]in
|
|||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("✓ 平空仓成功: %s 数量: %s", symbol, qtyStr)
|
log.Printf("✓ 平空仓成功: %s 数量: %s", symbol, qtyStr)
|
||||||
|
|
||||||
|
// 平仓后取消该币种的所有挂单(止损止盈单)
|
||||||
|
if err := t.CancelAllOrders(symbol); err != nil {
|
||||||
|
log.Printf(" ⚠ 取消挂单失败: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user