修复日期: 2025-10-02
文件: /Users/he/projects/pecifica/scripts/run-refactored-strategy.ts
问题: 硬编码假设 10% 保证金率,导致保证金占用率计算严重不准确
修复位置:
total_margin_used
balance.usedMargin
修复内容:
// 1. 初始化时获取真实保证金
const usedMargin = parseFloat(accountData.total_margin_used); // ✅ API真实数据
const balance = {
total: totalEquity,
available: availableBalance,
locked: totalEquity - availableBalance,
usedMargin: usedMargin, // ✅ 保存真实保证金
timestamp: Date.now()
};
// 2. 计算保证金占用率时使用真实值
const usedMargin = balance.usedMargin !== undefined
? balance.usedMargin // ✅ 优先使用API返回的真实保证金
: totalEquity - availableBalance; // 降级到差值计算
// 3. 订单保证金用于排序(不影响总保证金计算)
orders.push({
// ...
marginUsed: orderValue // 使用订单价值作为排序依据
});
影响:
问题: 市价单 signal.price
为 undefined
,导致追踪失败
修复位置: Line 1137-1154
修复内容:
// ✅ 仅追踪限价单(有价格的订单)
if (result.success && result.orderId && result.signal.price) {
this.orderLifecycleManager.trackOrder({
orderId: result.orderId,
symbol: result.signal.symbol,
side: result.signal.side,
amount: result.signal.amount,
price: result.signal.price,
accountId: result.signal.accountId
});
} else if (result.success && result.orderId && !result.signal.price) {
// 市价单跳过追踪(通常立即成交,无需生命周期管理)
this.logger.debug('Skipping lifecycle tracking for market order', {
orderId: result.orderId,
symbol: result.signal.symbol,
reason: 'Market orders execute immediately'
});
}
影响:
问题: Math.abs(totalPositionBTC) > 0
永远为 true,账户选择错误
修复位置: Line 244-245
修复内容:
// ❌ 之前的错误逻辑
const balanceAccountId = Math.abs(totalPositionBTC) > 0
? account1.accountId
: account2.accountId;
// ✅ 修正后的逻辑
const balanceAccountId = totalPositionBTC > 0
? account1.accountId
: account2.accountId;
影响:
问题: 双重 isNaN
检查,代码冗余
修复位置: Line 176-191
修复内容:
// ❌ 之前的冗余检查
if (sizeOpt && sizeOpt.totalAmount && !isNaN(sizeOpt.totalAmount)) {
if (!isNaN(sizeOpt.totalAmount) && sizeOpt.totalAmount > 0) {
// ...
}
}
// ✅ 简化后的逻辑
if (sizeOpt?.totalAmount && !isNaN(sizeOpt.totalAmount) && sizeOpt.totalAmount > 0) {
const LOT_SIZE = 0.00001;
optimizedAmount = Math.floor(sizeOpt.totalAmount / LOT_SIZE) * LOT_SIZE;
// ...
}
影响:
优先级 | 问题数 | 已修复 | 待处理 |
---|---|---|---|
P0 | 2 | ✅ 2 | 0 |
P1 | 2 | ✅ 2 | 0 |
P2 | 5 | 0 | 5 |
总计 | 9 | 4 | 5 |
reason: 'Sprint2: ${pricingMethod}'
reason: 'Normal open signal (pricing: ${pricingMethod})'
// 检查日志中的保证金占用率
grep "marginUtilization" /tmp/long_run_test.log
// 应该看到真实的保证金占用率,而不是估算值
// 检查订单追踪日志
grep "Order tracked for lifecycle management" /tmp/long_run_test.log
// 应该看到限价单被追踪,市价单被跳过
// 检查 Delta 平衡信号
grep "Delta超过容忍度" /tmp/long_run_test.log
// 验证 balanceAccountId 选择正确
修复完成 - 所有 P0/P1 严重问题已解决 ✅