Commit Graph

253 Commits

Author SHA1 Message Date
ZhouYongyou
ed8bb94dea 更新 logger:支持新增的三個動作類型
更新內容:
1. DecisionAction 註釋:添加 update_stop_loss, update_take_profit, partial_close
2. GetStatistics:partial_close 計入 TotalClosePositions
3. AnalyzePerformance 預填充邏輯:處理 partial_close(不刪除持倉記錄)
4. AnalyzePerformance 分析邏輯:
   - partial_close 正確判斷持倉方向
   - 記錄部分平倉的盈虧統計
   - 保留持倉記錄(因為還有剩餘倉位)

說明:partial_close 會記錄盈虧,但不刪除 openPositions,
      因為還有剩餘倉位可能繼續交易
2025-11-02 06:11:12 +08:00
ZhouYongyou
498cec0b92 修復關鍵 BUG:validActions 缺少新動作導致驗證失敗
問題根因:
- auto_trader.go 已實現 update_stop_loss/update_take_profit/partial_close 處理
- adaptive.txt 已描述這些功能
- 但 validateDecision 的 validActions map 缺少這三個動作
- 導致 AI 生成的決策在驗證階段被拒絕:「无效的action:update_stop_loss」

修復內容:
1. validActions 添加三個新動作
2. 為每個新動作添加參數驗證:
   - update_stop_loss: 驗證 NewStopLoss > 0
   - update_take_profit: 驗證 NewTakeProfit > 0
   - partial_close: 驗證 ClosePercentage 在 0-100 之間
3. 修正註釋:adjust_* → update_*

測試狀態:feature 分支,等待測試確認
2025-11-02 06:06:55 +08:00
ZhouYongyou
7f741c4a7d docs(adaptive): 添加數據解釋和參考示例,採用"解釋+參考"方式
改動說明:
- 新增「數據框架說明」章節:詳細說明 4 個時間框架的覆蓋時間和用途
- 新增「關鍵數據解讀」章節:
  * BuySellRatio 含義和參考範圍(0.6-0.7 強買壓,0.3-0.4 強賣壓)
  * 成交量分析:放量檢測標準(1.5-2 倍平均)
  * RSI 參考範圍:根據市場波動性調整(震盪市 30-40/60-70)
- 新增「入場信號參考示例」章節:
  * 震盪策略入場信號(區間下沿做多、上沿做空)
  * 趨勢策略入場信號(趨勢突破參考)
- 補充「避免低質量信號」:
  * 新增:震盪市在區間中部交易(應等待區間邊界)
  * 新增:缺乏買賣壓力確認(BuySellRatio 中性時謹慎)

設計哲學:
- 採用「解釋 + 參考示例」方式,而非硬編碼固定規則
- 所有參考數值都明確標註「你可以根據市場狀態自主調整」
- 強調根據市場波動性、趨勢強度自主判斷
- 激發 AI 的判斷能力,而非限制其靈活性
- 通過夏普比率反饋實現自我進化

改動統計:+111 行(增加詳細解釋和示例)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-02 05:48:28 +08:00
ZhouYongyou
82660b12c5 feat: 添加部分平仓和动态止盈止损功能
新增功能:
- update_stop_loss: 调整止损价格(追踪止损)
- update_take_profit: 调整止盈价格(技术位优化)
- partial_close: 部分平仓(分批止盈)

实现细节:
- Decision struct 新增字段:NewStopLoss, NewTakeProfit, ClosePercentage
- 新增执行函数:executeUpdateStopLossWithRecord, executeUpdateTakeProfitWithRecord, executePartialCloseWithRecord
- 修复持仓字段获取 bug(使用 "side" 并转大写)
- 更新 adaptive.txt 文档,包含详细使用示例和策略建议
- 优先级排序:平仓 > 调整止盈止损 > 开仓

命名统一:
- 与社区 PR #197 保持一致,使用 update_* 而非 adjust_*
- 独有功能:partial_close(部分平仓)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-02 05:32:23 +08:00
ZhouYongyou
093d521394 Merge branch 'dev' of https://github.com/tinkle-community/nofx into dev 2025-11-02 04:54:09 +08:00
ZhouYongyou
04419b47e6 fix: 修复编辑交易员时「AI模型配置不存在或未启用」错误
问题:
- 编辑交易员并修改系统提示词模板时,保存失败
- 错误提示:AI模型配置不存在或未启用

