- Fix realized_pnl always being 0 on SELL (use amount*price instead of amount_usdt)
- Add debug logging for all-HOLD LLM cycles (log sample HOLD reasons)
- Fix nonce collision in Bitfinex API auth (add counter)
- Fix timezone to UTC+8 in main, trade_logger, sync_cost_basis, check_errors
- Fix stop-loss retry with longer delay after cancel
- Add min order amount check in trader before BUY
- Fix risk_manager to skip positions with amount <= 0
- Cap trade_history to 500 entries to prevent unbounded growth
- Fix greedy regex in LLM response parser
- Reset cost_tracking start dates to null
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Replace 3-tier LLM SELL thresholds with 5-tier descending confidence
(1-2%→0.7, 2-3%→0.6, 3-5%→0.5, ≥5%→0.4), min profit 1%
- Allow LLM SELL on losing positions (trust LLM signal for cut-loss)
- Fix +-1.90% sign bug: use pnl_pct instead of pnl amount for sign
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Show realized P&L (USDT + %) in Slack for all SELL trades (TP, LLM, stop-loss)
- Detect filled stop-loss orders via stop_orders.json persistence and report as [止損觸發]
- Deduct 1 USDT margin from available balance to prevent exchange insufficient balance errors
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- New sync_cost_basis.py: recalculate entry_price from order history,
sync amounts/balances from wallet (cron every 30 min)
- Fix stop-loss ID staleness: update stop_orders_by_sym in step 2b
after placing new stops, preventing SELL failures from stale IDs
- Fix position limit inconsistency: use same total_balance in
validate_trade instead of calling check_position_limit
- Skip stop-loss for positions below MIN_ORDER_AMOUNT
- Add API response body logging for 500 errors
- Cancel "Order not found" treated as success (not error)
- Post-trade wallet refresh to ensure fresh balances
- Report: show total value, total return %, exclude dust positions
- Crontab offset +1 min from candle close for complete data
- Handle PARTIALLY FILLED order status in cost calculation
- Sort orders by mts_create in Python (Bitfinex sort unreliable)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Includes: Bitfinex API integration, technical indicators,
LLM signal generation, risk management, Slack notifications.
Recent fixes:
- SELL orders use position value instead of total balance
- SELL signals always close full position
- Failed orders added to rejected list for Slack reporting
- Position/exposure limits auto-cap to remaining room
- BUY order minimum raised to 10% of portfolio
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>