diff --git a/DYNAMIC_TP_SL_PROPOSAL.md b/DYNAMIC_TP_SL_PROPOSAL.md new file mode 100644 index 00000000..b34ccd22 --- /dev/null +++ b/DYNAMIC_TP_SL_PROPOSAL.md @@ -0,0 +1,325 @@ +# 動態止盈止損功能設計方案 + +## 🔴 問題描述 + +**用戶反饋**: +> 还有动态止盈止损我建议你给ai decisions里加个adjust tp sl 或者给close加个quantity 不然应该是没有作用 + +**根本原因**: +- 策略模板(adaptive.txt)提到"追蹤止損"功能: + - 浮盈達到 0.8% → 止損移到成本價(保證不虧) + - 浮盈達到 1.2% → 止損移到 +0.5%(鎖定一半利潤) +- 但 AI 無法執行這些操作,因為 Decision 結構**不支持**: + - ❌ 調整現有持倉的止盈/止損 + - ❌ 部分平倉(分批止盈) + +## 📊 當前限制 + +### Decision 結構(decision/engine.go:72-82) +```go +type Decision struct { + Symbol string `json:"symbol"` + Action string `json:"action"` // "open_long", "open_short", "close_long", "close_short", "hold", "wait" + Leverage int `json:"leverage,omitempty"` + PositionSizeUSD float64 `json:"position_size_usd,omitempty"` + StopLoss float64 `json:"stop_loss,omitempty"` // ⚠️ 只在開倉時有效 + TakeProfit float64 `json:"take_profit,omitempty"` // ⚠️ 只在開倉時有效 + Confidence int `json:"confidence,omitempty"` + RiskUSD float64 `json:"risk_usd,omitempty"` + Reasoning string `json:"reasoning"` +} +``` + +### 當前支持的 Actions +- `open_long` - 開多倉(有 stop_loss, take_profit) +- `open_short` - 開空倉(有 stop_loss, take_profit) +- `close_long` - 全部平多倉 +- `close_short` - 全部平空倉 +- `hold` - 持倉不動 +- `wait` - 觀望 + +--- + +## ✅ 解決方案 + +### 方案 A:添加新的 Action Types(推薦) + +#### 1. `adjust_stop_loss` - 調整止損 +```json +{ + "symbol": "BTCUSDT", + "action": "adjust_stop_loss", + "new_stop_loss": 100500.0, + "reasoning": "浮盈達到 1.5%,將止損移到成本價 (100500) 保證不虧" +} +``` + +#### 2. `adjust_take_profit` - 調整止盈 +```json +{ + "symbol": "BTCUSDT", + "action": "adjust_take_profit", + "new_take_profit": 102000.0, + "reasoning": "價格距離 EMA20 僅 0.3%,將止盈提前到 102000 避免回撤" +} +``` + +#### 3. `partial_close` - 部分平倉 +```json +{ + "symbol": "BTCUSDT", + "action": "partial_close", + "close_percentage": 50, + "reasoning": "價格到達第一目標 104300,分批平倉 50%,剩餘持倉繼續追蹤" +} +``` + +### 方案 B:修改現有 close action(次選) + +給 `close_long` / `close_short` 添加 `quantity` 參數: +```json +{ + "symbol": "BTCUSDT", + "action": "close_long", + "quantity": 0.5, // 0.5 = 50%, 1.0 = 100%(預設) + "reasoning": "部分止盈" +} +``` + +--- + +## 🛠️ 實施步驟 + +### 步驟 1:修改 Decision 結構 + +**文件**: `decision/engine.go` + +```go +type Decision struct { + Symbol string `json:"symbol"` + Action string `json:"action"` + // Actions: "open_long", "open_short", "close_long", "close_short", + // "adjust_stop_loss", "adjust_take_profit", "partial_close", "hold", "wait" + + // 開倉參數 + Leverage int `json:"leverage,omitempty"` + PositionSizeUSD float64 `json:"position_size_usd,omitempty"` + StopLoss float64 `json:"stop_loss,omitempty"` + TakeProfit float64 `json:"take_profit,omitempty"` + + // 調整參數(新增) + NewStopLoss float64 `json:"new_stop_loss,omitempty"` // 用於 adjust_stop_loss + NewTakeProfit float64 `json:"new_take_profit,omitempty"` // 用於 adjust_take_profit + ClosePercentage float64 `json:"close_percentage,omitempty"` // 用於 partial_close (0-100) + + // 通用參數 + Confidence int `json:"confidence,omitempty"` + RiskUSD float64 `json:"risk_usd,omitempty"` + Reasoning string `json:"reasoning"` +} +``` + +### 步驟 2:實現 Action 執行邏輯 + +**文件**: `trader/auto_trader.go` 或新建 `trader/position_manager.go` + +```go +// 處理調整止損 +func (t *AutoTrader) adjustStopLoss(symbol string, newStopLoss float64) error { + // 1. 獲取當前持倉 + position := t.getPosition(symbol) + if position == nil { + return fmt.Errorf("持倉不存在") + } + + // 2. 調用交易所 API 修改止損單 + err := t.exchange.ModifyStopLoss(symbol, position.OrderID, newStopLoss) + if err != nil { + return err + } + + // 3. 更新本地持倉記錄 + position.StopLoss = newStopLoss + + log.Printf("✓ %s 止損已調整到 %.2f", symbol, newStopLoss) + return nil +} + +// 處理部分平倉 +func (t *AutoTrader) partialClose(symbol string, percentage float64) error { + // 1. 獲取當前持倉 + position := t.getPosition(symbol) + if position == nil { + return fmt.Errorf("持倉不存在") + } + + // 2. 計算平倉數量 + closeQty := position.Quantity * (percentage / 100.0) + + // 3. 執行市價平倉 + err := t.exchange.ClosePosition(symbol, closeQty) + if err != nil { + return err + } + + // 4. 更新本地持倉記錄 + position.Quantity -= closeQty + + log.Printf("✓ %s 部分平倉 %.1f%% (%.4f)", symbol, percentage, closeQty) + return nil +} +``` + +### 步驟 3:更新模板說明 + +**文件**: `prompts/adaptive.txt` + +在輸出格式部分添加: + +```markdown +## 可用的 Actions + +### 開倉 +- `open_long` / `open_short` - 開倉(必須指定 leverage, position_size_usd, stop_loss, take_profit) + +### 平倉 +- `close_long` / `close_short` - 全部平倉 +- `partial_close` - 部分平倉(指定 close_percentage: 0-100) + +### 調整持倉 +- `adjust_stop_loss` - 調整止損(指定 new_stop_loss) +- `adjust_take_profit` - 調整止盈(指定 new_take_profit) + +### 觀望 +- `hold` - 持倉不動 +- `wait` - 觀望 + +## 追蹤止損範例 + +```json +[ + { + "symbol": "BTCUSDT", + "action": "adjust_stop_loss", + "new_stop_loss": 100500, + "confidence": 85, + "reasoning": "浮盈達到 1.5%(目前價格 101500),將止損移到成本價 100500,保證不虧" + } +] +``` + +## 部分止盈範例 + +```json +[ + { + "symbol": "BTCUSDT", + "action": "partial_close", + "close_percentage": 50, + "confidence": 80, + "reasoning": "價格到達第一目標 104300(4h EMA20 前 0.2%),分批止盈 50%,剩餘倉位繼續持有" + } +] +``` +``` + +### 步驟 4:更新交易邏輯主循環 + +**文件**: `trader/auto_trader.go` - `executeTrades()` 函數 + +```go +func (t *AutoTrader) executeTrades(decisions []decision.Decision) { + for _, d := range decisions { + switch d.Action { + case "open_long", "open_short": + t.openPosition(d) + + case "close_long", "close_short": + t.closePosition(d.Symbol) + + case "adjust_stop_loss": + t.adjustStopLoss(d.Symbol, d.NewStopLoss) + + case "adjust_take_profit": + t.adjustTakeProfit(d.Symbol, d.NewTakeProfit) + + case "partial_close": + t.partialClose(d.Symbol, d.ClosePercentage) + + case "hold", "wait": + // 不操作 + + default: + log.Printf("⚠️ 未知的 action: %s", d.Action) + } + } +} +``` + +--- + +## 🧪 測試驗證 + +### 測試用例 1:追蹤止損 +1. 開多倉 BTCUSDT @ 100000,止損 99000,止盈 102000 +2. 價格上漲到 101500(浮盈 1.5%) +3. AI 決策:`adjust_stop_loss` → 100500(成本價) +4. 驗證:止損單已更新,即使回撤到 100500 也不會虧損 + +### 測試用例 2:部分止盈 +1. 持倉 BTCUSDT 多單 0.1 BTC +2. 價格到達第一目標 104300 +3. AI 決策:`partial_close` 50% +4. 驗證:平倉 0.05 BTC,剩餘 0.05 BTC 繼續持有 + +### 測試用例 3:錯誤處理 +1. AI 決策:`adjust_stop_loss` 但持倉不存在 +2. 驗證:記錄錯誤,不影響其他決策 + +--- + +## 📈 預期效果 + +### 優化前(當前狀態) +- AI 只能在開倉時設定止盈止損 +- 無法根據行情變化動態調整 +- "追蹤止損"策略無法執行 ❌ + +### 優化後 +- AI 可以根據浮盈動態移動止損 ✅ +- 可以分批止盈(第一目標平 50%,第二目標平剩餘)✅ +- 真正實現"讓利潤奔跑,限制虧損"✅ +- 提升夏普比率(減少回撤,鎖定利潤)✅ + +--- + +## 🔗 相關文件 + +- `decision/engine.go` - Decision 結構定義 +- `trader/auto_trader.go` - 交易執行邏輯 +- `prompts/adaptive.txt` - 策略模板(提到追蹤止損) +- `prompts/default.txt` - 基礎策略模板 + +--- + +## ⚠️ 風險提示 + +1. **交易所 API 支持**:需要確認 Binance/Hyperliquid 是否支持修改止損單 +2. **訂單管理**:需要追蹤止損單的 orderID,才能修改 +3. **錯誤處理**:如果修改失敗,需要回退或重試 +4. **日誌記錄**:所有調整操作都應該記錄到 decision_logger + +--- + +**優先級**: 🔴 High - 這是實現追蹤止損策略的必要功能 + +**預估工作量**: +- 修改 Decision 結構: 30 分鐘 +- 實現執行邏輯: 2-3 小時 +- 更新模板說明: 30 分鐘 +- 測試驗證: 1-2 小時 +- **總計**: 4-6 小時 + +--- + +**下一步**: 等待用戶確認方案後開始實施 diff --git a/decision/engine.go b/decision/engine.go index 0803ea05..02c79fbf 100644 --- a/decision/engine.go +++ b/decision/engine.go @@ -242,30 +242,24 @@ func buildSystemPrompt(accountEquity float64, btcEthLeverage, altcoinLeverage in templateName = "default" // 默认使用 default 模板 } - // 追踪模板是否成功加载(用于决定是否使用硬编码 fallback) - templateLoaded := false - template, err := GetPromptTemplate(templateName) if err != nil { // 如果模板不存在,记录错误并使用 default log.Printf("⚠️ 提示词模板 '%s' 不存在,使用 default: %v", templateName, err) template, err = GetPromptTemplate("default") if err != nil { - // 如果连 default 都不存在,将使用下方的硬编码策略 - log.Printf("❌ 无法加载任何提示词模板,将使用硬编码策略") - } else { - sb.WriteString(template.Content) - sb.WriteString("\n\n") - templateLoaded = true - log.Printf("✓ 使用 default 模板(fallback)") + // 如果连 default 都不存在,说明文件系统有严重问题 + log.Printf("❌ 致命错误:无法加载任何提示词模板,系统无法安全运行") + return "" // 返回空字符串,上层应该检测并停止交易 } + log.Printf("✓ 使用 default 模板(fallback)") } else { - sb.WriteString(template.Content) - sb.WriteString("\n\n") - templateLoaded = true log.Printf("✓ 使用 %s 模板", templateName) } + sb.WriteString(template.Content) + sb.WriteString("\n\n") + // 2. 硬约束(风险控制)- 动态生成(始终追加) sb.WriteString("# 硬约束(风险控制)\n\n") sb.WriteString("1. 风险回报比: 必须 ≥ 1:3(冒1%风险,赚3%+收益)\n") @@ -274,195 +268,7 @@ func buildSystemPrompt(accountEquity float64, btcEthLeverage, altcoinLeverage in accountEquity*0.8, accountEquity*1.5, altcoinLeverage, accountEquity*5, accountEquity*10, btcEthLeverage)) sb.WriteString("4. 保证金: 总使用率 ≤ 90%\n\n") - // 3. 硬编码策略(仅当模板加载失败时使用) - if !templateLoaded { - log.Printf("⚠️ 追加硬编码策略作为 fallback") - // 市场状态判断与策略选择 - sb.WriteString("# 市场状态判断(优先)\n\n") - sb.WriteString("在制定交易决策前,必须先判断当前市场状态:\n\n") - sb.WriteString("判断方法(多个指标交叉验证):\n\n") - sb.WriteString("1. 多时间框架一致性:\n") - sb.WriteString("- 检查 15m/1h/4h MACD 方向一致度\n") - sb.WriteString("- 3个时间框架方向一致 → 强趋势市场\n") - sb.WriteString("- 2个时间框架方向一致 → 弱趋势市场\n") - sb.WriteString("- 方向矛盾(15m上涨但1h下跌) → 震荡市场\n\n") - sb.WriteString("2. 价格波动率:\n") - sb.WriteString("- 最近 10 根 K线(高-低)/收盘价 > 3% → 趋势市场(大波动)\n") - sb.WriteString("- 最近 10 根 K线(高-低)/收盘价 < 1.5% → 震荡市场(小波动)\n\n") - sb.WriteString("3. 买卖压力极端值:\n") - sb.WriteString("- BuySellRatio > 0.75 连续 3 根以上 → 强趋势(多)\n") - sb.WriteString("- BuySellRatio < 0.25 连续 3 根以上 → 强趋势(空)\n") - sb.WriteString("- BuySellRatio 在 0.4-0.6 波动 → 震荡\n\n") - sb.WriteString("判断结论: 综合以上 3 个指标,判定当前市场状态为'趋势市场'或'震荡市场'\n\n") - - // 双策略系统 - sb.WriteString("# 双策略系统(根据市场状态选择)\n\n") - sb.WriteString("## 策略 A: 震荡交易(震荡市场时使用)\n\n") - sb.WriteString("策略定位: 专门做 BTC 震荡行情,快进快出,高胜率低盈亏比\n\n") - sb.WriteString("震荡区间识别:\n") - sb.WriteString("- 价格在15分钟/1小时 EMA20上下波动(±2-4%)\n") - sb.WriteString("- MACD 在零轴附近(-200到+200之间)\n") - sb.WriteString("- 多个时间框架方向不一致(如15m上涨但1h下跌)\n") - sb.WriteString("- RSI 在30-70区间反复震荡\n\n") - sb.WriteString("交易逻辑:\n") - sb.WriteString("- 区间下沿(RSI<35 或接近支撑) → 做多\n") - sb.WriteString("- 区间上沿(RSI>65 或接近压力) → 做空\n") - sb.WriteString("- 趋势行情(多时间框架共振,放量突破) → 立即止损\n\n") - sb.WriteString("止盈止损设置(震荡策略 - 技术位优先):\n\n") - sb.WriteString("核心原则:技术位 > 固定百分比(避免价格到技术位就回撤)\n\n") - sb.WriteString("1. 入场前分析技术位:\n") - sb.WriteString("- 做多:检查上方最近压力位(15m/1h EMA20、最近10根K线高点、整数关口)\n") - sb.WriteString("- 做空:检查下方最近支撑位(15m/1h EMA20、最近10根K线低点、整数关口)\n\n") - sb.WriteString("2. 止盈设置逻辑:\n") - sb.WriteString("- 如果技术位距离 < 2% → 止盈设在技术位前 0.1%(例:压力 101,200,止盈 101,100)\n") - sb.WriteString("- 如果技术位距离 > 2% → 使用固定 2% 止盈\n") - sb.WriteString("- 理由:价格很可能在技术位遇阻,提前止盈避免回撤\n\n") - sb.WriteString("3. 止损设置:\n") - sb.WriteString("- 固定 0.8-1%(紧密止损)\n\n") - sb.WriteString("4. 追踪止损(持仓中动态调整):\n") - sb.WriteString("- 浮盈达到 0.8% → 止损移到成本价(保证不亏)\n") - sb.WriteString("- 浮盈达到 1.2% → 止损移到 +0.5%(锁定一半利润)\n") - sb.WriteString("- 价格距离技术位 < 0.3% → 立即主动平仓(避免回撤)\n\n") - sb.WriteString("5. 示例(做多):\n") - sb.WriteString("- 入场:100,000,15m EMA20: 101,200(+1.2%)\n") - sb.WriteString("- 决策:止盈 101,100(技术位前 0.1%),而非 102,000\n") - sb.WriteString("- 持仓:价格到 101,000(+1.0%)→ 止损移到 100,000\n") - sb.WriteString("- 持仓:价格到 101,100(距离 EMA20 仅 0.1%)→ 立即平仓\n\n") - sb.WriteString("退出信号:\n") - sb.WriteString("- 多时间框架开始共振 → 市场转为趋势,立即止损\n\n") - - // 策略 B: 趋势跟随 - sb.WriteString("## 策略 B: 趋势跟随(趋势市场时使用)\n\n") - sb.WriteString("策略定位: 捕捉趋势行情,让利润奔跑,中等胜率高盈亏比\n\n") - sb.WriteString("趋势确认条件:\n") - sb.WriteString("- 多时间框架共振(15m/1h/4h MACD 方向一致)\n") - sb.WriteString("- 连续 2-3 根 K线放量(成交量 > 平均 1.5 倍)\n") - sb.WriteString("- 买卖压力极端(BuySellRatio >0.7 或 <0.3)\n") - sb.WriteString("- 价格突破关键位(EMA20)并回踩确认\n\n") - sb.WriteString("交易逻辑:\n") - sb.WriteString("- 突破后回踩入场(避免追高)\n") - sb.WriteString("- 顺势交易(多头趋势做多,空头趋势做空)\n") - sb.WriteString("- 持仓时间更长(至少 1-2 小时)\n\n") - sb.WriteString("止盈止损设置(趋势策略 - 技术位优先):\n\n") - sb.WriteString("核心原则:技术位 > 固定百分比,但给予更大空间\n\n") - sb.WriteString("1. 入场前分析技术位:\n") - sb.WriteString("- 做多:检查上方关键压力位(1h/4h EMA20、前高、整数关口)\n") - sb.WriteString("- 做空:检查下方关键支撑位(1h/4h EMA20、前低、整数关口)\n\n") - sb.WriteString("2. 止盈设置逻辑:\n") - sb.WriteString("- 如果技术位距离 < 5% → 止盈设在技术位前 0.2%\n") - sb.WriteString("- 如果技术位在 5-10% → 分两批止盈(第一批技术位,第二批 10%)\n") - sb.WriteString("- 如果技术位距离 > 10% → 使用追踪止损,让利润奔跑\n\n") - sb.WriteString("3. 止损设置:\n") - sb.WriteString("- 固定 1.5-2%(给足震荡空间)\n\n") - sb.WriteString("4. 追踪止损(持仓中动态调整):\n") - sb.WriteString("- 浮盈达到 2% → 止损移到成本价(保证不亏)\n") - sb.WriteString("- 浮盈达到 3% → 止损移到 +1%(锁定部分利润)\n") - sb.WriteString("- 浮盈达到 5% → 止损移到 +2.5%(让利润奔跑,但保护已有收益)\n") - sb.WriteString("- 价格距离技术位 < 0.5% → 考虑主动平仓或分批平仓\n\n") - sb.WriteString("5. 示例(做多):\n") - sb.WriteString("- 入场:100,000,4h EMA20: 104,500(+4.5%)\n") - sb.WriteString("- 决策:第一目标 104,300(技术位前),第二目标 110,000(+10%)\n") - sb.WriteString("- 持仓:价格到 102,000(+2%)→ 止损移到 100,000\n") - sb.WriteString("- 持仓:价格到 104,300(接近技术位)→ 主动平仓或分批平仓 50%\n\n") - sb.WriteString("退出信号:\n") - sb.WriteString("- 多时间框架方向开始矛盾 → 趋势减弱,获利离场\n") - sb.WriteString("- 成交量萎缩 + MACD 背离 → 趋势可能反转\n\n") - - // 策略选择指导 - sb.WriteString("## 策略选择指导\n\n") - sb.WriteString("必须在思维链中明确说明:\n") - sb.WriteString("1. 市场状态判断: '当前市场状态:震荡/趋势(理由:...)'\n") - sb.WriteString("2. 策略选择: '选择策略 A/B(理由:...)'\n") - sb.WriteString("3. 技术位分析: '上方压力位:101,200(15m EMA20),下方支撑位:99,500(最近低点)'\n") - sb.WriteString("4. 止盈止损: '止盈 101,100(技术位前 0.1%),止损 99,200(-0.8%)'\n") - sb.WriteString("5. 追踪止损计划: '浮盈 0.8% 时移动止损到成本价'\n\n") - sb.WriteString("重要提醒:\n") - sb.WriteString("- 价格很可能在技术位(EMA20、前高前低、整数关口)遇阻或反弹\n") - sb.WriteString("- 宁可少赚 0.5%,也不要从 +1.5% 回撤到止损\n") - sb.WriteString("- 持仓中主动调整止损,锁定利润\n\n") - - // === 交易频率认知 === - sb.WriteString("# ⏱️ 交易频率认知\n\n") - sb.WriteString("量化标准:\n") - sb.WriteString("- 优秀交易员:每天2-4笔 = 每小时0.1-0.2笔\n") - sb.WriteString("- 过度交易:每小时>2笔 = 严重问题\n") - sb.WriteString("- 最佳节奏:开仓后持有至少30-60分钟\n\n") - sb.WriteString("自查:\n") - sb.WriteString("如果你发现自己每个周期都在交易 → 说明标准太低\n") - sb.WriteString("如果你发现持仓<30分钟就平仓 → 说明太急躁\n\n") - - // === 开仓信号强度 === - sb.WriteString("# 🎯 开仓标准(严格)\n\n") - sb.WriteString("只在强信号时开仓,不确定就观望。\n\n") - sb.WriteString("你拥有的完整数据(专为震荡交易优化):\n\n") - sb.WriteString("📊 四个时间框架序列(每个包含最近10个数据点):\n") - sb.WriteString("1. 3分钟序列:实时价格 + 放量分析(当前价格 = 最后一根K线的收盘价)\n") - sb.WriteString(" - Mid prices, EMA20, MACD, RSI7, RSI14\n") - sb.WriteString(" - Volumes: 成交量序列(用于检测放量)\n") - sb.WriteString(" - BuySellRatios: 买卖压力比(>0.6多方强,<0.4空方强)\n") - sb.WriteString("2. 15分钟序列:短期震荡区间识别(覆盖最近2.5小时)\n") - sb.WriteString(" - Mid prices, EMA20, MACD, RSI7, RSI14\n") - sb.WriteString("3. 1小时序列:中期支撑压力确认(覆盖最近10小时)\n") - sb.WriteString(" - Mid prices, EMA20, MACD, RSI7, RSI14\n") - sb.WriteString("4. 4小时序列:大趋势预警(覆盖最近40小时)\n") - sb.WriteString(" - EMA20 vs EMA50, ATR, Volume, MACD, RSI14\n\n") - sb.WriteString("💰 资金数据:\n") - sb.WriteString("- 持仓量(OI)变化、资金费率、成交量对比\n\n") - sb.WriteString("🎯 震荡交易分析方法:\n\n") - sb.WriteString("1. 震荡区间识别:\n") - sb.WriteString("- 价格在15m/1h EMA20 上下±2-4%波动\n") - sb.WriteString("- RSI 在30-70区间反复,未出现持续超买/超卖\n") - sb.WriteString("- MACD 在零轴附近震荡,未出现明确金叉/死叉\n") - sb.WriteString("- 1h和4h时间框架方向不一致(矛盾 = 震荡)\n\n") - sb.WriteString("2. 买卖压力分析(3分钟放量检测):\n") - sb.WriteString("- 连续放量 = 最近2-3根3分钟K线成交量 > 平均成交量1.5倍\n") - sb.WriteString("- 买方力量:BuySellRatio > 0.6(主动买入占比 > 60%)\n") - sb.WriteString("- 卖方力量:BuySellRatio < 0.4(主动卖出占比 > 60%)\n") - sb.WriteString("- 放量+买压 → 可能向上突破,做多或止损空单\n") - sb.WriteString("- 放量+卖压 → 可能向下突破,做空或止损多单\n\n") - sb.WriteString("3. 入场信号(高胜率位置):\n") - sb.WriteString("- 区间下沿做多:RSI < 35 + 买卖压力比 > 0.5 + 价格接近15m EMA20下方\n") - sb.WriteString("- 区间上沿做空:RSI > 65 + 买卖压力比 < 0.5 + 价格接近15m EMA20上方\n") - sb.WriteString("- 综合信心度 ≥ 75 才开仓\n\n") - sb.WriteString("4. 止损信号(趋势突破,立即离场):\n") - sb.WriteString("- 多时间框架共振(15m/1h/4h方向一致)\n") - sb.WriteString("- 连续2根以上3分钟K线放量突破区间\n") - sb.WriteString("- MACD 突破零轴并加速\n\n") - sb.WriteString("避免低质量信号:\n") - sb.WriteString("- 单一维度(只看一个指标)\n") - sb.WriteString("- 区间中部交易(等待区间边界)\n") - sb.WriteString("- 刚平仓不久(<10分钟)\n") - sb.WriteString("- 无买卖压力确认的入场\n\n") - - // === 夏普比率自我进化 === - sb.WriteString("# 🧬 夏普比率自我进化\n\n") - sb.WriteString("每次你会收到夏普比率作为绩效反馈(周期级别):\n\n") - sb.WriteString("夏普比率 < -0.5 (持续亏损):\n") - sb.WriteString(" → 🛑 停止交易,连续观望至少6个周期(18分钟)\n") - sb.WriteString(" → 🔍 深度反思:\n") - sb.WriteString(" • 交易频率过高?(每小时>2次就是过度)\n") - sb.WriteString(" • 持仓时间过短?(<30分钟就是过早平仓)\n") - sb.WriteString(" • 信号强度不足?(信心度<75)\n") - sb.WriteString(" • 是否在做空?(单边做多是错误的)\n\n") - sb.WriteString("夏普比率 -0.5 ~ 0 (轻微亏损):\n") - sb.WriteString(" → ⚠️ 严格控制:只做信心度>80的交易\n") - sb.WriteString(" → 减少交易频率:每小时最多1笔新开仓\n") - sb.WriteString(" → 耐心持仓:至少持有30分钟以上\n\n") - sb.WriteString("夏普比率 0 ~ 0.7 (正收益):\n") - sb.WriteString(" → ✅ 维持当前策略\n\n") - sb.WriteString("夏普比率 > 0.7 (优异表现):\n") - sb.WriteString(" → 🚀 可适度扩大仓位\n\n") - sb.WriteString("关键: 夏普比率是唯一指标,它会自然惩罚频繁交易和过度进出。\n\n") - - // === 决策流程 === - sb.WriteString("# 📋 决策流程\n\n") - sb.WriteString("1. 分析夏普比率: 当前策略是否有效?需要调整吗?\n") - sb.WriteString("2. 评估持仓: 趋势是否改变?是否该止盈/止损?\n") - sb.WriteString("3. 寻找新机会: 有强信号吗?多空机会?\n") - sb.WriteString("4. 输出决策: 思维链分析 + JSON\n\n") - } // 结束 if !templateLoaded 区块 - - // 4. 输出格式 - 动态生成(始终追加) + // 3. 输出格式 - 动态生成(始终追加) sb.WriteString("#输出格式\n\n") sb.WriteString("第一步: 思维链(纯文本)\n") sb.WriteString("简洁分析你的思考过程\n\n")