ZhouYongyou
2ac48e20a4
refactor(crypto): simplify to local encryption only (remove KMS)
...
## 🎯 簡化方案(社區友好)
### 移除雲端 KMS
- ❌ 刪除 crypto/aliyun_kms.go
- ❌ 不包含 GCP KMS
- ✅ 僅保留本地 AES-256-GCM 加密
### 更新 SQLite 驅動
- ✅ modernc.org/sqlite(純 Go,無 CGO)
- ✅ 與上游保持一致
## 📦 保留核心功能
✅ crypto/encryption.go - RSA + AES 加密
✅ crypto/secure_storage.go - 數據庫加密層
✅ api/crypto_handler.go - API 端點
✅ web/src/lib/crypto.ts - 前端加密
✅ scripts/migrate_encryption.go - 數據遷移
## 🚀 部署方式
```bash
# 僅需一個環境變量
export NOFX_MASTER_KEY=$(openssl rand -base64 32)
go run main.go
```
## ✅ 優點
- ✅ 零雲服務依賴
- ✅ 簡單易部署
- ✅ 適合社區用戶
- ✅ 保持核心安全功能
2025-11-06 23:58:27 +08:00
ZhouYongyou
feeaa14050
feat(security): add end-to-end encryption for sensitive data
...
## Summary
Add comprehensive encryption system to protect private keys and API secrets.
## Core Components
- `crypto/encryption.go`: RSA-4096 + AES-256-GCM encryption manager
- `crypto/secure_storage.go`: Database encryption layer + audit logs
- `crypto/aliyun_kms.go`: Optional Aliyun KMS integration
- `api/crypto_handler.go`: Encryption API endpoints
- `web/src/lib/crypto.ts`: Frontend two-stage encryption
- `scripts/migrate_encryption.go`: Data migration tool
- `deploy_encryption.sh`: One-click deployment
## Security Architecture
```
Frontend: Two-stage input + clipboard obfuscation
↓
Transport: RSA-4096 + AES-256-GCM hybrid encryption
↓
Storage: Database encryption + audit logs
```
## Features
✅ Zero breaking changes (backward compatible)
✅ Automatic migration of existing data
✅ <25ms overhead per operation
✅ Complete audit trail
✅ Optional cloud KMS support
## Migration
```bash
./deploy_encryption.sh # 5 minutes, zero downtime
```
## Testing
```bash
go test ./crypto -v
```
Related-To: security-enhancement
2025-11-06 23:55:33 +08:00
Lawrence Liu
8dc543b1cf
fix(web): 修正 FAQ 翻译文件中的错误信息 ( #552 )
...
- 删除 OKX 虚假支持声明(后端未实现)
- 补充 Aster DEX 的 API 配置说明
- 修正测试网说明为暂时不支持
2025-11-06 21:59:10 +08:00
Burt
900323b386
Fix: 提示词, 竞赛数据接口在管理员模式下转为公开 ( #607 )
...
* 提示词, 竞赛数据接口在管理员模式下转为公开
* Fix "go vet" error
2025-11-06 20:42:43 +08:00
ZhouYongyou
4ca170fcdb
Merge branch 'dev' of https://github.com/NoFxAiOS/nofx into fix/stop-loss-take-profit-method-calls
2025-11-06 14:20:35 +08:00
Ember
8767f9461f
bugfix/ fix delete AI Model issue ( #594 )
...
* fix: 修复删除AI模型/交易所后UI未刷新的问题
问题描述:
在配置界面删除AI模型或交易所后,虽然后端数据已更新,但前端UI仍然显示已删除的配置项。
根本原因:
React的状态更新机制可能无法检测到数组内容的变化,特别是当API返回的数据与之前的引用相同时。
修复方案:
在 handleDeleteModelConfig 和 handleDeleteExchangeConfig 中使用数组展开运算符 [...items] 创建新数组,确保React能够检测到状态变化并触发重新渲染。
修改文件:
- web/src/components/AITradersPage.tsx
影响范围:
- AI模型删除功能
- 交易所删除功能
Fixes #591
Co-Authored-By: tinkle-community <tinklefund@gmail.com >
* fix: 删除重复的确认对话框
问题描述:
删除AI模型或交易所时,确认对话框会弹出两次
根本原因:
1. ModelConfigModal 的删除按钮 onClick 中有一个 confirm
2. handleDeleteConfig 函数内部也有一个 confirm
修复方案:
移除 Modal 组件中的 confirm,保留 handleDeleteConfig 内部的确认逻辑,因为它包含了更完整的依赖检查功能
修改内容:
- 移除 ModelConfigModal 删除按钮中的 confirm
- 移除 ExchangeConfigModal 删除按钮中的 confirm
- 更新 title 属性为更合适的翻译键
Co-Authored-By: tinkle-community <tinklefund@gmail.com >
---------
Co-authored-by: tinkle-community <tinklefund@gmail.com >
2025-11-06 12:25:25 +08:00
Sue
d0c3fc3c12
fix: validate config.db is file not directory ( #586 )
...
修复 config.db 验证逻辑,处理误创建为目录的情况:
- 检测 config.db 是否为目录,如果是则删除并重建为文件
- 保留已存在的数据库文件不受影响
- 修复 Docker volume 挂载可能导致的目录创建问题
Co-authored-by: tinkle-community <tinklefund@gmail.com >
2025-11-06 10:38:53 +08:00
Diego
54744309dd
fix: 修复删除模型/交易所时界面卡死问题并增强依赖检查 ( #578 )
...
* fix: 修复删除模型/交易所时界面卡死问题并增强依赖检查
## 问题描述
1. 删除唯一的AI模型或交易所配置时,界面会卡死数秒
2. 删除后配置仍然显示在列表中
3. 可以删除被交易员使用的配置,导致数据不一致
## 修复内容
### 后端性能优化 (manager/trader_manager.go)
- 将循环内的重复数据库查询移到循环外
- 减少N次重复查询(GetAIModels + GetExchanges)为1次查询
- 大幅减少锁持有时间,从数秒降至毫秒级
### 前端显示修复 (web/src/components/AITradersPage.tsx)
- 过滤显示列表,只显示真正配置过的模型/交易所(有apiKey的)
- 删除后重新从后端获取最新数据,确保界面同步
### 前端依赖检查 (web/src/components/AITradersPage.tsx)
- 新增完整的依赖检查,包括停止状态的交易员
- 删除前检查是否有交易员使用该配置
- 显示使用该配置的交易员名称列表
- 阻止删除被使用的配置,保证数据一致性
### 多语言支持 (web/src/i18n/translations.ts)
- 添加依赖检查相关的中英文提示文本
- cannotDeleteModelInUse / cannotDeleteExchangeInUse
- tradersUsing / pleaseDeleteTradersFirst
## 测试建议
1. 创建交易员后尝试删除其使用的模型/交易所,应显示警告并阻止删除
2. 删除未使用的模型/交易所,应立即从列表消失且界面不卡死
3. 刷新页面后,已删除的配置不应再出现
Co-Authored-By: tinkle-community <tinklefund@gmail.com >
* refactor: 重构删除配置函数减少重复代码
## 重构内容
- 创建通用的 handleDeleteConfig 函数
- 使用配置对象模式处理模型和交易所的删除逻辑
- 消除 handleDeleteModelConfig 和 handleDeleteExchangeConfig 之间的重复代码
## 重构效果
- 减少代码行数约 40%
- 提高代码可维护性和可读性
- 便于未来添加新的配置类型
## 功能保持不变
- 依赖检查逻辑完全相同
- 删除流程完全相同
- 用户体验完全相同
Co-Authored-By: tinkle-community <tinklefund@gmail.com >
---------
Co-authored-by: tinkle-community <tinklefund@gmail.com >
2025-11-06 10:32:30 +08:00
ZhouYongyou
fa1f869eea
fix: 添加双向持仓防御性检查,避免误删除对向订单
...
在上一个修复(113a30f)中,虽然解决了订单累积问题,但引入了新的风险:
如果用户同时持有同一symbol的多空双向持仓,update_stop_loss/update_take_profit
会误删除另一方向的保护订单。
```
假设:
- BTCUSDT LONG 持仓(止损 95000)
- BTCUSDT SHORT 持仓(止损 105000)
AI 执行:update_stop_loss for SHORT
→ CancelStopLossOrders("BTCUSDT") 删除所有止损
→ SetStopLoss("BTCUSDT", "SHORT", ...) 只设置 SHORT 止损
结果:
- SHORT 止损正确更新 ✅
- LONG 止损被误删 ❌ 失去保护!
```
1. ✅ 技术支持:Binance 设置为双向持仓模式(Hedge Mode)
2. ❌ 策略禁止:Prompt 明确禁止"对同一标的同时持有多空"
3. ❌ 代码保护:开仓时检查已有同向持仓并拒绝
理论上不应该出现双向持仓,但仍需防御:
- 用户手动操作
- 并发bug
- 遗留数据
在 auto_trader.go 的 update_stop_loss/update_take_profit 函数中:
1. 执行前检测是否存在对向持仓
2. 如果检测到双向持仓:
- 记录 🚨 严重警告日志
- 说明这违反策略规则
- 提示可能的原因和建议
3. 继续执行当前逻辑(因为策略本身禁止双向持仓)
- executeUpdateStopLossWithRecord: 添加双向持仓检测(第1175-1194行)
- executeUpdateTakeProfitWithRecord: 添加双向持仓检测(第1259-1278行)
```
🚨 警告:检测到 BTCUSDT 存在双向持仓(SHORT + LONG),这违反了策略规则
🚨 取消止损单将影响两个方向的订单,请检查是否为用户手动操作导致
🚨 建议:手动平掉其中一个方向的持仓,或检查系统是否有BUG
```
- 会影响所有实现类(binance/aster/hyperliquid)
- 增加复杂度
- 策略已禁止双向持仓,属于异常场景
- 实现过于复杂
- 需要重新实现订单管理逻辑
- 策略禁止场景不应该出现
- ✅ 最小侵入性修改
- ✅ 及时警告异常情况
- ✅ 不影响正常流程
- ✅ 为调试提供线索
- 正常使用(单向持仓):无影响,正常工作 ✅
- 异常场景(双向持仓):记录警告,提示用户检查 ⚠️
Related: 113a30f (原始修复)
2025-11-06 02:57:59 +08:00
ZhouYongyou
7db9e42759
fix: 修复 update_stop_loss/update_take_profit 未删除旧订单的BUG
...
## 问题描述
更新止损止盈时,旧订单没有被删除,导致订单累积。
用户看到多个止损/止盈订单同时存在(如截图所示有4个订单)。
## 根本原因
币安Futures采用双向持仓模式(Hedge Mode),每个symbol可以同时持有LONG和SHORT两个方向的仓位。
取消订单时:
- 创建订单时指定了 PositionSide(LONG/SHORT)
- 取消订单时未遍历所有订单,导致部分订单残留
## 修复内容
### 1. binance_futures.go
- CancelStopLossOrders: 取消所有方向(LONG+SHORT)的止损订单
- CancelTakeProfitOrders: 取消所有方向(LONG+SHORT)的止盈订单
- 添加错误收集机制,记录每个失败的订单
- 增强日志输出,显示订单方向(PositionSide)
- 仅当所有取消都失败时才返回错误
### 2. aster_trader.go
- 同步应用相同的修复逻辑
- 保持多交易所一致性
## 预期效果
- 更新止损时,所有旧止损订单被删除
- 更新止盈时,所有旧止盈订单被删除
- 不会出现订单累积问题
- 更详细的日志输出,方便排查问题
## 测试建议
1. 在双向持仓模式下测试 update_stop_loss
2. 验证旧订单是否全部删除
3. 检查日志中的 positionSide 输出
Related: 用户反馈截图显示4个订单同时存在
2025-11-06 02:57:02 +08:00
杜仲
0d8b749a2c
Add public routes for supported models and exchanges ( #554 )
2025-11-06 02:08:24 +08:00
SkywalkerJi
dd6514c786
fix: Fixed redundant key input fields and corrected formatting on the frontend. ( #566 )
...
* Eliminate redundant key input fields in the front-end.
* go / react Formatting.
2025-11-06 01:16:04 +08:00
0xYYBB | ZYY | Bobo
366a7fd5f5
fix(prompts): correct confidence scale from 0-1 to 0-100 to match backend schema ( #564 )
...
## Problem
The prompts specified confidence range as 0-1 (float), but the backend code
expects 0-100 (integer). This causes JSON parsing errors when AI outputs
values like 0.85:
```
Error: json: cannot unmarshal number 0.85 into Go struct field Decision.confidence of type int
Result: confidence defaults to 0
```
## Root Cause
**Backend Definition** (decision/engine.go:103):
```go
Confidence int `json:"confidence,omitempty"` // 信心度 (0-100)
```
**Prompts (before fix)**:
- adaptive.txt: "confidence (信心度 0-1)"
- nof1.txt: "confidence (float, 0-1)"
**buildHardSystemPrompt** (decision/engine.go:336):
```go
sb.WriteString("- `confidence`: 0-100(开仓建议≥75)\n")
```
The dynamic system prompt was correct, but the base prompts contradicted it.
## Solution
Update prompt files to use consistent 0-100 integer scale:
### adaptive.txt
- `confidence (信心度 0-1)` → `confidence (信心度 0-100)`
- `<0.85` → `<85`
- `0.85-0.90` → `85-90`
- etc.
### nof1.txt
- `confidence (float, 0-1)` → `confidence (int, 0-100)`
- `0.0-0.3` → `0-30`
- `0.3-0.6` → `30-60`
- etc.
## Impact
- ✅ Fixes JSON parsing errors when AI outputs float values
- ✅ Aligns prompts with backend schema
- ✅ Consistent with buildHardSystemPrompt() output format
- ✅ No breaking changes (backend already expects 0-100)
## Testing
```bash
# Verify backend expects 0-100
grep "Confidence int" decision/engine.go
# Output: Confidence int `json:"confidence,omitempty"` // 信心度 (0-100)
# Verify buildHardSystemPrompt uses 0-100
grep "confidence.*0-100" decision/engine.go
# Output: sb.WriteString("- `confidence`: 0-100(开仓建议≥75)\n")
# Build test
go build ./decision/... # ✅ PASS
```
## Related
- Addresses schema mismatch mentioned in Issue #557
- Note: confidence field is currently not validated by backend (validateDecision
does not check confidence value), but correct schema prevents parsing errors
---
Co-authored-by: tinkle-community <tinklefund@gmail.com >
2025-11-06 00:35:53 +08:00
SkywalkerJi
0abfd13dbf
fix: Fix README link ( #563 )
...
* Resolved front-end linting issues.
* Streamlining Docker Build Scripts
* Leveraging Native ARM64 Runners on GitHub.
* Use lowercase framework names.
* Streamlining dependencies within the README.
2025-11-06 00:31:05 +08:00
0xYYBB | ZYY | Bobo
4b924f6133
fix(decision): add safe fallback when AI outputs only reasoning without JSON ( #561 )
...
## 问题 (Problem)
当 AI 只输出思维链分析没有 JSON 决策时,系统会崩溃并报错:
"无法找到JSON数组起始",导致整个交易周期失败,前端显示红色错误。
## 解决方案 (Solution)
1. 添加安全回退机制 (Safe Fallback)
- 当检测不到 JSON 数组时,自动生成保底决策
- Symbol: "ALL", Action: "wait"
- Reasoning 包含思维链摘要(最多 240 字符)
2. 统一注释为简体中文 + 英文对照
- 关键修复 (Critical Fix)
- 安全回退 (Safe Fallback)
- 退而求其次 (Fallback)
## 效果 (Impact)
- 修复前:系统崩溃,前端显示红色错误 "获取AI决策失败"
- 修复后:系统稳定,自动进入 wait 状态,前端显示绿色成功
- 日志记录:[SafeFallback] 标记方便监控和调试
## 设计考量 (Design Considerations)
- 仅在完全找不到 JSON 时触发(区分于格式错误)
- 有 JSON 但格式错误仍然报错(提示需要改进 prompt)
- 保留完整思维链摘要供后续分析
- 避免隐藏真正的问题(格式错误应该暴露)
## 测试 (Testing)
- ✅ 正常 JSON 输出:解析成功
- ✅ 纯思维链输出:安全回退到 wait
- ✅ JSON 格式错误:继续报错(预期行为)
- ✅ 编译通过
## 监控建议 (Monitoring)
可通过日志统计 fallback 频率:
```bash
grep "[SafeFallback]" logs/nofx.log | wc -l
```
如果频率 > 5% 的交易周期,建议检查并改进 prompt 质量。
Co-authored-by: tinkle-community <tinklefund@gmail.com >
2025-11-06 00:08:23 +08:00
Ember
c633a782ae
Feature/faq ( #546 )
...
* feat(web): add FAQ page with search, sidebar, and i18n integration; update navigation and routes; include user feedback analysis docs (faq.md)
* docs: add filled frontend PR template for FAQ feature (PR_FRONTEND_FAQ.md)
* docs(web): add Contributing & Tasks FAQ category near top with guidance on using GitHub Projects and PR contribution standards
* feat(web,api): dynamically embed GitHub Projects roadmap in FAQ via /api/roadmap and RoadmapWidget; add env vars for GitHub token/org/project
* chore(docker): pass GitHub roadmap env vars into backend container
* docs(web): update FAQ with fork-based PR workflow, yellow links to roadmap/task dashboard, and contribution incentives; remove dynamic roadmap embed\n\nchore(api,docker): remove /api/roadmap endpoint and related env wiring
* chore: revert unintended changes (.env.example, api/server.go, docker-compose.yml); remove local-only files (PR_FRONTEND_FAQ.md, web/faq.md) from PR
* feat: 添加对重置密码页面的路由支持
2025-11-05 22:39:42 +08:00
SkywalkerJi
22731189bd
fix: Increase Docker build speed by 98%. ( #545 )
...
* Resolved front-end linting issues.
* Streamlining Docker Build Scripts
* Leveraging Native ARM64 Runners on GitHub.
* Use lowercase framework names.
2025-11-05 22:24:56 +08:00
Burt
8b853a963d
Feat: Enable admin password in admin mode ( #540 )
...
* WIP: save local changes before merging
* Enable admin password in admin mode #374
2025-11-05 21:48:28 +08:00
Sue
96ed2c6ea7
feat(auth): implement password reset with Google Authenticator verification ( #537 )
...
实现忘记密码功能,用户可以通过邮箱和Google Authenticator验证码重置密码。
**后端改动:**
- 添加 `/api/reset-password` 接口
- 实现 `UpdateUserPassword` 数据库方法
- 验证邮箱、OTP和新密码
**前端改动:**
- 新增 `ResetPasswordPage` 组件
- 在登录页面添加"忘记密码"链接
- 实现密码重置表单(新密码、确认密码、OTP验证)
- 添加密码可见性切换功能
- 支持中英文国际化
**安全特性:**
- 要求Google Authenticator验证
- 密码强度验证(最少6位)
- 密码确认匹配检查
- 密码哈希存储
Co-authored-by: tinkle-community <tinklefund@gmail.com >
2025-11-05 21:01:18 +08:00
SkywalkerJi
cc6dc8edaa
Resolved front-end linting issues. ( #533 )
2025-11-05 20:41:41 +08:00
SkywalkerJi
c76780d850
Add ja docs ( #530 )
...
* docs: add Japanese README
* docs: Update README.ja.md
* docs: add DOCKER_DEPLOY.ja.md
---------
Co-authored-by: Ikko Ashimine <ashimine_ikko_bp@tenso.com >
2025-11-05 20:14:26 +08:00
ERIC LEUNG
5328166018
fix: 删除多定义的方法 ( #528 )
2025-11-05 20:11:50 +08:00
CoderMageFox
d01a35cb91
docs: clarify Aster only supports EVM wallets, not Solana wallets ( #524 )
2025-11-05 19:37:27 +08:00
Ember
01f3b32af2
fix(web): remove undefined setHyperliquidWalletAddr call in ExchangeConfigModal ( #525 )
2025-11-05 19:35:57 +08:00
0xYYBB | ZYY | Bobo
701ab9c62f
Revert "fix: hard system prompt ( #401 )" ( #522 )
...
This reverts commit 7dd669a907c7c2ff1023bd76821af7d13be1f35a.
2025-11-05 19:05:09 +08:00
GitBib
50ab2b5ddf
fix: update go.sum with missing modernc.org/sqlite dependencies ( #523 )
2025-11-05 19:03:32 +08:00
Theshyx11
6d2c64e91b
docs: 添加 config.db Docker 启动失败 bug 修复文档 ( #210 )
...
## 问题描述
Docker Compose 首次启动时,config.db 被创建为目录而非文件,
导致 SQLite 数据库初始化失败,容器不断重启。
错误信息: "unable to open database file: is a directory"
## 发现时间
2025-11-02 00:14 (UTC+8)
## 根本原因
docker-compose.yml 中的卷挂载配置:
- ./config.db:/app/config.db
当本地 config.db 不存在时,Docker 会自动创建同名**目录**。
## 临时解决方案
1. docker-compose down
2. rm -rf config.db
3. touch config.db
4. docker-compose up -d
## 修复时间
2025-11-02 00:22 (UTC+8)
## 新增文件
- BUGFIX_CONFIG_DB_2025-11-02.md: 详细的 bug 修复报告
## 建议改进
- 在 DOCKER_DEPLOY.md 中添加预启动步骤说明
- 考虑在 Dockerfile 中添加自动初始化脚本
Co-authored-by: shy <shy@nofx.local >
Co-authored-by: tinkle-community <tinklefund@gmail.com >
2025-11-05 18:21:05 +08:00
Sue
467d7da26e
feat(api): add server IP display for exchange whitelist configuration ( #520 )
...
Added functionality to display server public IP address for users to configure exchange API whitelists, specifically for Binance integration.
Backend changes (api/server.go):
- Add GET /api/server-ip endpoint requiring authentication
- Implement getPublicIPFromAPI() with fallback to multiple IP services
- Implement getPublicIPFromInterface() for local network interface detection
- Add isPrivateIP() helper to filter private IP addresses
- Import net package for IP address handling
Frontend changes (web/):
- Add getServerIP() API method in api.ts
- Display server IP in ExchangeConfigModal for Binance
- Add IP copy-to-clipboard functionality
- Load and display server IP when Binance exchange is selected
- Add i18n translations (en/zh) for whitelist IP messages:
- whitelistIP, whitelistIPDesc, serverIPAddresses
- copyIP, ipCopied, loadingServerIP
User benefits:
- Simplifies Binance API whitelist configuration
- Shows exact server IP to add to exchange whitelist
- One-click IP copy for convenience
Co-authored-by: tinkle-community <tinklefund@gmail.com >
2025-11-05 18:15:33 +08:00
Jupiteriana
14b788a0f0
fix: hard system prompt ( #401 )
2025-11-05 17:45:18 +08:00
CoderMageFox
52431921ed
feat: add i18n support for candidate coins warnings ( #516 )
...
- Add 13 translation keys for candidate coins warnings in both English and Chinese
- Update App.tsx to use t() function for all warning text
- Update AITradersPage.tsx to use t() function for signal source warnings
- Ensure proper internationalization for all user-facing messages
Co-authored-by: tinkle-community <tinklefund@gmail.com >
2025-11-05 17:35:38 +08:00
PoorThoth
45a2224dab
Change SQLite driver in database configuration ( #441 )
...
* Change SQLite driver in database configuration
Replace SQLite driver from 'github.com/mattn/go-sqlite3' to 'modernc.org/sqlite'.
* Update go.mod
---------
Co-authored-by: tinkle-community <tinklefund@gmail.com >
2025-11-05 17:34:29 +08:00
CoderMageFox
28fd03d8ba
feat: 添加候选币种为0时的前端警告提示 ( #515 )
...
* feat: add frontend warnings for zero candidate coins
当候选币种数量为0时,在前端添加详细的错误提示和诊断信息
主要改动:
1. 决策日志中显示候选币种数量,为0时标红警告
2. 候选币种为0时显示详细警告卡片,包含可能原因和解决方案
3. 交易员列表页面添加信号源未配置的全局警告
4. 更新TraderInfo类型定义,添加use_coin_pool和use_oi_top字段
详细说明:
- 在App.tsx的账户状态摘要中添加候选币种显示
- 当候选币种为0时,显示详细的警告卡片,列出:
* 可能原因(API未配置、连接超时、数据为空等)
* 解决方案(配置自定义币种、配置API、禁用选项等)
- 在AITradersPage中添加信号源配置检查
* 当交易员启用了币种池但未配置API时显示全局警告
* 提供"立即配置信号源"快捷按钮
- 不改变任何后端逻辑,纯UI层面的用户提示改进
影响范围:
- web/src/App.tsx: 决策记录卡片中的警告显示
- web/src/components/AITradersPage.tsx: 交易员列表页警告
- web/src/types.ts: TraderInfo类型定义更新
Co-Authored-By: tinkle-community <tinklefund@gmail.com >
* fix: import AlertTriangle from lucide-react in App.tsx
修复TypeScript编译错误:Cannot find name 'AlertTriangle'
Co-Authored-By: tinkle-community <tinklefund@gmail.com >
---------
Co-authored-by: tinkle-community <tinklefund@gmail.com >
2025-11-05 17:11:04 +08:00
zcan
7ab2dbcc8d
Fix/binance server time ( #453 )
...
* Fix Binance futures server time sync
* Fix Binance server time sync; clean up logging and restore decision sorting
---------
Co-authored-by: tinkle-community <tinklefund@gmail.com >
2025-11-05 17:09:47 +08:00
vicnoah
f29e4b18d7
ci(docker): 添加Docker镜像构建和推送的GitHub Actions工作流 ( #124 )
...
* ci(docker): 添加Docker镜像构建和推送的GitHub Actions工作流
- 支持在main和develop分支及版本标签的push事件触发
- 支持Pull Request事件及手动触发工作流
- 配置了backend和frontend两个镜像的构建策略
- 使用QEMU和Docker Buildx实现多平台构建(amd64和arm64)
- 集成GitHub Container Registry和Docker Hub登录
- 自动生成镜像元数据和多标签支持
- 支持基于GitHub Actions缓存提升构建速度
- 实现根据事件类型自动决定是否推送镜像
- 输出构建完成的镜像摘要信息
* Update Docker Hub login condition in workflow
* Fix Docker Hub login condition in workflow
* Simplify Docker Hub login step
Removed conditional check for Docker Hub username.
* Change branch names in Docker build workflow
* Update docker-build.yml
2025-11-05 16:55:09 +08:00
ERIC LEUNG
754dc2f17b
refactor(AITradersPage): remove unused hyperliquidWalletAddr state ( #511 )
2025-11-05 16:42:56 +08:00
Icyoung
71f79a72fe
Merge pull request #462 from zhouyongyou/fix/quantity-zero-min-notional
...
fix(trader+decision): prevent quantity=0 error with minimum notional validation
2025-11-05 16:29:24 +08:00
Icyoung
7510af17bc
Merge pull request #467 from zhouyongyou/fix/binance-multi-assets-api-error
...
fix: 智能处理币安多资产模式和统一账户API错误
2025-11-05 16:23:32 +08:00
Icyoung
a2fc530060
Merge branch 'dev' into fix/binance-multi-assets-api-error
2025-11-05 16:23:22 +08:00
Icyoung
8d511fe57e
Merge pull request #468 from NoFearInMyHeart-G/dev
...
feat: 增加持仓最高收益缓存和自动止盈机制
2025-11-05 16:22:05 +08:00
Icyoung
483c3b6e08
Merge branch 'dev' into dev
2025-11-05 16:21:57 +08:00
Icyoung
89f95d2bef
Merge pull request #437 from zhouyongyou/fix/margin-calculation
...
fix(margin): correct position sizing formula to prevent insufficient margin errors
2025-11-05 16:13:37 +08:00
Icyoung
c06842a501
Merge pull request #436 from zhouyongyou/fix/partial-close-stats
...
fix(ui): prevent system_prompt_template overwrite when value is empty string
2025-11-05 16:12:12 +08:00
Icyoung
7bfefbb356
Merge branch 'dev' into fix/partial-close-stats
2025-11-05 16:11:53 +08:00
Icyoung
e9c6424e95
Merge pull request #433 from zhouyongyou/fix/dual-side-position-mode
...
fix(binance): initialize dual-side position mode to prevent code=-4061 errors
2025-11-05 16:09:37 +08:00
Icyoung
c517cde988
Merge pull request #435 from zhouyongyou/fix/trader-config-overwrite
...
fix(margin): correct position sizing formula to prevent insufficient margin errors
2025-11-05 16:08:18 +08:00
Icyoung
1e2aff80d4
Merge branch 'dev' into fix/trader-config-overwrite
2025-11-05 16:05:40 +08:00
Icyoung
c0cb37252b
Merge pull request #434 from zhouyongyou/fix/stop-loss-take-profit-separation
...
fix(trader): separate stop-loss and take-profit order cancellation to prevent accidental deletions
2025-11-05 16:05:00 +08:00
Icyoung
ee0e241643
Merge pull request #429 from zhouyongyou/feat/auto-balance-sync
...
feat(trader): add automatic balance sync every 10 minutes
2025-11-05 16:02:21 +08:00
tinkle-community
7aa24f8593
Merge pull request #493 from simonjiang99/fix/3-minutes-minimum
...
fix(api):enforce minimum scan interval of three minutes
2025-11-05 16:02:04 +08:00
Icyoung
52f3985408
Merge branch 'dev' into feat/auto-balance-sync
2025-11-05 16:01:57 +08:00