检查日志关键字:
grep "Delta Assessment" logs/strategy.log
grep "Delta exceeds tolerance" logs/strategy.log
期望输出示例:
📊 Delta Assessment {
symbol: 'BTC',
totalPositionBTC: '0.00150',
positionValueUSDC: '150.00',
weightedDelta: '0.0075%',
currentTolerance: '0.5000%',
exceedsTolerance: '✅ NO',
recommendation: 'hold'
}
诊断要点:
Delta Assessment
日志每个周期都应出现exceedsTolerance
为 YES 时应触发对冲检查日志关键字:
grep "Executing signal" logs/strategy.log
grep "Signal executed successfully" logs/strategy.log
grep "execution failed" logs/strategy.log
常见错误处理:
⚠️ Reduce-only order failed: position not found (skip retry)
原因: 试图减仓但账户无持仓
处理: SignalExecutor 已自动跳过重试,发出 position_not_found
事件
❌ Order creation failed: Insufficient margin
原因: 保证金不足 处理: 需要减仓或增加保证金
{
"deltaRebalancing": {
"enabled": true,
"checkInterval": 60,
"rebalanceThreshold": 0.05, // 5% - 触发再平衡
"maxDeltaDeviation": 0.001 // 0.1% - 目标偏差
}
}
{
"deltaControl": {
"baseDeltaTolerance": 0.005, // 0.5% - 基础容忍度
"stableDeltaTolerance": 0.005, // 0.5% - 平稳市场
"volatileDeltaTolerance": 0.02, // 2% - 波动市场
"volatilityThreshold": 0.01 // 1% - 波动率阈值
}
}
问题:敞口持续存在
降低触发阈值(使用数量基准)
{
"deltaRebalancing": {
"rebalanceThreshold": 0.01, // 从 5% 降到 1%
"maxDeltaDeviation": 0.001 // 保持 0.1%
},
"deltaControl": {
"baseDeltaTolerance": 0.001, // 从 0.5% 降到 0.1%
"stableDeltaTolerance": 0.001 // 从 0.5% 降到 0.1%
}
}
使用绝对数量阈值(更精确)
修改策略引擎 Delta 检测逻辑:
// 当前:基于百分比
const exceedsTolerance = Math.abs(weightedDelta) > currentTolerance;
// 建议:基于绝对 BTC 数量
const absoluteThreshold = 0.0001; // 0.0001 BTC = ~$10 USDC
const exceedsTolerance = Math.abs(totalPositionBTC) > absoluteThreshold;
增加检查频率
{
"intervals": {
"deltaMonitoring": 30, // 从 60 秒改为 30 秒
"volumeTrading": 3 // 从 5 秒改为 3 秒
}
}
检查日志关键字:
grep "mirror_reduce" logs/strategy.log
grep "Reduce-only order" logs/strategy.log
grep "订单已取消" logs/strategy.log
镜像减仓流程:
mirror_reduce
信号(Account A 和 Account B 同时减仓)常见问题:
原因:
解决:
{
"dynamicPositionAdjustment": {
"enabled": false, // ❌ 已禁用轮询
"maxMarginUsageThreshold": 0.75
}
}
改为使用 WebSocket 事件驱动(MonitoringManager):
// 已在 MonitoringManager 中实现
marginMonitor.on('margin_warning', async (data) => {
// 自动生成镜像减仓信号
});
原因: 无持仓可减
解决:
已在策略引擎中添加:
this.logger.info('📊 Delta Assessment', {
symbol: this.config.symbol,
totalPositionBTC: totalPositionBTC.toFixed(5), // 净敞口(BTC)
positionValueUSDC: (totalPositionBTC * currentPrice).toFixed(2), // 净敞口(USDC)
weightedDelta: (deltaAssessment.weightedDelta * 100).toFixed(4) + '%',
currentTolerance: (deltaAssessment.currentTolerance * 100).toFixed(4) + '%',
exceedsTolerance: deltaAssessment.exceedsTolerance ? '⚠️ YES' : '✅ NO',
recommendation: deltaAssessment.recommendation,
deltaByTimeframe: deltaAssessment.deltaByTimeframe
});
# 实时查看 Delta 评估
tail -f logs/strategy.log | grep "Delta Assessment"
# 实时查看对冲信号
tail -f logs/strategy.log | grep -E "Delta exceeds|Hedging signal|Executing signal"
# 实时查看净敞口
tail -f logs/strategy.log | grep "totalPositionBTC"
# 运行 Delta 诊断脚本
npm run diagnose:delta
# 或直接运行
tsx scripts/diagnose-delta.ts
tsx scripts/diagnose-delta.ts
期望输出:
📋 诊断报告
================================================================================
时间: 2025-01-15T10:30:00.000Z
【Delta 检测】
启用状态: ✅ 已启用
触发阈值: 5.00%
当前 Delta: 0.0075%
是否超限: ✅ 否
【净敞口】
总 BTC: 0.00150 BTC
总 USDC: 10000.00 USDC
分账户:
account1: 0.00080 BTC, 5000.00 USDC
account2: 0.00070 BTC, 5000.00 USDC
【建议】
✅ 配置正常
💡 建议启用详细日志
# 窗口1: 运行策略
npm run strategy:modular
# 窗口2: 监控 Delta
tail -f logs/strategy.log | grep "Delta Assessment"
# 窗口3: 监控对冲
tail -f logs/strategy.log | grep -E "exceeds tolerance|Hedging|mirror_reduce"
检查点:
exceedsTolerance: YES
时,看到 "Delta exceeds tolerance" 日志totalPositionBTC
接近 0如果对冲未生效:
根据诊断结果调整配置:
敞口持续 >0.001 BTC:
{
"deltaRebalancing": {
"rebalanceThreshold": 0.01, // 降低阈值
"maxDeltaDeviation": 0.0005 // 更严格目标
}
}
频繁误触发:
{
"deltaControl": {
"volatileDeltaTolerance": 0.03, // 提高波动容忍度
"volatilityThreshold": 0.015 // 提高波动率阈值
}
}
对冲执行失败:
{
"signalExecutor": {
"maxRetries": 5, // 增加重试次数
"retryDelay": 2000, // 增加重试延迟
"minOrderInterval": 1000 // 增加订单间隔
}
}
A: 可能原因:
exceedsTolerance
是否为 YESrebalanceThreshold
到 0.01A: 可能原因:
hedging_decision
事件A: 这是正常的,表示账户无持仓可减。SignalExecutor 已自动处理:
// 不重试 420 错误
if (errorMessage.includes('No position found for reduce-only order')) {
this.logger.warn('⚠️ Reduce-only order failed: position not found (skip retry)');
this.emit('position_not_found', { accountId, symbol, signal });
return { success: false, ... };
}
A: 修改策略引擎的 Delta 检测逻辑:
// src/strategies/SimpleStrategyEngine.ts
// 当前逻辑(基于百分比)
if (deltaAssessment.exceedsTolerance) {
// 生成对冲信号
}
// 改为绝对数量(推荐)
const ABSOLUTE_THRESHOLD_BTC = 0.0001; // 0.0001 BTC ≈ $10 USDC
if (Math.abs(totalPositionBTC) > ABSOLUTE_THRESHOLD_BTC) {
// 生成对冲信号
const balanceAmount = Math.abs(totalPositionBTC); // 全部对冲
// ...
}
A: 检查步骤:
margin_warning
或 margin_critical
事件mirror_reduce
信号{
"deltaRebalancing": {
"enabled": true,
"checkInterval": 30, // 30秒检查一次
"rebalanceThreshold": 0.01, // 1% 触发(或使用绝对值 0.0001 BTC)
"maxDeltaDeviation": 0.0005 // 0.05% 目标偏差
},
"intervals": {
"volumeTrading": 3, // 3秒交易一次
"deltaMonitoring": 30, // 30秒监控一次
"orderCheck": 3 // 3秒检查一次订单
}
}
{
"deltaControl": {
"baseDeltaTolerance": 0.001, // 0.1% 基础容忍度(严格)
"stableDeltaTolerance": 0.001, // 0.1% 平稳市场
"volatileDeltaTolerance": 0.02, // 2% 波动市场
"volatilityThreshold": 0.01, // 1% 波动率阈值
"deltaTimeframes": [60, 300, 3600],
"deltaWeights": [0.5, 0.3, 0.2],
"predictiveDelta": true,
"imbalanceThreshold": 0.15
}
}
完成以上检查后,如果敞口仍然存在,请提供以下日志片段:
exceedsTolerance
状态)这些信息将帮助定位具体问题并进行针对性调整。