Commit Graph

124 Commits

Author SHA1 Message Date
Yinghao Fan
c9f9f4318e fix: Correct error handling in decision parsing
Changes:
- Updated error handling in `GetFullDecision` and `parseFullDecisionResponse` functions to return the decision object even when an error occurs, improving the clarity of error messages.
This ensures that the decision object is consistently returned, allowing for better debugging and handling of errors in the decision-making process.
2025-10-31 02:06:20 +08:00
tinkle-community
e4d5dcc23c UI: Unify trader colors between Leaderboard and Performance Chart
Problem:
- Leaderboard used ai_model-based colors (qwen=purple, other=blue)
- Performance Comparison used index-based colors (10 color pool)
- This caused color mismatch between the two components
- Same trader showed different colors in different sections
Solution:
- Create shared color utility (utils/traderColors.ts)
- Define single color pool with 10 distinct colors
- Implement unified getTraderColor function based on trader index
- Update both ComparisonChart and CompetitionPage to use shared utility
Changes:
- New file: web/src/utils/traderColors.ts (shared color logic)
- Updated: ComparisonChart.tsx (use shared utility)
- Updated: CompetitionPage.tsx (use shared utility in Leaderboard
  and Head-to-Head sections)
Now traders consistently display the same color across all UI sections.
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
2025-10-30 22:21:57 +08:00
tinkle-community
85fa9c09ab UI: Fix duplicate colors in Performance Comparison chart
Problem:
- Multiple traders using the same AI model had duplicate colors
- Only 2 colors were available (blue for deepseek, purple for qwen)
- Made it difficult to distinguish between traders
Solution:
- Expand color pool from 2 to 10 distinct colors
- Change color assignment from ai_model-based to index-based
- Each trader now gets a unique color based on their position
- Colors cycle if there are more than 10 traders
Color pool includes: blue, purple, emerald, orange, pink, amber,
sky, violet, green, rose
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
2025-10-30 22:12:09 +08:00
tinkle-community
edd8bffd91 Docs: Complete exchange configuration documentation
Update configuration documentation across all 4 languages (Chinese, English,
Russian, Ukrainian) with comprehensive exchange-related fields:
Configuration field table updates:
- Add `exchange` field (binance/hyperliquid/aster)
- Add `hyperliquid_private_key` field with 0x prefix warning
- Add `hyperliquid_wallet_addr` field
- Add `hyperliquid_testnet` field (optional, defaults to false)
- Update `ai_model` to include "custom" option
- Change Binance API key fields to show conditional requirement
  (only required when using Binance exchange)
config.json.example updates:
- Add `enabled` field to all trader configurations
- Set appropriate enabled states for example traders
- Ensure all traders have exchange field properly configured
This makes it clear to users which configuration fields are required
for each exchange option (Binance, Hyperliquid, or Aster DEX).
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
2025-10-30 21:27:53 +08:00
tinkle-community
5eba8471cf feat: Add trader enabled switch and fix critical bugs
New Features:
- Add 'enabled' field to trader config for selective startup
- Only enabled traders will be initialized and run
- Display skip messages for disabled traders in logs
Bug Fixes:
- Fix Hyperliquid account value calculation
  * AccountValue is total equity, no need to add TotalMarginUsed
  * Correctly calculate wallet balance without unrealized PnL
  * Fix available balance calculation (AccountValue - TotalMarginUsed)
- Fix frontend page refresh navigation issue
  * Use URL hash to persist page state across refreshes
  * Support browser back/forward buttons
  * Prevent Details page from reverting to Competition on refresh
Technical Changes:
- config/config.go: Add Enabled bool field to TraderConfig
- main.go: Skip disabled traders during initialization
- trader/hyperliquid_trader.go: Correct account value logic
- web/src/App.tsx: Implement hash-based routing
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
2025-10-30 21:07:43 +08:00
tinkle-community
004ae60d31 Refactor: Extract availableBalance variable in Hyperliquid trader
Extract availableBalance calculation into a separate variable for better readability.
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
2025-10-30 20:09:30 +08:00
tinkle-community
57cc6c2d8f DevOps: Add PM2 deployment scripts
Add complete PM2 deployment solution:
- pm2.config.js: Dynamic path configuration
- pm2.sh: One-click management script
- PM2_DEPLOYMENT.md: Deployment guide
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
2025-10-30 18:20:25 +08:00
tinkle-community
542ae63ee4 UI: Display position details in Trade History
Frontend changes:
- Update TradeOutcome interface with new fields:
  - quantity: Position size
  - leverage: Leverage multiplier
  - position_value: Total position value
  - margin_used: Margin required
- Add position details display in trade cards:
  - Quantity (with 4 decimal precision)
  - Leverage (shown as "50x")
  - Position Value (shown as "$10000.00")
  - Margin Used (shown as "$200.00")
