从Vibe-Trading学交易Skill:完整模板与Prompt工程

Vibe-Trading 这个项目今天在 GitHub 上新增了近万星,核心思路是用 LLM 封装一个「有感觉的交易代理」——不是简单预测涨跌,而是让模型综合市场情绪、技术指标和新闻,给出带理由的交易建议。这听着很酷,但如果你只想拿它跑个 demo,那几天后 star 数就跟你无关了。真正有价值的是:把这种智能体逻辑拆成可复用的 Skills,之后遇到任何需要判断的决策场景,你都能用同一套模板套上去。

本文不复述 Vibe-Trading 的代码细节(你去看仓库就行),我给你的是「如何自己写一个交易决策 Skill」的完整方法论,包括:

  • 一个可直接复制使用的 Prompt 模板
  • 差 Prompt vs 好 Prompt 的对比分析
  • 背后为什么有效
  • 3 种扩展变体
  • 完整的 SKILL.md 目录结构

读完你就能立刻在自己的项目里加上一个能跑的交易智能体。

structured prompt template for trading AI

1. 这个 Skill 解决什么具体问题

很多开发者想给交易系统加 AI 分析,但直接调 GPT 的 API 往往得到「这看起来像是个上涨趋势」「建议谨慎操作」这类模糊回答。问题出在 Prompt 没有结构化,导致模型回答不具备可执行性。

这个 TradeDecider Skill 要解决的是:给定实时市场数据,LLM 输出一个结构化的交易决策,包含操作方向、仓位比例、止损点位和推理过程。输出格式必须是 JSON,方便下游程序自动执行。

2. 触发条件和适用场景

触发条件:

  • 每隔 15 分钟(或你设定的时间窗口)获取最新 K 线数据(Open, High, Low, Close, Volume)
  • 当价格突破某个阈值或出现技术信号(如 RSI 超卖)时调用
  • 也可以手动请求:「分析 BTC/USDT 当前行情,给出交易建议」

适用场景:

  • 自动化交易机器人(需风控层兜底)
  • 作为辅助工具,给人类交易员提供建议
  • 多资产组合的快速筛选

3. 完整 Skill 结构(SKILL.md 示例)

这是我的 Skill 目录结构,符合主流 AI-Skills 规范:

text
1 2 3 4 5 6 7 8 9 10 11
TradeDecider/
├── SKILL.md          # 主描述文件,含元信息、触发、Prompt
├── prompt.md         # 核心 Prompt(可选,也可以内联)
├── tools/
│   ├── get_market_data.py   # 从交易所 API 拉取数据
│   └── parse_decision.py    # 解析 LLM JSON 输出,做后处理
├── examples/
│   ├── input.json            # 示例输入
│   └── output.json           # 示例输出
└── tests/
    └── test_trade_decider.py # 单元测试

SKILL.md 完整内容(可直接复制)

yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
# TradeDecider Skill

name: TradeDecider
version: 1.0.0
description: >
  根据实时市场数据,分析趋势和风险,输出结构化的交易决策。仅用于辅助建议,不构成投资建议。
author: your-name

triggers:
  - event: price_update
    schedule: "*/15 * * * *"
    condition: "abs(price_change_percent_15m) > 0.5"
  - event: manual_ask
    keywords: ["分析行情", "交易建议", "该不该买"]

prompt: |
  你是一个专业的加密货币交易分析师,擅长技术分析和风险管理。下面是当前市场数据(以JSON格式给出):

  {{ market_data }}

  请根据以下要求进行分析并输出 JSON:

  1. 趋势判断:看涨/看跌/震荡
  2. 操作建议:买入/卖出/持有/做空/做多
  3. 建议仓位比例:0-100% (表示占总资金的百分比)
  4. 止损价格:精确到小数点后2位
  5. 止盈价格:精确到小数点后2位
  6. 推理理由:不超过100字,包含具体指标引用

  输出格式必须严格如下,不要添加任何额外文字:

  {
    "trend": "看涨",
    "action": "买入",
    "position_percent": 30,
    "stop_loss": 51200.50,
    "take_profit": 53500.00,
    "reason": "RSI(14)从30回升到40,突破下行趋势线,成交量放大,建议轻仓买入。"
  }

  **约束**:
  - 如果条件不满足,输出 action 为 "持有",position_percent 为 0。
  - 止损价必须低于当前价(买入时)或高于当前价(卖出时)。
  - 仓位比例不宜超过50%(默认风控)。

4. 实际案例演示

差 Prompt vs 好 Prompt

差 Prompt

text
1
请你分析一下现在的比特币行情,告诉我该怎么做。

好 Prompt(上面的完整 Prompt)。

对比效果