根本原因:
1. 后端 API 返回的 ai_model 被截断(admin_deepseek → deepseek)
2. 前端验证时找不到对应的模型 ID(enabledModels 存的是完整 ID)
3. API 缺少 system_prompt_template 字段

修复内容:
- api/server.go: 移除 AI model ID 截断逻辑,返回完整 ID
- api/server.go: 在 handleGetTraderConfig 中添加 system_prompt_template 字段
- web/src/types.ts: TraderConfigData 接口添加 system_prompt_template 字段
- web/src/components/AITradersPage.tsx: 添加 fallback 机制和详细日志

测试:
- 编辑交易员 → 修改系统提示词模板 → 保存成功
- Console 输出验证日志,不再报错
2025-11-02 04:51:30 +08:00
Luna Martinez
935c3d094e Merge pull request #216 from tinkle-community/shui_dev
Feat: Update docs
2025-11-01 15:13:29 -04:00
zbhan
18820fc319 Feat: Update docs
- 重构文档结构
- 更新文档内容
- 制定roadmap
- 提供中/EN 双语文档
2025-11-01 15:05:24 -04:00
tinkle-community
9b9b269dca Merge pull request #215 from zhoujunhehe/landing-page-pr 2025-11-02 02:16:17 +08:00
Ember
2fa884c72d style(web): 统一 FooterSection 组件的代码风格,优化链接格式和排版 2025-11-02 01:59:42 +08:00
Ember
7a4d1db046 fix(web): Footer ‘资源/文档’ 链接改为 GitHub 主 README(https://github.com/tinkle-community/nofx/blob/main/README.md) 2025-11-02 01:57:50 +08:00
Ember
2cc4f77254 chore(web): Footer 支持方去除图标并新增 Hyperliquid 链接 2025-11-02 01:56:21 +08:00
Ember
df83eba8e7 feat(web): Footer 按旧版文案重排 —— 顶部品牌 + 三列(链接/资源/支持方:Aster DEX、Binance、Amber.ac) 2025-11-02 01:53:48 +08:00
Ember
1413eb868e feat(web): Footer 增加“支持的交易所”列(Binance、Aster DEX 图标与链接),对齐早期版本记忆 2025-11-02 01:50:49 +08:00
Ember
aa5e66f7b8 feat(web): LandingPage 页脚升级为多链接版本(链接/资源/产品/支持 四列) 2025-11-02 01:46:40 +08:00
Ember
388832876a feat(web): 恢复 LandingPage 页脚(FooterSection),复用 App 的 Footer 文案与样式 2025-11-02 01:42:30 +08:00
Ember
16a62cedce style(web): 移除功能卡片右下角黄色渐变点缀(去除黄光) 2025-11-02 01:39:31 +08:00
ZhouYongyou
8faa2b3494 refactor: 恢復模板加載失敗時的簡化版本 fallback
## 問題
之前修改將模板加載失敗時改為返回空字符串,但:
- 上層函數沒有檢測空字符串的邏輯
- 空字符串會直接傳給 AI API,導致錯誤
- 極端情況下系統無法運行

## 解決方案
恢復原始邏輯,保留內置簡化版本作為最後防線:
```
用戶模板失敗 → default 失敗 → 使用內置簡化版本
"你是专业的加密货币交易AI。请根据市场数据做出交易决策。"
```

## 差異對比
### 之前(不安全)
```go
if default 加載失敗 {
    return ""  //  上層未檢測,會傳空字符串給 AI
}
```

### 現在(安全)
```go
if default 加載失敗 {
    sb.WriteString("你是专业的加密货币交易AI。请根据市场数据做出交易决策。\n\n")
    //  有最後防線,極端情況下仍能運行
}
```

## 測試驗證
-  Go 編譯成功
-  Docker build 成功
-  邏輯恢復到原始穩定版本

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-02 01:27:44 +08:00
ZhouYongyou
1fb5ecb89c chore: 移除未實現功能的設計文檔
DYNAMIC_TP_SL_PROPOSAL.md 是動態止盈止損功能的設計文檔,
但功能尚未實現,保留在代碼庫中可能造成困擾(誤以為已完成)。

當需要實現該功能時,可以從 git 歷史中恢復(commit bac5744)。

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-02 01:23:47 +08:00
ZhouYongyou
bac5744039 refactor: 移除 engine.go 冗餘硬編碼策略,優化模板系統
## 問題
用戶反饋:「怎麼 engine.go 還寫入了這些?... 有必要嗎?」

**根本原因**:
- prompts/ 目錄下已有 default.txt (114行) 和 adaptive.txt (259行)
- engine.go 卻硬編碼了 183 行 adaptive 策略作為 fallback
- 這導致:
  1. 重複維護兩份相同的策略內容
  2. templateLoaded 標記多餘(模板系統本身已有 fallback)
  3. 如果 default.txt 都加載失敗,說明文件系統有嚴重問題,不應繼續交易

## 解決方案

### 1. 移除冗餘硬編碼
- 刪除 183 行硬編碼 adaptive 策略(271-453 行)
- 移除 templateLoaded 標記及其邏輯

### 2. 簡化模板加載邏輯
```go
// 之前(複雜)
templateLoaded := false
if 模板加載成功 {
    templateLoaded = true
}
if !templateLoaded {
    追加 183 行硬編碼策略  //  冗餘
}

// 現在(簡潔)
if 用戶模板加載失敗 {
    嘗試 default.txt  //  已經是 fallback
}
if default.txt 也失敗 {
    返回空字符串,上層應停止交易  //  安全
}
```

### 3. 新增動態止盈止損設計文檔
創建 `DYNAMIC_TP_SL_PROPOSAL.md`,記錄:
- 用戶反饋:「建议加个 adjust tp sl 或者给 close 加个 quantity」
- 問題分析:策略提到追蹤止損,但 AI 無法執行
- 解決方案:添加 `adjust_stop_loss`, `adjust_take_profit`, `partial_close` actions
- 實施步驟:修改 Decision 結構、執行邏輯、模板說明

## 測試驗證
-  Go 編譯成功
-  Docker build 成功
-  模板系統邏輯清晰(用戶模板 → default → 報錯)
-  代碼減少 183 行(更易維護)

## 檔案變更
- `decision/engine.go`: -183 行硬編碼策略
- `DYNAMIC_TP_SL_PROPOSAL.md`: +300 行設計文檔

## 後續工作
- [ ] 實現 adjust_stop_loss action
- [ ] 實現 partial_close action
- [ ] 更新模板文件說明新 actions

---

感謝 @user 指出這個設計缺陷!🙏

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-02 01:18:57 +08:00
Ember
14b7d44322 ui(web): 管理员模式徽标改为 Lucide Zap 图标,保持与其他 emoji 替换一致 (#138 风格) 2025-11-02 01:14:11 +08:00
ZhouYongyou
a2411d2843 refactor: 優化 engine.go 模板加載邏輯,避免策略重複
## 問題
- 之前邏輯:加載模板 → 無條件追加硬編碼策略
- 結果:選擇 adaptive 模板時,會收到重複的策略內容
  * adaptive.txt: 259 行
  * 硬編碼: 184 行
  * 總計:443 行重複指導 

## 解決方案
使用 templateLoaded 標記追蹤模板加載狀態:
-  模板成功 → 使用模板,跳過硬編碼
-  模板失敗 → 使用硬編碼作為 fallback

## 變更內容
1. 添加 templateLoaded bool 變量
2. 硬編碼策略包裹在 `if !templateLoaded {}` 中(277-463 行)
3. 硬約束和輸出格式始終追加(不受影響)
4. 添加日誌追蹤模板使用情況

## 測試驗證
-  Go 編譯成功
-  Docker build 成功
-  向後兼容(模板失敗時回退到硬編碼)

## 架構改進
```
加載流程:
1. 嘗試加載指定模板(如 adaptive)
2. 失敗 → 嘗試 default
3. 仍失敗 → 使用硬編碼
4. 追加硬約束(動態生成)
5. 追加輸出格式(動態生成)
```

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-02 01:09:37 +08:00
ZhouYongyou
b908fac92f feat: 創建 adaptive.txt 自適應雙策略模板
新增 prompts/adaptive.txt 模板,包含:

## 核心特性
- 市場狀態判斷(震盪/趨勢,多指標交叉驗證)
- 雙策略系統:
  * 策略 A: 震盪交易(高勝率低盈虧比)
  * 策略 B: 趨勢跟隨(中等勝率高盈虧比)
- 技術位優先止盈機制(EMA20、前高前低、整數關口)
- 動態追踪止損(鎖定利潤,避免回撤)
- 夏普比率自我進化(交易質量 > 交易頻率)

## 使用方式
用戶可在 Web UI 選擇此模板,或繼續使用 default/nof1

## 技術實現
- 259 行完整策略指導
- 與現有模板系統兼容
- engine.go 保留硬編碼作為 fallback

相關文檔:TEMPLATE_MIGRATION_PLAN.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-02 01:06:11 +08:00
Ember
ba48298c03 ui(web): 对齐 #138 风格——用 Lucide/矢量图标替换表情与占位,增强空态/警告显示(ComparisonChart/Competition/AITraders/ConfigModal) 2025-11-02 01:02:15 +08:00
Ember
abcd215e19 feat(web): 重做 #138/#133 的前端改动(LOGO 替换 + Loading Logo + 校验优化保留),尽量不覆盖他人代码 2025-11-02 00:58:25 +08:00
ZhouYongyou
6553b81b94 fix: config.json.example 缺少 coin_pool_api_url 和 oi_top_api_url 字段
- 问题:config.json.example 与 main.go 的 ConfigFile 结构不一致
- 影响:新用户复制 example 时会缺少必要的配置字段
- 修复:添加 coin_pool_api_url 和 oi_top_api_url(空字符串)

相关提交:517d0ca (admin_mode config)
2025-11-02 00:40:21 +08:00
Ember
0a4fd06882 refactor(web): 拆分 LandingPage 为可复用组件(HeaderBar/Hero/AnimatedSection 等),新增 pages 结构并完成集成;构建通过 2025-11-02 00:36:37 +08:00
Ember
a3c6568137 refactor(web): 引入 pages 目录并迁移 LandingPage;修正 App 引用与相对路径,保持构建通过 2025-11-02 00:28:38 +08:00
ZhouYongyou
b1e4a7598a fix: 修复中文引号导致的 Go 编译错误
问题:
- Go 语言不识别中文双引号 ""
- 导致编译失败:syntax error: unexpected name

修复:
- 将所有中文双引号 "" 替换为英文单引号 ''
- 影响行:287, 365-369

错误示例:
- 错误:"趋势市场"
- 正确:'趋势市场'

🤖 Generated with Claude Code
2025-11-02 00:25:25 +08:00
ZhouYongyou
a58be23a29 fix: 修正盈亏百分比计算错误(未考虑杠杆)
问题:
- 旧算法只计算价格变化百分比,未考虑杠杆倍数
- 例:10倍杠杆,价格涨1% → 显示+1%(错误),实际应该是+10%
- 导致 AI 收到错误的盈亏数据,影响决策

修复:
- 使用实际盈亏除以保证金计算百分比
- 公式:pnlPct = (unrealizedPnl / marginUsed) * 100
- 优点:
  ✓ 考虑杠杆倍数
  ✓ 使用 API 提供的实际盈亏(含手续费、资金费率)
  ✓ 更准确反映真实盈亏百分比

示例对比:
- 入场:100,000,当前:101,000(+1%),10倍杠杆
- 旧算法:显示 +1%(错误)
- 新算法:显示 +10%(正确)

感谢用户反馈 @1711z

🤖 Generated with Claude Code
2025-11-02 00:23:59 +08:00
Ember
8d77f15d4d fix(web): 更新主图像文件以改善视觉效果 2025-11-02 00:19:49 +08:00
Ember
b5d4ff0fc2 fix(web): 优化落地页内容—移除多余空行,简化图片组件,更新支持方列表 2025-11-02 00:17:19 +08:00
Z
f02c5df2b6 Merge branch 'tinkle-community:dev' into dev 2025-11-02 00:08:58 +08:00
Ember
28b7edbc5c style(web): 对齐币安风格—移除渐变/发光,固化深色/面板色,新增 header 样式,按钮与卡片统一 2025-11-02 00:08:46 +08:00
ZhouYongyou
88a7055561 feat: 添加技术位优先止盈 + 追踪止损(阶段1)
解决问题:
- 固定百分比止盈经常在技术位前回撤
- 浮盈没有保护机制,从 +1.5% 回撤到止损

核心改进:
1. 技术位优先止盈:
   - 震荡策略:技术位 < 2% → 止盈设在技术位前 0.1%
   - 趋势策略:技术位 < 5% → 止盈设在技术位前 0.2%
   - 技术位识别:EMA20、最近高低点、整数关口

2. 追踪止损机制:
   - 震荡:浮盈 0.8% → 止损移到成本价,浮盈 1.2% → 止损移到 +0.5%
   - 趋势:浮盈 2% → 止损移到成本价,浮盈 5% → 止损移到 +2.5%
   - 价格接近技术位 → 主动平仓避免回撤

3. 分批止盈预留:
   - 趋势策略:技术位在 5-10% → 分两批止盈
   - 为阶段2分批止盈做准备

预期效果:
- 减少"快到止盈就回撤"的情况
- 锁定浮盈,避免全部回撤
- 提高实际盈亏比

实施方式:纯提示词改进,基于已有数据(EMA20、K线高低点)

🤖 Generated with Claude Code
2025-11-02 00:03:20 +08:00
SkywalkerJi
6c03d247e1 Docker port mapping prompts. 2025-11-02 00:03:19 +08:00
Ember
e6fc60c464 fix(web): 去除残留 undefined(文本最终清洗)并将启动命令改为顶层 README 流程(start.sh + compose) 2025-11-02 00:01:38 +08:00
Ember
493fd559dc fix(web): Typewriter 更稳健—charAt防越界、sanitizedLines防空值、pre-wrap防换行丢失 2025-11-01 23:58:48 +08:00
Ember
f5dfb1bb61 feat(web): Typewriter 优化(修复 undefined、矩阵绿样式、降低速度)并更新启动指令为 README 前端开发流程 2025-11-01 23:53:17 +08:00
Ember
8c57b6b1e7 feat(web): 落地页“启动输出”加入打字机效果(Typewriter) 2025-11-01 23:45:27 +08:00
Ember
9d4e86cbf5 feat(web): 新增 Landing 页面与 UI 优化\n\n- 新增 LandingPage、CryptoFeatureCard 等组件\n- 登录/注册页面与样式优化\n- 静态资源 images/main.png 2025-11-01 23:36:28 +08:00
tinkle-community
775446d939 Merge pull request #201 from SkywalkerJi/dev
Mapping the prompts folder in Docker.
2025-11-01 22:33:30 +08:00
SkywalkerJi
24a9a4b2a3 Merge remote-tracking branch 'refs/remotes/origin/dev' into dev 2025-11-01 22:31:09 +08:00
SkywalkerJi
cee927a46d Docker port mapping prompts. 2025-11-01 22:28:49 +08:00
Z
e51cbf4092 Merge branch 'tinkle-community:dev' into dev 2025-11-01 21:03:57 +08:00
ZhouYongyou
e708c99db2 feat: 添加自适应双策略系统(震荡 + 趋势)
根据 ADAPTIVE_STRATEGY_DESIGN.md 方案 A(简单版)实现:

新增功能:
1. 市场状态判断(3个指标交叉验证):
   - 多时间框架一致性(15m/1h/4h MACD 方向)
   - 价格波动率(最近 10 根 K线波动幅度)
   - 买卖压力极端值(BuySellRatio 连续性)

2. 双策略系统:
   - 策略 A(震荡交易):止盈 1-2%,止损 0.8-1%,盈亏比 1:1.5-1:2
   - 策略 B(趋势跟随):止盈 5-10%,止损 1.5-2%,盈亏比 1:3-1:5

3. 策略选择指导:AI 必须在思维链中明确说明市场状态判断和策略选择

改进效果:
- 让 AI 根据市场状态动态调整止盈止损
- 震荡市场快进快出,趋势市场让利润奔跑
- 预期提升胜率和盈亏比,降低最大回撤

实施方式:纯提示词改进(无代码变更),耗时 30 分钟

🤖 Generated with Claude Code
2025-11-01 20:40:31 +08:00
tinkle-community
17c927b04a Merge pull request #194 from Icyoung/dev
Remote auth for prompt templates
2025-11-01 20:34:32 +08:00
tinkle-community
37dff0b3f0 Merge pull request #192 from Icyoung/dev
Dev Bug fix
2025-11-01 20:28:06 +08:00
icy
2cc91d1701 Remote auth for prompt templates 2025-11-01 20:25:55 +08:00
Z
4fbb4ecea5 Merge branch 'dev' into dev 2025-11-01 20:17:20 +08:00