Visual design:
- 2x2 grid layout for position details
- Color coding: Leverage in gold, Margin in purple
- Conditional rendering with fallback "-" for missing data
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
2025-10-30 18:11:15 +08:00
tinkle-community
beb9561742 Feature: Add position details to Trade History
Add missing fields to TradeOutcome:
- Quantity: Position size
- Leverage: Leverage multiplier
- PositionValue: Total position value (quantity × openPrice)
- MarginUsed: Margin required (positionValue / leverage)
This provides complete trade information for analysis and display.
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
2025-10-30 18:09:16 +08:00
tinkle-community
fd8b1477e7 Fix: Resolve Trade History data loss and P&L calculation errors
Major fixes:
1. Trade History data loss issue
   - Root cause: Open records outside analysis window caused close matching failures
   - Solution: Pre-populate position state by reading 3x window of historical records
   - Ensures long-term positions (>5 hours) generate correct trade records
2. P&L calculation errors
   - Remove incorrect leverage multiplication from absolute P&L
   - Correct calculation: Futures P&L = quantity × price difference
   - Leverage only affects P&L percentage (relative to margin)
3. Other fixes
   - Break-even trades (pnl=0) no longer misclassified as losses
   - Perfect strategy shows Profit Factor as 999.0 instead of 0.0
   - Expand analysis window from 20 to 100 cycles (5 hours)
Files changed:
- logger/decision_logger.go: Core matching and calculation logic
- api/server.go: API analysis window
- trader/auto_trader.go: AI decision analysis window
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
2025-10-30 17:58:25 +08:00
tinkle-community
e249aaa16b fix:config add hyperliquid_wallet_addr 2025-10-30 17:16:03 +08:00
tinkle-community
7545b7a894 Merge pull request #59 from liugangdao/main
fix: hyperliquid余额不准确
2025-10-30 17:05:54 +08:00
刘 志
887899749f fix: hyperliquid余额不准确 2025-10-30 08:38:31 +00:00
tinkle-community
e480296e33 Merge pull request #54 from tpkeeper/main
Fix mcp defaultConfig override issue in multi-trader, multi-AI model
2025-10-30 16:13:34 +08:00
tpkeeper
b773d7289a Fix mcp defaultConfig override issue in multi-trader, multi-AI model scenario 2025-10-30 15:46:17 +08:00
tinkle-community
0f9b379cec Merge pull request #40 from d0lwl0b/main
docs: modernize Docker Compose documentation to V2 syntax
2025-10-30 14:24:52 +08:00
tinkle-community
d5842c38ab Merge pull request #48 from SkywalkerJi/main
Reduce the request frequency to the Binance API and add backend caching.
2025-10-30 14:15:19 +08:00
SkywalkerJi
01add7037a Reduce the request frequency to the Binance API and add backend caching. 2025-10-30 14:01:06 +08:00
d0lwl0b
d49c64ea53 Merge branch 'tinkle-community:main' into main 2025-10-30 13:49:39 +08:00
tinkle-community
1a27338faa Merge pull request #44 from SkywalkerJi/main
Smooth the account equity curve.
2025-10-30 13:17:55 +08:00
tinkle-community
e9f49625c8 Merge pull request #45 from yiplee/main
Change health check endpoint to accept any HTTP method for improved f…
2025-10-30 13:15:22 +08:00
tinkle-community
e3506fe0e8 Merge pull request #46 from mxyhi/main
fix: 修复aster 没有取消委托单的问题
2025-10-30 13:14:17 +08:00
d0lwl0b
0d52bc8ad9 refactor(docker): restructure Docker setup with dedicated backend/frontend services 2025-10-30 13:11:29 +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
yiplee
fd0cf4abb2 Change health check endpoint to accept any HTTP method for improved flexibility. 2025-10-30 13:00:17 +08:00
SkywalkerJi
c0ea50a409 Merge branch 'tinkle-community:main' into main 2025-10-30 12:54:04 +08:00
SkywalkerJi
b39efdac27 Smooth the account equity curve. 2025-10-30 12:53:27 +08:00
d0lwl0b
907f660398 Merge branch 'tinkle-community:main' into main 2025-10-30 12:26:21 +08:00
d0lwl0b
2a3276c125 docs: update Docker Compose documentation to V2 syntax 2025-10-30 12:26:00 +08:00
tinkle-community
b3fb73c4a0 Merge pull request #39 from SkywalkerJi/main
Optimize front-end display on mobile devices.
2025-10-30 12:14:53 +08:00
d0lwl0b
236d97c127 Merge branch 'tinkle-community:main' into main 2025-10-30 12:13:00 +08:00
SkywalkerJi
7208debb11 Optimize mobile display to prevent selection boxes from exceeding the screen boundaries. 2025-10-30 12:08:39 +08:00
tinkle-community
043e5e97b6 Merge pull request #35 from SkywalkerJi/main
When a custom URL ends with #, force the use of the full URL without appending /chat/completions.
2025-10-30 10:50:23 +08:00
tinkle-community
37a2bb4d46 Merge pull request #34 from ITfisher/release
Solving Slow Build Speed and Health Check 404 Issues
2025-10-30 10:47:23 +08:00
SkywalkerJi
be37a65d91 Merge branch 'tinkle-community:main' into main 2025-10-30 10:38:45 +08:00
SkywalkerJi
67da692c64 When a custom URL ends with #, force the use of the full URL without appending /chat/completions. 2025-10-30 10:38:15 +08:00
tinkle-community
c487da6471 Merge pull request #33 from SkywalkerJi/main
Expose the default mainstream currency settings to the configuration file
2025-10-30 10:36:53 +08:00
itfisher
027c0a31e4 fix conflict 2025-10-30 10:33:41 +08:00
itfisher
95a6bd5665 improve go build time 2025-10-30 10:14:39 +08:00
SkywalkerJi
3e157c8d14 Expose the default mainstream currency settings to the configuration file 2025-10-30 10:01:45 +08:00
tinkle-community
2423d980bc Merge pull request #25 from Im-Sue/main
add 常见问题.md 提示如何处理币安API 4061问题
2025-10-30 02:57:40 +08:00
sue
3b4a4d34aa fix: 修复配置硬编码问题
## 修复内容
### 1. AI决策杠杆配置动态化 (decision/engine.go)
- **问题**: System Prompt 中硬编码 50x/20x 杠杆,导致 AI 生成的决策不符合用户配置(5x)
- **修复**:
  - buildSystemPrompt() 新增 btcEthLeverage, altcoinLeverage 参数
  - System Prompt 文本使用动态杠杆值(第225-226行)
  - 示例 JSON 使用配置杠杆值(第299行)
  - 调用时传入实际配置值(第100行)