维度 差 Prompt 好 Prompt
输出一致性 每次不同格式,甚至带解释 严格 JSON,机器可解析
可执行性 模糊建议 明确的 price 和 percent
风控 无约束,可能建议全仓 强制仓位≤50%,止损逻辑
推理质量 幻想理由 必须引用指标

Python 调用示例

python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
import openai
import json

def trade_decision(market_data: dict) -> dict:
    full_prompt = f"""你是一个专业的加密货币交易分析师,擅长技术分析和风险管理。下面是当前市场数据(以JSON格式给出):

{json.dumps(market_data)}

请根据以下要求进行分析并输出 JSON:

1. 趋势判断:看涨/看跌/震荡
2. 操作建议:买入/卖出/持有/做空/做多
3. 建议仓位比例:0-100% (表示占总资金的百分比)
4. 止损价格:精确到小数点后2位
5. 止盈价格:精确到小数点后2位
6. 推理理由:不超过100字,包含具体指标引用

输出格式必须严格如下,不要添加任何额外文字:

{{
    "trend": "看涨",
    "action": "买入",
    "position_percent": 30,
    "stop_loss": 51200.50,
    "take_profit": 53500.00,
    "reason": "RSI(14)从30回升到40,突破下行趋势线,成交量放大,建议轻仓买入。"
}}

**约束**:
- 如果条件不满足,输出 action 为 "持有",position_percent 为 0。
- 止损价必须低于当前价(买入时)或高于当前价(卖出时)。
- 仓位比例不宜超过50%(默认风控)。"""
    
    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=[{"role": "user", "content": full_prompt}],
        temperature=0.2
    )
    result = json.loads(response.choices[0].message.content)
    return result

# 从交易所获取实时数据
market_data = {
    "symbol": "BTC/USDT",
    "current_price": 52300.50,
    "open_24h": 51000.00,
    "high_24h": 53000.00,
    "low_24h": 50000.00,
    "volume_24h": 15000.5,
    "rsi_14": 42.3,
    "ma_7": 51800,
    "ma_25": 51500
}

decision = trade_decision(market_data)
print(decision)
# 输出示例:{'trend': '震荡', 'action': '持有', 'position_percent': 0, ...}

5. 原理:为什么这种 Prompt 有效

  1. 角色设定:明确身份(分析师)缩小模型的知识分布,使其从金融分析角度回答,而不是通用闲聊。
  2. 输入格式化:结构化数据替代自然语言描述,减少理解偏差。模型在JSON格式上训练充分,能准确提取数字。
  3. 输出格式约束:强制JSON且给出示例,消除格式漂移。使用低 temperature(0.2)进一步压缩随机性。
  4. 推理理由要求引用指标:基于数据而非幻觉。尽管LLM仍可能编造数字,但要求具体指标名(如RSI, MA)可以暴露出错误(若指标不存在输出会错,但仍比没有强)。
  5. 风控约束:硬性限制仓位≤50%、止损逻辑,即使模型判断失误,资金损失可控。

6. 复用和组合技巧

这个 TradeDecider 可以和其他 Skill 组合:

  • RiskManager Skill:接收 TradeDecider 的决策,结合账户余额、杠杆倍数、历史胜率,输出执行前的最终调整。
  • NewsAnalyzer Skill:分析最新新闻情绪,输出 sentiment 因子,注入到 TradeDecider 的 market_data 中(增加一个 sentiment 字段)。
  • Backtester Skill:用历史数据调用 TradeDecider,记录决策,对比真实走势,输出胜率报告。

变体1:股票市场版

只需修改 SKILL.md 中的角色描述和指标名称(如把 RSI 换成 MACD、PE),同时调整仓位比例上限(股票可允许更高),价格精度更改为小数点后2位。

变体2:加密货币全自动交易(配合API)

在 tools/ 下增加 execute_order.py,将决策中的 action 和 position_percent 映射到交易所的限价单。注意添加风控检查(如最大损失限制)。

变体3:多时间框架分析

把 market_data 扩充为4个时间框架的数据(15m,1h,4h,1d),在 Prompt 中要求模型综合考虑。输出时需注明参考的时间框架。

7. 注意事项

  • LLM 的交易决策不可靠,永远不要直接用于真实资金。这个 Skill 只适合模拟、辅助研究或纯教育。
  • 成本:每次调用 GPT-4 约 $0.02-0.05,15分钟频率一天约 $5-10。建议先用 GPT-3.5-turbo 测试,或本地部署小模型。
  • 数据更新:必须确保 market_data 新鲜,过时的数据会导致错误判断。

AI trading skill trigger conditions diagram

本文提供的 SKILL.md 模板可以直接迁移到任何判断类场景(医疗初诊、客服分类、代码审查),只需要替换领域知识和约束条件。不要只 star 别人的项目,自己动手封装一个 Skill。