Icyoung
af1fc4189a
Merge pull request #415 from zhouyongyou/feat/partial-close-core-v2
...
feat: 部分平倉和動態止盈止損核心實現 / Partial Close & Dynamic TP/SL Core
2025-11-05 15:41:20 +08:00
CoderMageFox
81e3d3cdb4
fix: 修复InitialBalance配置错误导致的P&L统计不准确问题
...
用户在使用Aster交易员时发现,即使没有开始交易,P&L统计也显示了12.5 USDT (83.33%)的盈亏。经过调查发现:
**根本原因**:
- 实际Aster账户余额:27.5 USDT
- Web界面配置的InitialBalance:15 USDT ❌
- 错误的P&L计算:27.5 - 15 = 12.5 USDT (83.33%)
**问题根源**:
1. Web界面创建交易员时默认initial_balance为1000 USDT
2. 用户手动修改时容易输入错误的值
3. 缺少自动获取实际余额的功能
4. 缺少明确的警告提示
**文件**: `trader/aster_trader.go`
- ✅ 验证Aster API完全兼容Binance格式
- 添加详细的注释说明字段含义
- 添加调试日志以便排查问题
- 确认balance字段不包含未实现盈亏(与Binance一致)
**关键确认**:
```go
// ✅ Aster API完全兼容Binance API格式
// balance字段 = wallet balance(不包含未实现盈亏)
// crossUnPnl = unrealized profit(未实现盈亏)
// crossWalletBalance = balance + crossUnPnl(全仓钱包余额,包含盈亏)
```
**文件**: `web/src/components/TraderConfigModal.tsx`
**新增功能**:
1. **编辑模式**:添加"获取当前余额"按钮
- 一键从交易所API获取当前账户净值
- 自动填充到InitialBalance字段
- 显示加载状态和错误提示
2. **创建模式**:添加警告提示
- ⚠️ 提醒用户必须输入交易所的当前实际余额
- 警告:如果输入不准确,P&L统计将会错误
3. **改进输入体验**:
- 支持小数输入(step="0.01")
- 必填字段标记(创建模式)
- 实时错误提示
**代码实现**:
```typescript
const handleFetchCurrentBalance = async () => {
const response = await fetch(`/api/account?trader_id=${traderData.trader_id}`);
const data = await response.json();
const currentBalance = data.total_equity; // 当前净值
setFormData(prev => ({ ...prev, initial_balance: currentBalance }));
};
```
通过查阅Binance官方文档确认:
| 项目 | Binance | Aster (修复后) |
|------|---------|----------------|
| **余额字段** | balance = 钱包余额(不含盈亏) | ✅ 相同 |
| **盈亏字段** | crossUnPnl = 未实现盈亏 | ✅ 相同 |
| **总权益** | balance + crossUnPnl | ✅ 相同 |
| **P&L计算** | totalEquity - initialBalance | ✅ 相同 |
1. 编辑交易员配置
2. 点击"获取当前余额"按钮
3. 系统自动填充正确的InitialBalance
4. 保存配置
1. 查看交易所账户的实际余额
2. 准确输入到InitialBalance字段
3. 注意查看警告提示
4. 完成创建
- [x] 确认Aster API返回格式与Binance一致
- [x] 验证"获取当前余额"功能正常工作
- [x] 确认P&L计算公式正确
- [x] 前端构建成功
- [x] 警告提示正常显示
- **修复**: 解决InitialBalance配置错误导致的P&L统计不准确问题
- **改进**: 提升用户体验,减少配置错误
- **兼容**: 完全向后兼容,不影响现有功能
Co-Authored-By: tinkle-community <tinklefund@gmail.com >
2025-11-05 12:49:55 +08:00
ZhouYongyou
9884605c75
修復關鍵缺陷:添加 CancelStopOrders 方法避免多個止損單共存
...
問題:
- 調整止損/止盈時,直接調用 SetStopLoss/SetTakeProfit 會創建新訂單
- 但舊的止損/止盈單仍然存在,導致多個訂單共存
- 可能造成意外觸發或訂單衝突
解決方案(參考 PR #197):
1. 在 Trader 接口添加 CancelStopOrders 方法
2. 為三個交易所實現:
- binance_futures.go: 過濾 STOP_MARKET/TAKE_PROFIT_MARKET 類型
- aster_trader.go: 同樣邏輯
- hyperliquid_trader.go: 過濾 trigger 訂單(有 triggerPx)
3. 在 executeUpdateStopLossWithRecord 和 executeUpdateTakeProfitWithRecord 中:
- 先調用 CancelStopOrders 取消舊單
- 然後設置新止損/止盈
- 取消失敗不中斷執行(記錄警告)
優勢:
- ✅ 避免多個止損單同時存在
- ✅ 保留我們的價格驗證邏輯
- ✅ 保留執行價格記錄
- ✅ 詳細錯誤信息
- ✅ 取消失敗時繼續執行(更健壯)
測試建議:
- 開倉後調整止損,檢查舊止損單是否被取消
- 連續調整兩次,確認只有最新止損單存在
致謝:參考 PR #197 的實現思路
2025-11-04 16:40:23 +08:00
hzb1115
62ebd58a1f
style(backend): go fmt code
2025-11-03 17:22:11 +00:00
icy
142863f554
Add MarginMode configration
2025-10-31 13:14:24 +08:00
mxyhi
b75a671b2c
🐛 fix(order): 开仓前先撤销所有挂单
...
- 先在开仓前取消所有挂单,防止残留挂单导致仓位叠加
- 取消挂单失败时记录警告,但仍继续开仓
2025-10-30 13:08:26 +08:00
mxyhi
a80590e592
✨ feat(trader): aster平仓后自动取消挂单
...
- 调整 CloseLong/CloseShort 逻辑, 在平仓后调用 CancelAllOrders 清理挂单
2025-10-30 13:06:14 +08:00
nobody
4c21989328
Update readmes.
2025-10-30 00:41:14 +08:00
nobody
87f67f2da1
feat: Add Aster DEX exchange support + fix precision issues
...
## Features
- Add full Aster DEX integration with Binance-compatible API
- Support Web3 authentication with API wallet system
- Add comprehensive Aster integration guide (ASTER_INTEGRATION.md)
- Add example Aster configuration (config.aster.example.json)
## Bug Fixes
- Fix precision error (code -1111) for all order types
- Implement proper float-to-string conversion with exchange precision
- Add automatic precision fetching from /exchangeInfo endpoint
- Remove trailing zeros from formatted values
## Documentation
- Update README.md with Aster quick start guide
- Add detailed setup instructions for creating API wallet
- Include troubleshooting FAQ and security best practices
- Update core features to mention three supported exchanges
## Technical Details
- Added formatFloatWithPrecision() helper function
- Updated all order functions to use proper precision formatting
- Added precision logging for debugging
- Fully backward compatible with existing configurations
Closes #[issue number if applicable]
2025-10-30 00:27:33 +08:00