Skip to content

Commit a2411d2

Browse files
the-dev-zclaude
andcommitted
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 <[email protected]>
1 parent b908fac commit a2411d2

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

decision/engine.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -242,34 +242,43 @@ func buildSystemPrompt(accountEquity float64, btcEthLeverage, altcoinLeverage in
242242
templateName = "default" // 默认使用 default 模板
243243
}
244244

245+
// 追踪模板是否成功加载(用于决定是否使用硬编码 fallback)
246+
templateLoaded := false
247+
245248
template, err := GetPromptTemplate(templateName)
246249
if err != nil {
247250
// 如果模板不存在,记录错误并使用 default
248251
log.Printf("⚠️ 提示词模板 '%s' 不存在,使用 default: %v", templateName, err)
249252
template, err = GetPromptTemplate("default")
250253
if err != nil {
251-
// 如果连 default 都不存在,使用内置的简化版本
252-
log.Printf("❌ 无法加载任何提示词模板,使用内置简化版本")
253-
sb.WriteString("你是专业的加密货币交易AI。请根据市场数据做出交易决策。\n\n")
254+
// 如果连 default 都不存在,将使用下方的硬编码策略
255+
log.Printf("❌ 无法加载任何提示词模板,将使用硬编码策略")
254256
} else {
255257
sb.WriteString(template.Content)
256258
sb.WriteString("\n\n")
259+
templateLoaded = true
260+
log.Printf("✓ 使用 default 模板(fallback)")
257261
}
258262
} else {
259263
sb.WriteString(template.Content)
260264
sb.WriteString("\n\n")
265+
templateLoaded = true
266+
log.Printf("✓ 使用 %s 模板", templateName)
261267
}
262268

263-
// 2. 硬约束(风险控制)- 动态生成
269+
// 2. 硬约束(风险控制)- 动态生成(始终追加)
264270
sb.WriteString("# 硬约束(风险控制)\n\n")
265271
sb.WriteString("1. 风险回报比: 必须 ≥ 1:3(冒1%风险,赚3%+收益)\n")
266272
sb.WriteString("2. 最多持仓: 3个币种(质量>数量)\n")
267273
sb.WriteString(fmt.Sprintf("3. 单币仓位: 山寨%.0f-%.0f U(%dx杠杆) | BTC/ETH %.0f-%.0f U(%dx杠杆)\n",
268274
accountEquity*0.8, accountEquity*1.5, altcoinLeverage, accountEquity*5, accountEquity*10, btcEthLeverage))
269275
sb.WriteString("4. 保证金: 总使用率 ≤ 90%\n\n")
270276

271-
// 市场状态判断与策略选择
272-
sb.WriteString("# 市场状态判断(优先)\n\n")
277+
// 3. 硬编码策略(仅当模板加载失败时使用)
278+
if !templateLoaded {
279+
log.Printf("⚠️ 追加硬编码策略作为 fallback")
280+
// 市场状态判断与策略选择
281+
sb.WriteString("# 市场状态判断(优先)\n\n")
273282
sb.WriteString("在制定交易决策前,必须先判断当前市场状态:\n\n")
274283
sb.WriteString("判断方法(多个指标交叉验证):\n\n")
275284
sb.WriteString("1. 多时间框架一致性:\n")
@@ -451,8 +460,9 @@ func buildSystemPrompt(accountEquity float64, btcEthLeverage, altcoinLeverage in
451460
sb.WriteString("2. 评估持仓: 趋势是否改变?是否该止盈/止损?\n")
452461
sb.WriteString("3. 寻找新机会: 有强信号吗?多空机会?\n")
453462
sb.WriteString("4. 输出决策: 思维链分析 + JSON\n\n")
463+
} // 结束 if !templateLoaded 区块
454464

455-
// 3. 输出格式 - 动态生成
465+
// 4. 输出格式 - 动态生成(始终追加)
456466
sb.WriteString("#输出格式\n\n")
457467
sb.WriteString("第一步: 思维链(纯文本)\n")
458468
sb.WriteString("简洁分析你的思考过程\n\n")

0 commit comments

Comments
 (0)