- **影响**: AI 现在会根据用户配置的杠杆限制生成决策
### 2. 前端初始余额显示优化 (web/src/components/EquityChart.tsx)
- **问题**: 初始余额硬编码为 1000 USDT,与用户配置的 100 USDT 不符
- **修复**: 实现三级回退机制
  1. 优先使用历史数据第一个点的 total_equity
  2. 备用使用当前账户 account.total_equity
  3. 最后使用默认值 100(匹配常见配置)
- **影响**: 前端显示的初始余额现在与实际配置一致
## 技术细节
**函数签名变更**:
```go
// 修改前
func buildSystemPrompt(accountEquity float64) string
// 修改后
func buildSystemPrompt(accountEquity float64, btcEthLeverage, altcoinLeverage int) string
```
**React 状态优化**:
```typescript
// 修改前
const initialBalance = history[0]?.total_equity || 1000;
// 修改后
const initialBalance = history[0]?.total_equity || account?.total_equity || 100;
```
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
2025-10-30 02:43:14 +08:00
sue
099453e3bd add 常见问题.md 提示如何处理币安API 4061问题 2025-10-30 02:35:52 +08:00
tinkle-community
bc29b525de Merge pull request #24 from Im-Sue/main
fix: 修复AI学习数据加载失败问题-前端硬编码api
2025-10-30 02:15:10 +08:00
sue
d907ec778b Merge branch 'main' of https://github.com/tinkle-community/nofx 2025-10-30 02:07:41 +08:00
tinkle-community
af70efe5ab Docs: Add screenshots section to all README files
Add professional UI screenshots to demonstrate the trading platform:
- Competition mode: Multi-AI leaderboard with real-time performance charts
- Trader details: Complete dashboard with equity curves and decision logs
Screenshots added to all language versions:
- README.md (English)
- README.zh-CN.md (Chinese)
- README.ru.md (Russian)
- README.uk.md (Ukrainian)
Images organized in screenshots/ directory with descriptive filenames:
- competition-page.png (AI battle interface)
- details-page.png (trader dashboard)
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
2025-10-30 01:42:38 +08:00
sue
6ea1ead263 fix: 修复AI学习数据加载失败问题
问题描述:
- AILearning组件直接使用硬编码的localhost:8080地址
- 绕过了Vite代理配置,导致加载失败
- 在生产环境无法正常工作
修复内容:
1. api.ts: 添加统一的getPerformance()方法
2. AILearning.tsx: 移除硬编码URL,使用统一API
3. 删除多余的fetcher函数
技术改进:
- 使用Vite代理配置,避免CORS问题
- 统一API管理,提高可维护性
- 支持开发和生产环境
影响范围:
- web/src/lib/api.ts: +11行 (新增getPerformance方法)
- web/src/components/AILearning.tsx: -4行, +2行 (重构API调用)
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
2025-10-30 01:36:51 +08:00
tinkle-community
89640d03a1 Merge pull request #22 from hrzisme/feat/aster-dex-support
Feat/aster dex support
2025-10-30 01:01:54 +08:00
nobody
ce5aaa906c Delete COMMIT_MESSAGE.txt 2025-10-30 00:45:39 +08:00