[AI tradingOS] AI决策引擎 | decision/engine.go | 交易哲学prompts
AI决策引擎作为nofx的智能中枢,通过结合实时市场数据、账户状态和预设交易哲学,生成经过思维链验证的标准化交易指令。这种透明化、结构化的决策过程,使系统既能充分利用AI的分析能力,又能确保风险可控。现在nofx已具备完整的"思考-执行"能力,下一章我们将探讨认证与用户管理,了解如何安全地管控这套强大系统。
第4章:AI决策引擎
欢迎回来
通过前几章的积累,nofx已具备关键能力:第1章赋予它"记忆db"功能,第2章装备了"市场耳目class",第3章则提供了"交易执行手adapter"
但还缺最关键的一环:如何做决策? 当市场数据完备、工具就位时,什么机制告诉它何时买入、何时卖出或何时按兵不动?
AI的"大脑":智能交易决策
设想一位超级智能厨师:掌握无数菜谱、通晓所有食材、配备顶级厨具。但在开火前,它需要根据现有食材、用餐时间和你的口味决定烹饪什么。
在nofx中,AI决策引擎正是这样的"大脑"。它将原始市场数据、账户信息和预设规则转化为可执行的交易策略,通过"思考"市场状况来指导交易接口操作。
核心场景:“现在该交易吗?”
假设AI交易器运行时不断自问:“基于当前所有信息,应该开新仓、平现有仓还是观望?”
这是个复杂问题!AI需要综合考量:
- 比特币当前价格(来自市场数据系统)
- 比特币趋势方向(来自市场数据系统)
- 账户可用资金(来自数据库与配置)
- 现有持仓盈亏状况(来自数据库与配置)
- 交易规则约束(即后文将介绍的"提示词")
决策引擎消化这些输入后,会输出明确指令:“以特定参数做多BTCUSDT”、“持有现仓"或"暂时观望”。
核心机制解析
1. 输入数据:市场与账户全景
决策引擎需要完整的市场画像和账户状态:
- 市场数据:来自第2章的实时价格、多周期K线、EMA/MACD/RSI等技术指标,以及合约特有的未平仓量和资金费率
- 账户信息:来自第1章的总资产、可用余额、现有持仓及其盈亏
- 交易哲学(提示词):用户为AI设定的行为准则
2. 交易哲学:AI的行为准则
AI并非随机决策,而是遵循提示词(prompts)的详细指引。提示词本质上是告诉AI:
- 核心目标(如风险调整后收益最大化)
- 可采取的行动(开多/开空/平仓/观望)
- 仓位规模计算方法
- 关键的开平仓条件
- 风险管理规则(如止损止盈设置)
- 市场数据解读方式
nofx采用DeepSeek等先进AI模型,通过精心设计的提示词引导其决策过程。
提示词示例:
# 核心目标
通过系统化、纪律性交易实现风险调整后收益最大化
# 交易原则
- 本金优先:保护资本比追求收益更重要
- 质量至上:少量高确定性交易优于大量低确定性交易
# 开仓条件(必须全部满足)
- 仅当以下条件成立时做多:
- BTCUSDT的MACD呈正值(看涨动量)
- BTCUSDT的RSI低于40(超卖或复苏中)
- 4小时K线显示明确上涨趋势(价格>EMA20)
完整提示词文件(prompts/default.txt)包含更复杂的策略逻辑:
你是专业的加密货币交易AI,在合约市场进行自主交易。
# 核心目标
最大化夏普比率(Sharpe Ratio)
夏普比率 = 平均收益 / 收益波动率
这意味着:
- 高质量交易(高胜率、大盈亏比)→ 提升夏普
- 稳定收益、控制回撤 → 提升夏普
- 耐心持仓、让利润奔跑 → 提升夏普
- 频繁交易、小盈小亏 → 增加波动,严重降低夏普
- 过度交易、手续费损耗 → 直接亏损
- 过早平仓、频繁进出 → 错失大行情
关键认知: 系统每3分钟扫描一次,但不意味着每次都要交易!
大多数时候应该是 `wait` 或 `hold`,只在极佳机会时才开仓。
# 交易哲学 & 最佳实践
## 核心原则:
资金保全第一:保护资本比追求收益更重要
纪律胜于情绪:执行你的退出方案,不随意移动止损或目标
质量优于数量:少量高信念交易胜过大量低信念交易
适应波动性:根据市场条件调整仓位
尊重趋势:不要与强趋势作对
## 常见误区避免:
过度交易:频繁交易导致费用侵蚀利润
复仇式交易:亏损后立即加码试图"翻本"
分析瘫痪:过度等待完美信号,导致失机
忽视相关性:BTC常引领山寨币,须优先观察BTC
过度杠杆:放大收益同时放大亏损
#交易频率认知
量化标准:
- 优秀交易员:每天2-4笔 = 每小时0.1-0.2笔
- 过度交易:每小时>2笔 = 严重问题
- 最佳节奏:开仓后持有至少30-60分钟
自查:
如果你发现自己每个周期都在交易 → 说明标准太低
如果你发现持仓<30分钟就平仓 → 说明太急躁
# 开仓标准(严格)
只在强信号时开仓,不确定就观望。
你拥有的完整数据:
- 原始序列:3分钟价格序列(MidPrices数组) + 4小时K线序列
- 技术序列:EMA20序列、MACD序列、RSI7序列、RSI14序列
- 资金序列:成交量序列、持仓量(OI)序列、资金费率
- 筛选标记:AI500评分 / OI_Top排名(如果有标注)
分析方法(完全由你自主决定):
- 自由运用序列数据,你可以做但不限于趋势分析、形态识别、支撑阻力、技术阻力位、斐波那契、波动带计算
- 多维度交叉验证(价格+量+OI+指标+序列形态)
- 用你认为最有效的方法发现高确定性机会
- 综合信心度 ≥ 75 才开仓
避免低质量信号:
- 单一维度(只看一个指标)
- 相互矛盾(涨但量萎缩)
- 横盘震荡
- 刚平仓不久(<15分钟)
# 夏普比率自我进化
每次你会收到夏普比率作为绩效反馈(周期级别):
夏普比率 < -0.5 (持续亏损):
→ 停止交易,连续观望至少6个周期(18分钟)
→ 深度反思:
• 交易频率过高?(每小时>2次就是过度)
• 持仓时间过短?(<30分钟就是过早平仓)
• 信号强度不足?(信心度<75)
夏普比率 -0.5 ~ 0 (轻微亏损):
→ 严格控制:只做信心度>80的交易
→ 减少交易频率:每小时最多1笔新开仓
→ 耐心持仓:至少持有30分钟以上
夏普比率 0 ~ 0.7 (正收益):
→ 维持当前策略
夏普比率 > 0.7 (优异表现):
→ 可适度扩大仓位
关键: 夏普比率是唯一指标,它会自然惩罚频繁交易和过度进出。
#决策流程
1. 分析夏普比率: 当前策略是否有效?需要调整吗?
2. 评估持仓: 趋势是否改变?是否该止盈/止损?
3. 寻找新机会: 有强信号吗?多空机会?
4. 输出决策: 思维链分析 + JSON
# 仓位大小计算
**重要**:`position_size_usd` 是**名义价值**(包含杠杆),非保证金需求。
**计算步骤**:
1. **可用保证金** = Available Cash × 0.88(预留12%给手续费、滑点与清算保证金缓冲)
2. **名义价值** = 可用保证金 × Leverage
3. **position_size_usd** = 名义价值(JSON中填写此值)
4. **实际币数** = position_size_usd / Current Price
**示例**:可用资金 $500,杠杆 5x
- 可用保证金 = $500 × 0.88 = $440
- position_size_usd = $440 × 5 = **$2,200** ← JSON填此值
- 实际占用保证金 = $440,剩余 $60 用于手续费、滑点与清算保护
---
记住:
- 目标是夏普比率,不是交易频率
- 宁可错过,不做低质量交易
- 风险回报比1:3是底线
3. 思维链推理:透明化决策过程
与直接输出结论不同,AI决策引擎会生成详细的**思维链(CoT)**文本,如同"自言自语":
- “BTCUSDT的3分钟MACD呈正值,显示看涨动量”
- “但4小时RSI超过70,预示可能回调”
- “当前ETHUSDT持仓盈利5%,应考虑移动止损保护利润”
- “综合信号矛盾,选择等待更明确机会”
这种透明化推理对理解AI逻辑、调试行为和改进提示词至关重要。
4. 结构化输出:可执行的交易指令
完成CoT推理后,引擎输出nofx可直接理解的标准化交易指令:
简化输出示例:
{
"symbol": "BTCUSDT",
"action": "open_long",
"leverage": 10,
"position_size_usd": 1000,
"stop_loss": 60000,
"take_profit": 65000,
"reasoning": "多周期K线显示强劲看涨趋势且成交量放大"
}
每个指令都是包含交易对、操作类型、杠杆、仓位规模等完整参数的Decision对象。
决策引擎调用
主入口函数decision.GetFullDecision()封装了整个决策流程:
func getAIDecision() {
// 1. 构建决策上下文
ctx := &decision.Context{
Account: decision.AccountInfo{
TotalEquity: 10000.0,
AvailableBalance: 9000.0
},
CandidateCoins: []decision.CandidateCoin{
{Symbol: "BTCUSDT"}, {Symbol: "ETHUSDT"}
}
}
// 2. 获取AI决策
fullDecision, _ := decision.GetFullDecision(ctx, mcpClient)
// 3. 输出思维链和交易指令
fmt.Printf("思维链:\n%s\n", fullDecision.CoTTrace)
for _, d := range fullDecision.Decisions {
fmt.Printf("操作:%s 交易对:%s 理由:%s\n",
d.Action, d.Symbol, d.Reasoning)
}
}
底层实现
核心工作流程

