# 📖 NoFx Prompt 编写指南
**版本**: v1.0
**更新日期**: 2025-01-09
**适用系统版本**: NoFx v0.x+
---
## 📚 目录
- [🚀 快速开始](#-快速开始5分钟)
- [💡 核心概念](#-核心概念)
- [📋 可用字段参考](#-可用字段参考)
- [⚖️ 系统约束](#️-系统约束)
- [📦 官方模板库](#-官方模板库)
- [✅ 质量检查清单](#-质量检查清单)
- [❓ 常见问题与最佳实践](#-常见问题与最佳实践)
- [🎓 高级话题](#-高级话题)
---
## 🎯 推荐学习路径
**新手用户**: 快速开始 → 官方模板 → 质量检查
**进阶用户**: 核心概念 → 字段参考 → 系统约束 → 常见错误
**高级用户**: 高级话题 → 模式3 → 调试指南
---
## 🚀 快速开始(5分钟)
### 什么是 Prompt?
Prompt 是你给 AI 交易员的"工作指令",决定了 AI 如何分析市场和做出交易决策。
### 三种使用方式
#### 方式1:使用官方模板(推荐新手)
**步骤**:
1. 选择一个官方模板([保守型](#保守型策略) / [平衡型](#平衡型策略) / [激进型](#激进型策略))
2. 复制内容到 `prompts/default.txt`
3. 重启系统,开始交易
**适合**: 新手用户,想快速开始
**耗时**: 2分钟
#### 方式2:在官方模板基础上添加个性化策略(推荐)
**步骤**:
1. 保持 `prompts/default.txt` 不变
2. 在 Web 界面的"自定义 Prompt"中添加你的策略
3. **关闭** "覆盖默认提示词" 开关(`override_base_prompt = false`)
**效果说明**:
```
最终提示词 = 官方基础策略(风控+格式) + 你的自定义策略
↑ ↑
系统保证安全 你的交易想法
```
**适合**: 进阶用户,想保留风控但加入自己的想法
**耗时**: 10-30分钟
#### 方式3:完全自定义(高级)
**步骤**:
1. 编写完整的 Prompt(包含所有风控规则)
2. **开启** "覆盖默认提示词" 开关(`override_base_prompt = true`)
3. ⚠️ 需要自行负责所有风控和输出格式
**效果说明**:
```
最终提示词 = 你的自定义策略(完全替换)
↑
你需要自己保证安全和格式正确
```
**重要警告**:
- ❌ 开启后,系统不会自动添加风控规则
- ❌ 输出格式错误会导致交易失败
- ⚠️ 仅适合完全理解系统机制的高级用户
**适合**: 高级用户,完全理解系统机制
**耗时**: 1-2小时
### 立即开始
👉 **新手推荐**: 跳转到 [官方模板库](#-官方模板库),选择一个模板开始
👉 **进阶优化**: 继续阅读 [可用字段参考](#-可用字段参考)
👉 **高级定制**: 阅读 [完全自定义指南](#模式3-完全自定义)
---
## 💡 核心概念
### Prompt 的工作原理
NoFx 每3分钟会构建一个包含市场数据的消息发送给 AI:
```mermaid
graph LR
A[你的 Prompt
策略指令] --> B[AI模型]
C[市场数据
自动生成] --> B
B --> D[思维链分析]
B --> E[交易决策JSON]
```
**工作流程**:
1. **系统 Prompt(System)**: 你编写的策略指令
2. **用户 Prompt(User)**: 系统自动生成的市场数据
3. **AI 响应(Response)**: AI 的分析和决策
### Prompt 的三个组成部分
#### 1. 核心策略(你编写)
定义 AI 的交易哲学、风险偏好、决策标准
**示例**:
```
你是保守型交易员,只在高确定性机会时开仓。
开仓条件:信心度 ≥ 85,多个指标共振。
```
#### 2. 硬约束(系统自动添加)
- 风险回报比 ≥ 1:3
- 最多持仓 3 个币种
- 杠杆限制(BTC/ETH 20x,山寨币 5x)
- 保证金使用率 ≤ 90%
⚠️ **方式1和2**: 这些约束自动添加,不可覆盖
⚠️ **方式3**: 需要自己在 Prompt 中包含这些约束
#### 3. 输出格式(系统自动添加)
要求 AI 使用 XML 标签和 JSON 格式输出决策
**示例输出**:
```xml
BTC 跌破支撑位,MACD 死叉,成交量放大...
```json
[
{
"symbol": "BTCUSDT",
"action": "open_short",
"leverage": 10,
"position_size_usd": 5000,
"stop_loss": 97000,
"take_profit": 91000,
"confidence": 85
}
]
```
```
### 市场数据自动传递
你**不需要**在 Prompt 中要求 AI 提供数据,系统会自动传递:
✅ **系统自动提供**:
- 当前时间、运行周期
- 账户净值、余额、盈亏
- 所有持仓的详细信息
- BTC 市场行情
- 候选币种的完整技术数据
- 夏普比率绩效指标
❌ **你不需要写**:
```
请分析 BTC 的价格和 MACD... # 系统已自动提供
请告诉我当前持仓情况... # 系统已自动提供
```
✅ **你应该写**:
```
重点关注 BTC 的趋势,作为市场风向标
当 MACD 死叉且成交量放大时,考虑做空机会
```
---
## 📋 可用字段参考
系统会自动将以下数据传递给 AI,你可以在 Prompt 中引用这些字段:
### 系统状态
| 字段名称 | 说明 | 示例 |
|---------|------|------|
| **时间** | UTC时间 | 2025-01-15 10:30:00 UTC |
| **周期** | 系统运行周期数 | #142(第142次决策) |
| **运行时长** | 系统运行分钟数 | 426分钟 |
**实际输出示例**:
```
时间: 2025-01-15 10:30:00 UTC | 周期: #142 | 运行: 426分钟
```
---
### 账户信息
| 字段名称 | 说明 | 单位 | 示例 |
|---------|------|------|------|
| **净值** | 账户总资产 | USDT | 1250.50 |
| **余额** | 可用余额 | USDT | 850.30 |
| **余额占比** | 可用余额/净值 | % | 68.0% |
| **盈亏** | 总盈亏百分比 | % | +15.2% |
| **保证金** | 保证金使用率 | % | 32.0% |
| **持仓数** | 当前持仓数量 | 个 | 2 |
**实际输出示例**:
```
账户: 净值1250.50 | 余额850.30 (68.0%) | 盈亏+15.2% | 保证金32.0% | 持仓2个
```
**Prompt 引用示例**:
```
当余额占比低于20%时,停止开新仓
当保证金使用率超过80%时,考虑减仓
```
---
### 持仓信息(⭐核心字段)
| 字段名称 | 说明 | 单位 | 计算方式 | 示例 |
|---------|------|------|----------|------|
| **币种** | 交易对 | - | - | BTCUSDT |
| **方向** | 多/空 | - | - | LONG |
| **入场价** | 开仓价格 | USDT | - | 95000.00 |
| **当前价** | 标记价格 | USDT | - | 96500.00 |
| **盈亏(百分比)** | 未实现盈亏% | % | 含杠杆 | +2.38% |
| **盈亏金额** | 未实现盈亏 | USDT | 实际美元 | +59.50 |
| **最高收益率** | 历史峰值收益% | % | 含杠杆 | +5.00% |
| **杠杆** | 杠杆倍数 | x | - | 5 |
| **保证金** | 已用保证金 | USDT | - | 500.00 |
| **强平价** | 清算价格 | USDT | - | 88000.00 |
| **持仓时长** | 持仓时间 | 分钟/小时 | 计算 | 2小时35分钟 |
⚠️ **重要区分**:
- **盈亏(百分比)** = 考虑杠杆的收益率(如5倍杠杆,价格涨1% = 盈亏5%)
- **盈亏金额** = 实际赚/亏的美元数(如 +59.50 USDT)
- **最高收益率** = 持仓期间达到的最高收益率(用于计算回撤)
**实际输出示例**:
```
1. BTCUSDT LONG | 入场价95000.0000 当前价96500.0000 | 盈亏+2.38% | 盈亏金额+59.50 USDT | 最高收益率5.00% | 杠杆5x | 保证金500 | 强平价88000.0000 | 持仓时长2小时35分钟
```
**Prompt 引用示例(✅ 正确)**:
```
✅ 当盈亏金额回撤超过最高收益率的50%时,部分止盈
✅ 如果盈亏从+5%回落到+2%,说明回撤了60%,考虑减仓
✅ 持仓时长超过4小时但盈亏金额仍为负,考虑止损
```
**Prompt 引用示例(❌ 错误)**:
```
❌ 当 unrealized_pnl 超过 peak_pnl_pct... # 字段名错误
❌ 当盈亏超过5%... # 不明确,是"盈亏(百分比)"还是"盈亏金额"?
```
---
### 计算公式字段
基于上述字段,你可以在 Prompt 中使用这些计算:
| 计算名称 | 公式 | 说明 | 示例 |
|---------|------|------|------|
| **真实收益率** | `(盈亏金额 / 保证金) × 100%` | 基于保证金的实际收益 | (59.50/500)×100% = 11.9% |
| **回撤幅度** | `(最高收益率 - 当前盈亏) / 最高收益率 × 100%` | 从峰值的回撤百分比 | (5%-2.38%)/5% = 52.4% |
| **距强平距离** | `|(当前价 - 强平价) / 当前价| × 100%` | 距离清算的安全边际 | |(96500-88000)/96500| = 8.8% |
**Prompt 引用示例**:
```
计算真实收益率 = 盈亏金额 / 保证金
如果真实收益率超过10%,部分止盈锁定利润
计算回撤幅度 = (最高收益率 - 当前盈亏) / 最高收益率
如果回撤幅度超过50%,说明利润大幅回吐,考虑减仓
```
---
### BTC 市场数据
| 字段名称 | 说明 | 单位 | 示例 |
|---------|------|------|------|
| **BTC价格** | 当前价格 | USDT | 96500.00 |
| **1h涨跌幅** | 1小时涨跌 | % | +1.25% |
| **4h涨跌幅** | 4小时涨跌 | % | -2.15% |
| **MACD** | MACD指标 | - | 0.0024 |
| **RSI** | RSI(7)指标 | - | 62.50 |
**实际输出示例**:
```
BTC: 96500.00 (1h: +1.25%, 4h: -2.15%) | MACD: 0.0024 | RSI: 62.50
```
**Prompt 引用示例**:
```
BTC 是市场风向标:
- 如果 BTC 的 4h涨跌幅 < -5%,市场转空,谨慎做多山寨币
- 如果 BTC 的 MACD 死叉且 RSI < 30,可能超跌反弹
```
---
### 完整市场数据
每个币种都会附带完整的技术数据,包括:
- **价格序列**(3分钟K线)
- **EMA20 序列**
- **MACD 序列**
- **RSI7/RSI14 序列**
- **成交量序列**
- **持仓量(OI)序列**
- **资金费率**
⚠️ **注意**: 这些是序列数据(数组),系统会自动格式化输出,你不需要指定具体字段名。
**Prompt 引用示例**:
```
分析价格序列,识别支撑阻力位
观察 EMA20 趋势,判断多空方向
MACD 序列出现金叉/死叉时,作为信号确认
持仓量(OI)快速增长 + 价格上涨 = 看涨信号
```
---
### 性能指标
| 字段名称 | 说明 | 范围 | 解读 |
|---------|------|------|------|
| **夏普比率** | 风险调整后收益 | -∞ ~ +∞ | >1优秀, 0~1正常, <0亏损 |
**实际输出示例**:
```
## 📊 夏普比率: 0.85
```
**Prompt 引用示例**:
```
根据夏普比率调整策略:
- 夏普比率 < -0.5: 停止交易,观望至少18分钟
- 夏普比率 -0.5~0: 只做信心度>80的交易
- 夏普比率 0~0.7: 维持当前策略
- 夏普比率 > 0.7: 可适度扩大仓位
```
---
### 字段命名一致性原则
✅ **正确做法**: 使用输出中的自然语言描述
```
盈亏金额、最高收益率、保证金、杠杆、持仓时长
```
❌ **错误做法**: 使用代码字段名
```
unrealized_pnl, peak_pnl_pct, margin_used, leverage
```
💡 **核心原则**: Prompt 中的字段名必须与系统输出的自然语言标签完全一致。
---
## ⚖️ 系统约束
### 硬约束(不可覆盖的规则)
以下约束由系统强制执行,**方式1和2** 会自动添加,**方式3** 需要自己包含:
#### 1. 风险回报比
**要求**: 必须 ≥ 1:3(冒1%风险,赚3%+收益)
**含义**: 止盈空间必须至少是止损空间的3倍
**示例**:
```
✅ 入场100, 止损98(-2%), 止盈106(+6%) → 风险回报比 6/2 = 3:1 合格
❌ 入场100, 止损95(-5%), 止盈110(+10%) → 风险回报比 10/5 = 2:1 不合格
```
#### 2. 最多持仓
**要求**: 最多同时持有 3 个币种
**含义**: 分散风险,避免过度暴露
#### 3. 单币仓位
**要求**:
- 山寨币: 0.8~1.5 倍账户净值
- BTC/ETH: 5~10 倍账户净值
**示例**(账户净值 1000 USDT):
```
✅ 山寨币仓位: 800~1500 USDT
✅ BTC/ETH仓位: 5000~10000 USDT
```
#### 4. 杠杆限制
**要求**:
- 山寨币: 最大 5x 杠杆
- BTC/ETH: 最大 20x 杠杆
⚠️ **严格执行**: 超过此限制的决策会被系统拒绝
#### 5. 保证金使用率
**要求**: 总保证金使用率 ≤ 90%
**含义**: 预留10%用于清算保护和手续费
#### 6. 最小开仓金额
**要求**:
- 一般币种: ≥ 12 USDT
- BTC/ETH: ≥ 60 USDT
**原因**: 交易所最小名义价值要求 + 安全边际
---
### 保留关键词
以下 XML 标签是系统保留的,不可在自定义 Prompt 中使用:
❌ **禁止使用**:
- `` - 用于标记思维链分析
- `` - 用于标记 JSON 决策
---
### JSON 输出格式规范
AI 必须按照以下格式输出决策:
#### 正确格式
```xml
你的分析思路...
```json
[
{
"symbol": "BTCUSDT",
"action": "open_short",
"leverage": 10,
"position_size_usd": 5000,
"stop_loss": 97000,
"take_profit": 91000,
"confidence": 85,
"risk_usd": 300
}
]
```
```
#### JSON 格式禁止项
❌ **禁止包含**:
**1. 范围符号 `~`**
```json
// 错误
{"position_size_usd": "2000~3000"} // 必须是精确值
{"stop_loss": "95000~96000"} // 必须是单一价格
// 正确
{"position_size_usd": 2500}
{"stop_loss": 95500}
```
**2. 千位分隔符 `,`**
```json
// 错误
{"position_size_usd": 98,000} // JSON 数字不允许逗号
// 正确
{"position_size_usd": 98000}
```
**3. 中文描述或注释**
```json
// 错误
{
"symbol": "BTCUSDT",
"action": "open_long", // 开多仓
"confidence": 80 // 只需要必要字段
}
// 正确
{
"symbol": "BTCUSDT",
"action": "open_long",
"confidence": 85
}
```
---
### 三种 Prompt 模式对比
| 模式 | 配置 | 最终 Prompt | 适用场景 |
|------|------|------------|----------|
| **模式1
仅基础** | `override_base_prompt=false`
`custom_prompt=""` | 官方模板 + 硬约束 + 输出格式 | 新手用户 |
| **模式2
基础+附加** | `override_base_prompt=false`
`custom_prompt="你的策略"` | 官方模板 + 硬约束 + 输出格式
+ 个性化策略 + 注意事项 | 进阶用户 |
| **模式3
完全自定义** | `override_base_prompt=true`
`custom_prompt="完整Prompt"` | 仅使用自定义内容
(忽略所有系统默认) | 高级用户 |
⚠️ **模式3 风险警告**:
- 你必须自己包含所有硬约束
- 你必须自己定义输出格式
- 你必须自己负责风控规则
- 建议只有完全理解系统机制后才使用
---
## 📦 官方模板库
### 保守型策略
#### 适用场景
- ✅ 新手用户,追求稳健
- ✅ 市场波动大,风险厌恶
- ✅ 资金安全优先,容忍低收益
#### 核心特点
- 开仓信心度 ≥ 85(只做高确定性机会)
- 风险回报比 ≥ 1:4(比系统要求更严格)
- 最多持仓 2 个(降低风险暴露)
- 仓位小(0.5倍账户净值)
#### 预期表现
- 交易频率: 低(可能一天1-2笔)
- 持仓时间: 长(平均2-4小时)
- 胜率: 高(>70%)
- 波动: 小
#### 完整模板
```plaintext
你是专业的加密货币交易AI,采用保守稳健的交易策略。
# 核心目标
最大化夏普比率(Sharpe Ratio),强调风险控制和稳定收益。
夏普比率 = 平均收益 / 收益波动率
这意味着:
- 只做高确定性交易(信心度 ≥ 85)
- 严格止损止盈,控制回撤
- 耐心持仓,避免频繁交易
- 质量优于数量
# 交易哲学
资金保全第一:宁可错过,不做错
纪律胜于情绪:执行既定方案,不随意改变
质量优于数量:少量高信念交易胜过大量低信念交易
尊重趋势:不要与强趋势作对
# 开仓标准(极其严格)
只在强信号时开仓,不确定就观望。
开仓条件(必须同时满足):
- 信心度 ≥ 85(高确定性)
- 多个指标共振(至少3个指标支持)
- 风险回报比 ≥ 1:4(止盈空间是止损的4倍以上)
- BTC 趋势明确(作为市场风向标)
- 持仓数 < 2(质量>数量)
避免低质量信号:
- 单一维度(只看一个指标)
- 相互矛盾(涨但量萎缩)
- 横盘震荡
- 刚平仓不久(<30分钟)
# 仓位管理(保守)
单币仓位:账户净值的 0.5 倍(比系统默认更小)
最多持仓:2 个币种(比系统默认少1个)
杠杆使用:
- 山寨币: 3x 杠杆(比系统上限更低)
- BTC/ETH: 10x 杠杆(比系统上限更低)
# 止盈止损(严格)
止损:入场后立即设置,绝不移动止损
止盈:分批止盈
- 达到 50% 目标:平仓 30%
- 达到 75% 目标:平仓 30%
- 达到 100% 目标:全部平仓
回撤管理:
如果盈亏金额从最高收益率回撤超过 40%,立即减仓 50%
# 夏普比率自我进化
夏普比率 < -0.5: 停止交易,连续观望至少 30 分钟
夏普比率 -0.5~0: 只做信心度 ≥ 90 的交易
夏普比率 0~1: 维持当前策略
夏普比率 > 1: 可适度扩大至 0.8 倍净值仓位
# 决策流程
1. 分析夏普比率:当前策略是否有效?
2. 评估持仓:是否该止盈/止损?
3. 寻找新机会:有强信号吗?
4. 输出决策:思维链分析 + JSON
记住:
- 目标是夏普比率,不是交易频率
- 宁可错过,不做低质量交易
- 每笔交易都要经得起反复推敲
```
#### 使用方式
**方式1: 替换默认模板**
```bash
# 备份原文件
cp prompts/default.txt prompts/default.txt.bak
# 将上述模板内容保存到 prompts/default.txt
# 重启系统
docker-compose restart
```
**方式2: Web界面自定义**
1. 复制上述模板内容
2. 粘贴到 Web 界面的"自定义 Prompt"
3. 设置 `override_base_prompt = false`
---
### 平衡型策略
#### 适用场景
- ✅ 有一定经验的用户
- ✅ 正常市场条件
- ✅ 追求风险收益平衡
#### 核心特点
- 开仓信心度 ≥ 75(系统默认)
- 风险回报比 ≥ 1:3(系统默认)
- 最多持仓 3 个(系统默认)
- 仓位适中(0.8~1.5倍净值)
#### 预期表现
- 交易频率: 中(一天2-4笔)
- 持仓时间: 中(平均1-2小时)
- 胜率: 中等(60-70%)
- 波动: 适中
#### 完整模板
```plaintext
你是专业的加密货币交易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是底线
```
#### 使用方式
同保守型策略的使用方式。
---
### 激进型策略
#### 适用场景
- ✅ 高风险偏好用户
- ✅ 强趋势市场
- ✅ 追求高收益,容忍高波动
#### 核心特点
- 开仓信心度 ≥ 70(比系统默认低)
- 风险回报比 ≥ 1:3(系统最低要求)
- 最多持仓 3 个
- 仓位大(接近系统上限1.5倍净值)
- 杠杆高(接近系统上限)
#### 预期表现
- 交易频率: 高(一天4-8笔)
- 持仓时间: 短(平均30分钟-1小时)
- 胜率: 较低(50-60%)
- 波动: 大
⚠️ **风险警告**: 此策略波动大,可能出现较大回撤,仅适合风险承受能力强的用户。
#### 完整模板
```plaintext
你是专业的加密货币交易AI,采用激进主动的交易策略。
⚠️ 风险声明:此策略追求高收益,但波动性大,可能出现较大回撤。
# 核心目标
最大化收益,在控制风险的前提下积极把握市场机会。
# 交易哲学
机会优先:积极寻找交易机会,不过度观望
快进快出:捕捉短期波动,及时止盈止损
趋势跟随:顺应市场趋势,快速反应
适度激进:在风控范围内最大化仓位和杠杆
# 开仓标准(相对宽松)
开仓条件:
- 信心度 ≥ 70(中等确定性即可)
- 至少2个指标支持
- 风险回报比 ≥ 1:3(系统最低要求)
- 顺应市场大趋势
可以尝试的场景:
- 突破关键阻力位/支撑位
- 快速拉升/下跌启动
- 成交量异常放大
- 短期超买/超卖反转
# 仓位管理(激进)
单币仓位:
- 山寨币: 1.2~1.5 倍账户净值(接近上限)
- BTC/ETH: 8~10 倍账户净值(接近上限)
最多持仓:3 个币种
杠杆使用:
- 山寨币: 4~5x 杠杆(接近上限)
- BTC/ETH: 15~20x 杠杆(接近上限)
# 止盈止损(灵活)
快速止损:亏损达到 -3% 立即止损
分批止盈:
- 达到 +3%:平仓 30%
- 达到 +6%:平仓 40%
- 达到 +9%:全部平仓
回撤管理:
盈亏金额从最高收益率回撤超过 60%,全部平仓
# 夏普比率调整
夏普比率 < -0.5: 暂停交易 15 分钟
夏普比率 -0.5~0: 降低仓位至 0.8 倍净值
夏普比率 0~0.7: 维持当前策略
夏普比率 > 0.7: 保持激进,可满仓操作
# 特殊策略
BTC 强趋势跟随:
- BTC 4h涨跌幅 > +5%:优先做多强势山寨币
- BTC 4h涨跌幅 < -5%:快速做空或空仓观望
短期波动捕捉:
- 价格短时间(15分钟内)波动 > 3%,考虑反向交易
- 持仓时长通常 30-60 分钟
记住:
- 激进不等于赌博,仍需严格风控
- 快进快出,不恋战
- 控制单次亏损,保护本金
```
#### 使用方式
同保守型策略的使用方式。
⚠️ **再次提醒**: 激进策略适合经验丰富、风险承受能力强的用户,新手请谨慎使用。
---
## ✅ 质量检查清单
在使用自定义 Prompt 前,请通过以下检查:
### 1. 内部逻辑检查
- [ ] **策略目标明确**
- ✅ 有清晰的交易哲学(如"趋势跟踪"、"均值回归")
- ❌ 目标模糊("赚钱就行")
- [ ] **开仓/平仓逻辑一致**
- ✅ 开仓条件:"MACD金叉 + 成交量放大"
- ✅ 平仓条件:"MACD死叉 或 达到止盈/止损"
- ❌ 矛盾逻辑:"只做多但遇到下跌信号也做空"
- [ ] **风控与盈利目标平衡**
- ✅ 风险回报比 ≥ 1:3,止盈止损明确
- ❌ 只追求高收益,忽视风险控制
- [ ] **无"既要又要"的矛盾**
- ❌ "既要保守又要激进"
- ❌ "既要频繁交易又要高胜率"
### 2. 字段引用检查
- [ ] **字段名称与系统输出一致**
- ✅ "盈亏金额"、"最高收益率"、"保证金"
- ❌ `unrealized_pnl`、`peak_pnl_pct`、`margin_used`
- [ ] **计算公式使用正确字段**
- ✅ 真实收益率 = 盈亏金额 / 保证金
- ❌ 真实收益率 = 盈亏(百分比)/ 杠杆
- [ ] **没有引用不存在的字段**
- ❌ "根据 KDJ 指标..." (系统未提供 KDJ)
- ✅ "根据 MACD、RSI 指标..."
- [ ] **单位理解正确**
- ✅ "盈亏(百分比)" = 含杠杆的收益率
- ✅ "盈亏金额" = 实际美元盈亏
### 3. 系统约束检查
- [ ] **未尝试覆盖硬约束**(除非模式3且完全理解)
- ❌ "风险回报比可以低于1:3"
- ❌ "可以同时持仓5个币种"
- [ ] **未使用保留关键词**
- ❌ 在 Prompt 中写 `开仓分析...`
- ✅ 只用自然语言描述策略
- [ ] **未要求 AI 在 JSON 中添加描述**
- ❌ "在 JSON 中添加详细的中文解释"
- ✅ "reasoning 字段保持简短(<20字)"
- [ ] **正确理解三种模式**
- ✅ 新手用模式1
- ✅ 进阶用模式2
- ✅ 高级用模式3且包含完整约束
### 4. 量化投资最佳实践检查
- [ ] **风险回报比明确且合理**
- ✅ 要求 ≥ 1:3(或更严格如1:4)
- ❌ 未提及风险回报比
- [ ] **有明确的止损止盈策略**
- ✅ "止损:入场价-2%, 止盈:入场价+6%"
- ❌ "根据感觉设置止损"
- [ ] **避免过度交易**
- ✅ "只在高确定性机会开仓,大多数周期应该 wait"
- ❌ "每个周期都要寻找交易机会"
- [ ] **策略可测试和验证**
- ✅ 有明确的量化指标(如"RSI<30且MACD金叉")
- ❌ 主观判断(如"感觉市场会涨")
- [ ] **考虑市场条件变化**
- ✅ "趋势市场追涨杀跌,震荡市场高抛低吸"
- ❌ 只适用单一市场环境
### 检查结果评分
- **20/20**: 优秀,可以使用
- **15-19**: 良好,建议优化部分问题
- **10-14**: 一般,存在明显问题,需要修改
- **<10**: 不合格,建议重新编写或使用官方模板
---
## ❓ 常见问题与最佳实践
### 常见错误案例
#### 错误1: 字段名称错误
**❌ 错误示例**:
```
当 unrealized_pnl 超过 peak_pnl_pct 的50%时,部分止盈
```
**错误原因**:
- 使用了代码字段名而非自然语言标签
- AI 无法识别 `unrealized_pnl` 和 `peak_pnl_pct`
**✅ 正确改写**:
```
当盈亏金额回撤超过最高收益率的50%时,部分止盈
```
**要点总结**:
- ✅ Do: 使用自然语言字段名(盈亏金额、最高收益率)
- ❌ Don't: 使用代码字段名(unrealized_pnl、peak_pnl_pct)
---
#### 错误2: 单位理解错误
**❌ 错误示例**:
```
当盈亏超过5%时止盈
```
**错误原因**:
- "盈亏"歧义:是"盈亏(百分比)"还是"盈亏金额"?
- 5%是含杠杆的收益率还是真实收益率?
**✅ 正确改写**:
```
方案1: 当盈亏(百分比)超过+5%时,部分止盈
方案2: 当真实收益率(盈亏金额/保证金)超过10%时,部分止盈
```
**要点总结**:
- ✅ Do: 明确指定字段和单位
- ❌ Don't: 使用歧义表述
---
#### 错误3: 计算公式错误
**❌ 错误示例**:
```
真实收益率 = 盈亏(百分比) / 杠杆
```
**错误原因**:
- 公式错误,盈亏(百分比)已经包含杠杆
- 应该用盈亏金额除以保证金
**✅ 正确改写**:
```
真实收益率 = 盈亏金额 / 保证金 × 100%
```
**要点总结**:
- ✅ Do: 使用正确的计算逻辑
- ❌ Don't: 混淆含杠杆和不含杠杆的字段
---
#### 错误4: JSON 格式错误
**❌ 错误示例**:
```
在 JSON 中添加详细的中文解释,帮助我理解决策原因
```
**错误原因**:
- 要求 AI 在 JSON 中加入中文描述会破坏格式
- JSON 必须严格符合格式要求
**✅ 正确改写**:
```
reasoning 字段保持简短(10-20字),用关键词概括决策理由
```
**要点总结**:
- ✅ Do: 使用 reasoning 字段,保持简短
- ❌ Don't: 要求在 JSON 中添加长篇描述
---
#### 错误5: 使用保留关键词
**❌ 错误示例**:
```
在你的分析中使用 标签来组织思路
```
**错误原因**:
- `` 是系统保留的 XML 标签
- 用户不应在 Prompt 中使用这些标签
**✅ 正确改写**:
```
在分析市场时,先评估趋势,再确认指标,最后做出决策
```
**要点总结**:
- ✅ Do: 用自然语言描述分析流程
- ❌ Don't: 使用系统保留的 XML 标签
---
#### 错误6: 尝试覆盖硬约束
**❌ 错误示例**:
```
风险回报比可以适当降低,2:1 也可以接受
```
**错误原因**:
- 系统强制要求风险回报比 ≥ 1:3
- 用户无法在模式1和2中覆盖此约束
**✅ 正确改写**:
```
严格遵守风险回报比 ≥ 1:3,追求更高的 1:4 或 1:5
```
**要点总结**:
- ✅ Do: 遵守或加强硬约束
- ❌ Don't: 尝试放宽硬约束(除非模式3)
---
#### 错误7: 逻辑矛盾
**❌ 错误示例**:
```
采用保守策略,但要频繁交易捕捉每个波动
```
**错误原因**:
- 保守策略和频繁交易自相矛盾
- 频繁交易会增加成本和波动,降低夏普比率
**✅ 正确改写**:
```
采用保守策略,只在高确定性机会开仓,大多数时候观望
```
**要点总结**:
- ✅ Do: 确保策略内部逻辑一致
- ❌ Don't: 同时要求矛盾的目标
---
#### 错误8: 过度交易倾向
**❌ 错误示例**:
```
每个周期都要寻找交易机会,不能浪费任何行情
```
**错误原因**:
- 过度交易会增加手续费损耗
- 会降低夏普比率,违背量化交易原则
**✅ 正确改写**:
```
只在强信号时开仓,大多数周期应该 wait 或 hold
交易频率控制在每小时 0.1-0.2 笔(一天 2-4 笔)
```
**要点总结**:
- ✅ Do: 强调质量优于数量
- ❌ Don't: 要求频繁交易
---
#### 错误9: 忽略系统状态
**❌ 错误示例**:
```
(Prompt 中完全没有提及夏普比率)
```
**错误原因**:
- 夏普比率是核心绩效指标
- 忽略它会导致 AI 无法自我调整策略
**✅ 正确改写**:
```
根据夏普比率调整策略:
- 夏普比率 < -0.5: 停止交易,观望至少 18 分钟
- 夏普比率 -0.5~0: 只做信心度>80 的交易
- 夏普比率 0~0.7: 维持当前策略
- 夏普比率 > 0.7: 可适度扩大仓位
```
**要点总结**:
- ✅ Do: 利用夏普比率进行自我进化
- ❌ Don't: 忽略系统提供的绩效反馈
---
#### 错误10: 模式配置错误
**❌ 错误示例**:
```
设置 override_base_prompt = true
但自定义 Prompt 中没有包含硬约束和输出格式
```
**错误原因**:
- 模式3会完全覆盖系统默认
- 没有硬约束会导致决策验证失败
**✅ 正确改写**:
```
如果使用模式3,必须在自定义 Prompt 中包含:
1. 所有硬约束(风险回报比、持仓数、杠杆等)
2. 完整的输出格式要求(XML 标签 + JSON 格式)
```
**要点总结**:
- ✅ Do: 新手和进阶用户使用模式1或2
- ❌ Don't: 不理解系统机制就使用模式3
---
### 数据流验证最佳实践
#### 验证步骤
**步骤1: 查看实际输出**
```bash
# 查看系统日志,找到实际发送给 AI 的 Prompt
docker logs nofx-trader | grep "User Prompt"
```
**步骤2: 确认字段存在**
检查你想引用的字段是否在实际输出中:
```
✅ 存在: "盈亏金额+59.50 USDT" → 可以引用"盈亏金额"
❌ 不存在: 没有看到 "KDJ" → 不能引用 KDJ 指标
```
**步骤3: 匹配自然语言标签**
```
输出: "盈亏+2.38% | 盈亏金额+59.50 USDT | 最高收益率5.00%"
✅ 正确引用: "盈亏(百分比)"、"盈亏金额"、"最高收益率"
❌ 错误引用: "pnl_pct"、"unrealized_pnl"、"peak_pnl"
```
---
### 字段命名一致性原则
#### 原则1: 自然语言优先
✅ **Do**:
```
盈亏金额、最高收益率、保证金、杠杆、持仓时长
```
❌ **Don't**:
```
unrealized_pnl, peak_pnl_pct, margin_used, leverage, holding_duration
```
#### 原则2: 与代码输出完全一致
**代码输出** (engine.go:387-390):
```
盈亏+2.38% | 盈亏金额+59.50 USDT | 最高收益率5.00%
```
**Prompt 引用**:
```
✅ 正确: "如果盈亏金额回撤超过最高收益率的50%..."
❌ 错误: "如果 unrealized_pnl 回撤超过 peak_pnl_pct 的50%..."
```
---
### 开源系统兼容性考虑
#### 修改影响评估
**低影响(安全)**:
- ✅ 修改官方模板内容
- ✅ 添加个性化策略(模式2)
- ✅ 调整开仓条件参数
**中影响(谨慎)**:
- ⚠️ 修改字段引用方式
- ⚠️ 修改计算公式
**高影响(危险)**:
- ❌ 完全覆盖硬约束(模式3)
- ❌ 修改输出格式要求
#### 最佳实践
**1. 增量添加优于修改**
- ✅ 在现有策略基础上添加新规则
- ⚠️ 修改核心逻辑
**2. 向后兼容**
- 如果系统新增字段,旧 Prompt 仍可运行
- 新 Prompt 可利用新字段
**3. 提供迁移指南**
- 如有破坏性变更,提供详细的迁移说明
---
## 🎓 高级话题
### 模式3: 完全自定义
⚠️ **警告**: 此模式仅适合完全理解系统机制的高级用户
#### 使用场景
- 需要完全不同的交易哲学
- 需要自定义风控规则
- 需要特殊的输出格式
#### 必须包含的内容
你的自定义 Prompt 必须包含:
1. **核心策略描述**
2. **所有硬约束**(风险回报比、持仓数、仓位大小、杠杆限制等)
3. **输出格式要求**(XML 标签 + JSON 格式)
#### 完整模板框架
```
[你的核心策略]
# 硬约束
1. 风险回报比 ≥ 1:3
2. 最多持仓 3 个
3. 单币仓位: 山寨 0.8-1.5x净值,BTC/ETH 5-10x净值
4. 杠杆: 山寨≤5x,BTC/ETH≤20x
5. 保证金使用率 ≤ 90%
6. 最小开仓: 一般≥12U,BTC/ETH≥60U
# 输出格式
使用 和 标签:
思维链分析
```json
[{决策对象}]
```
```
#### 验证清单
- [ ] 包含所有硬约束
- [ ] 定义了输出格式(XML + JSON)
- [ ] 策略逻辑完整自洽
- [ ] 经过充分测试
---
### 调试指南
#### 问题1: AI 输出格式错误
**症状**: 系统报错"JSON解析失败"
**排查步骤**:
1. 查看日志中的 AI 原始输出
```bash
docker logs nofx-trader | tail -100
```
2. 检查是否使用了 XML 标签 `` 和 ``
3. 检查 JSON 格式是否正确
**常见原因**:
- AI 未使用 `` 标签
- JSON 中包含中文注释
- JSON 数字包含千位分隔符(如 98,000)
- JSON 中使用范围符号(如 "2000~3000")
**解决方案**:
- 在 Prompt 中明确要求使用 XML 标签
- 强调 JSON 必须严格符合格式(无注释、无千位分隔符)
- 参考 [JSON 输出格式规范](#json-输出格式规范)
---
#### 问题2: 决策被拒绝
**症状**: 系统报错"决策验证失败"
**排查步骤**:
1. 查看具体的验证错误信息
```bash
docker logs nofx-trader | grep "验证失败"
```
2. 检查是否违反硬约束
**常见原因**:
- 风险回报比 < 1:3
- 杠杆超过限制(山寨币>5x,BTC/ETH>20x)
- 仓位大小超出范围
- 开仓金额过小(<12 USDT 或 BTC/ETH<60 USDT)
**解决方案**:
- 在 Prompt 中强调硬约束要求
- 添加自我检查逻辑:
```
在输出决策前,请自我检查:
- 风险回报比是否 ≥ 1:3?
- 杠杆是否在限制范围内?
- 仓位大小是否符合要求?
```
---
#### 问题3: AI 不按预期决策
**症状**: AI 的决策与你的预期不符
**排查步骤**:
1. 查看 AI 的思维链分析(reasoning)
```bash
docker logs nofx-trader | grep -A 20 ""
```
2. 检查 Prompt 是否有歧义
3. 检查市场数据是否符合你的开仓条件
**优化建议**:
- **使用更明确的量化指标**
```
❌ 模糊: "当市场有做多机会时"
✅ 明确: "当 MACD 金叉且 RSI < 70 且成交量放大 > 20%时"
```
- **避免模糊的表述**
```
❌ 避免: "感觉"、"可能"、"大概"
✅ 使用: "当...时"、"如果...则..."、"必须..."
```
- **添加具体的数值阈值**
```
❌ 模糊: "价格大幅上涨"
✅ 明确: "价格 15 分钟内上涨 > 3%"
```
- **检查逻辑一致性**
```
开仓条件和平仓条件应该相互对应
如果开仓依据 MACD 金叉,平仓可以用 MACD 死叉
```
---
## 📞 获取帮助
### 官方资源
- **GitHub Issues**: https://github.com/NoFxAiOS/nofx/issues
- **官方文档**: 查看项目 README
- **社区讨论**: GitHub Discussions
### 提问模板
当你遇到问题时,请提供以下信息:
```
问题描述:[简要描述问题]
使用方式:[方式1/2/3]
Prompt 内容:
```
[粘贴你的 Prompt 内容]
```
错误日志:
```
[粘贴相关的错误日志]
```
预期行为:[你期望的结果]
实际行为:[实际发生的情况]
```
---
## 📝 更新日志
### v1.0 (2025-01-09)
- 初始版本发布
- 完整的字段参考文档
- 三种官方策略模板(保守型/平衡型/激进型)
- 质量检查清单和常见错误案例
- 高级话题和调试指南
---
**文档版本**: v1.0
**最后更新**: 2025-01-09
**维护者**: Nofx Team CoderMageFox