关键代码
1. 决策中枢(decision/engine.go)
func GetFullDecision(ctx *Context) (*FullDecision, error) {
// 1. 获取市场数据
fetchMarketDataForContext(ctx)
// 2. 构建系统提示词(交易规则)和用户提示词(实时数据)
systemPrompt := buildSystemPrompt("default")
userPrompt := buildUserPrompt(ctx)
// 3. 调用AI模型
aiResponse := mcpClient.CallWithMessages(systemPrompt, userPrompt)
// 4. 解析响应
return parseFullDecisionResponse(aiResponse)
}
2. 提示词管理(decision/prompt_manager.go)
func GetPromptTemplate(name string) (*PromptTemplate, error) {
// 从prompts目录加载对应名称的模板文件
content, _ := os.ReadFile(fmt.Sprintf("prompts/%s.txt", name))
return &PromptTemplate{Name: name, Content: string(content)}, nil
}
3. AI模型调用(mcp/client.go)
func (c *Client) CallWithMessages(system, user string) (string, error) {
// 构造符合AI模型API要求的请求格式
request := map[string]interface{}{
"model": c.Model,
"messages": []map[string]string{
{"role": "system", "content": system},
{"role": "user", "content": user},
}
}
// 发送HTTP请求并返回响应
}
4. 指令验证(decision/engine.go)
func validateDecision(d *Decision) error {
if d.Action == "open_long" {
// 检查杠杆是否合规
if d.Leverage > maxLeverage { return errOverLeverage }
// 检查风险回报比是否≥1:3
if calcRiskRewardRatio(d) < 3 { return errPoorRiskReward }
}
return nil
}
小结
AI决策引擎作为nofx的智能中枢,通过结合实时市场数据、账户状态和预设交易哲学,生成经过思维链验证的标准化交易指令。
这种透明化、结构化的决策过程,使系统既能充分利用AI的分析能力,又能确保风险可控。
现在nofx已具备完整的"思考-执行"能力,下一章我们将探讨认证与用户管理,了解如何安全地管控这套强大系统。
更多推荐



所有评论(0)