Files
nofx/docs/prompt-guide.md
SkywalkerJi 499ca25bf7 fix: Fix Deepseek compatibility issues on the official website. (#1166)
* fix: Compatible with the HTTP2 stream transmission bug on DeepSeek's official website endpoint.

* fix: Remove reasoning from JSON
2025-12-04 19:19:48 +08:00

1528 lines
41 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📖 NoFx Prompt Writing Guide
**Version**: v1.0
**Last Updated**: 2025-01-09
**Compatible System Version**: NoFx v0.x+
---
## 📚 Table of Contents
- [🚀 Quick Start](#-quick-start-5-minutes)
- [💡 Core Concepts](#-core-concepts)
- [📋 Available Fields Reference](#-available-fields-reference)
- [⚖️ System Constraints](#-system-constraints)
- [📦 Official Template Library](#-official-template-library)
- [✅ Quality Checklist](#-quality-checklist)
- [❓ Common Issues & Best Practices](#-common-issues--best-practices)
- [🎓 Advanced Topics](#-advanced-topics)
---
## 🎯 Recommended Learning Path
**Beginners**: Quick Start → Official Templates → Quality Checklist
**Intermediate Users**: Core Concepts → Field Reference → System Constraints → Common Errors
**Advanced Users**: Advanced Topics → Mode 3 → Debugging Guide
---
## 🚀 Quick Start (5 Minutes)
### What is a Prompt?
A Prompt is the "work instruction" you give to the AI trader, determining how the AI analyzes the market and makes trading decisions.
### Three Usage Methods
#### Method 1: Use Official Templates (Recommended for Beginners)
**Steps**:
1. Choose an official template ([Conservative](#conservative-strategy) / [Balanced](#balanced-strategy) / [Aggressive](#aggressive-strategy))
2. Copy content to `prompts/default.txt`
3. Restart the system and start trading
**Suitable for**: Beginners who want to start quickly
**Time required**: 2 minutes
#### Method 2: Add Custom Strategy on Top of Official Template (Recommended)
**Steps**:
1. Keep `prompts/default.txt` unchanged
2. Add your strategy in the web interface's "Custom Prompt"
3. **Turn OFF** "Override Base Prompt" switch (`override_base_prompt = false`)
**Effect Explanation**:
```
Final Prompt = Official Base Strategy (Risk Control + Format) + Your Custom Strategy
↑ ↑
System guarantees safety Your trading ideas
```
**Suitable for**: Intermediate users who want to keep risk controls but add their own ideas
**Time required**: 10-30 minutes
#### Method 3: Complete Customization (Advanced)
**Steps**:
1. Write a complete Prompt (including all risk control rules)
2. **Turn ON** "Override Base Prompt" switch (`override_base_prompt = true`)
3. ⚠️ You are responsible for all risk controls and output formats
**Effect Explanation**:
```
Final Prompt = Your Custom Strategy (Complete Replacement)
You need to ensure safety and correct format yourself
```
**Important Warnings**:
- ❌ When enabled, the system will NOT automatically add risk control rules
- ❌ Incorrect output format will cause trading failures
- ⚠️ Only suitable for advanced users who fully understand the system mechanism
**Suitable for**: Advanced users who fully understand the system mechanism
**Time required**: 1-2 hours
### Get Started Now
👉 **Recommended for Beginners**: Jump to [Official Template Library](#-official-template-library) and choose a template
👉 **Intermediate Optimization**: Continue reading [Available Fields Reference](#-available-fields-reference)
👉 **Advanced Customization**: Read [Complete Customization Guide](#mode-3-complete-customization)
---
## 💡 Core Concepts
### How Prompts Work
NoFx builds a message containing market data every 3 minutes to send to the AI:
```mermaid
graph LR
A[Your Prompt<br/>Strategy Instructions] --> B[AI Model]
C[Market Data<br/>Auto-generated] --> B
B --> D[Chain of Thought Analysis]
B --> E[Trading Decision JSON]
```
**Workflow**:
1. **System Prompt (System)**: Strategy instructions you write
2. **User Prompt (User)**: Market data automatically generated by the system
3. **AI Response (Response)**: AI's analysis and decisions
### Three Components of a Prompt
#### 1. Core Strategy (Written by You)
Defines the AI's trading philosophy, risk preference, and decision criteria
**Example**:
```
You are a conservative trader who only opens positions in high-certainty opportunities.
Entry conditions: Confidence ≥ 85, multiple indicator convergence.
```
#### 2. Hard Constraints (Automatically Added by System)
- Risk-reward ratio ≥ 1:3
- Maximum 3 positions simultaneously
- Leverage limits (BTC/ETH 20x, altcoins 5x)
- Margin usage rate ≤ 90%
⚠️ **Methods 1 & 2**: These constraints are automatically added and cannot be overridden
⚠️ **Method 3**: You must include these constraints in your Prompt
#### 3. Output Format (Automatically Added by System)
Requires AI to output decisions using XML tags and JSON format
**Example Output**:
```xml
<reasoning>
BTC broke support, MACD death cross, volume increased...
</reasoning>
<decision>
```json
[
{
"symbol": "BTCUSDT",
"action": "open_short",
"leverage": 10,
"position_size_usd": 5000,
"stop_loss": 97000,
"take_profit": 91000,
"confidence": 85
}
]
```
</decision>
```
### Automatic Market Data Transmission
You **don't need** to request data in the Prompt; the system automatically transmits:
✅ **System Automatically Provides**:
- Current time, running cycle
- Account equity, balance, P&L
- All position details
- BTC market conditions
- Complete technical data for candidate coins
- Sharpe ratio performance metrics
❌ **You Don't Need to Write**:
```
Please analyze BTC price and MACD... # System already provides
Please tell me current positions... # System already provides
```
✅ **You Should Write**:
```
Focus on BTC trend as market indicator
When MACD death cross and volume increases, consider shorting opportunities
```
---
## 📋 Available Fields Reference
The system automatically passes the following data to the AI, which you can reference in your Prompt:
### System Status
| Field Name | Description | Example |
|---------|------|---------|
| **Time** | UTC time | 2025-01-15 10:30:00 UTC |
| **Cycle** | System run cycle count | #142 (142nd decision) |
| **Runtime** | System run minutes | 426 minutes |
**Actual Output Example**:
```
Time: 2025-01-15 10:30:00 UTC | Cycle: #142 | Runtime: 426 minutes
```
---
### Account Information
| Field Name | Description | Unit | Example |
|---------|------|------|------|
| **Equity** | Total account assets | USDT | 1250.50 |
| **Balance** | Available balance | USDT | 850.30 |
| **Balance %** | Available/Equity | % | 68.0% |
| **P&L** | Total P&L percentage | % | +15.2% |
| **Margin** | Margin usage rate | % | 32.0% |
| **Positions** | Current position count | count | 2 |
**Actual Output Example**:
```
Account: Equity 1250.50 | Balance 850.30 (68.0%) | P&L +15.2% | Margin 32.0% | Positions 2
```
**Prompt Reference Example**:
```
Stop opening new positions when Balance % below 20%
Consider reducing positions when Margin usage exceeds 80%
```
---
### Position Information (⭐Core Fields)
| Field Name | Description | Unit | Calculation | Example |
|---------|------|------|----------|------|
| **Symbol** | Trading pair | - | - | BTCUSDT |
| **Side** | Long/Short | - | - | LONG |
| **Entry** | Opening price | USDT | - | 95000.00 |
| **Current** | Mark price | USDT | - | 96500.00 |
| **P&L %** | Unrealized P&L % | % | w/ leverage | +2.38% |
| **P&L Amount** | Unrealized P&L | USDT | Actual USD | +59.50 |
| **Peak %** | Historical peak P&L% | % | w/ leverage | +5.00% |
| **Leverage** | Leverage multiple | x | - | 5 |
| **Margin** | Used margin | USDT | - | 500.00 |
| **Liquidation** | Liquidation price | USDT | - | 88000.00 |
| **Duration** | Holding time | min/hour | Calculated | 2h 35min |
⚠️ **Important Distinctions**:
- **P&L %** = Return with leverage (5x leverage, 1% price change = 5% P&L)
- **P&L Amount** = Actual dollars gained/lost (e.g., +59.50 USDT)
- **Peak %** = Highest P&L % achieved during holding (for drawdown calculation)
**Actual Output Example**:
```
1. BTCUSDT LONG | Entry 95000.0000 Current 96500.0000 | P&L +2.38% | P&L Amount +59.50 USDT | Peak % 5.00% | Leverage 5x | Margin 500 | Liquidation 88000.0000 | Duration 2h 35min
```
**Prompt Reference Examples (✅ Correct)**:
```
✅ When P&L Amount drawdown exceeds 50% of Peak %, take partial profit
✅ If P&L drops from +5% to +2%, that's 60% drawdown, consider reducing position
✅ If Duration exceeds 4 hours but P&L Amount still negative, consider stop loss
```
**Prompt Reference Examples (❌ Wrong)**:
```
❌ When unrealized_pnl exceeds peak_pnl_pct... # Wrong field names
❌ When P&L exceeds 5%... # Ambiguous - P&L % or P&L Amount?
```
---
### Calculated Formula Fields
Based on the above fields, you can use these calculations in your Prompt:
| Calculation | Formula | Description | Example |
|---------|------|------|------|
| **True ROI** | `(P&L Amount / Margin) × 100%` | Actual return on margin | (59.50/500)×100% = 11.9% |
| **Drawdown** | `(Peak % - Current P&L) / Peak % × 100%` | Drawdown from peak | (5%-2.38%)/5% = 52.4% |
| **Liquidation Distance** | `|(Current - Liquidation) / Current| × 100%` | Safety margin to liquidation | |(96500-88000)/96500| = 8.8% |
**Prompt Reference Example**:
```
Calculate True ROI = P&L Amount / Margin
If True ROI exceeds 10%, take partial profit to lock in gains
Calculate Drawdown = (Peak % - Current P&L) / Peak %
If Drawdown exceeds 50%, significant profit giveback, consider reducing position
```
---
### BTC Market Data
| Field Name | Description | Unit | Example |
|---------|------|------|------|
| **BTC Price** | Current price | USDT | 96500.00 |
| **1h Change** | 1-hour change | % | +1.25% |
| **4h Change** | 4-hour change | % | -2.15% |
| **MACD** | MACD indicator | - | 0.0024 |
| **RSI** | RSI(7) indicator | - | 62.50 |
**Actual Output Example**:
```
BTC: 96500.00 (1h: +1.25%, 4h: -2.15%) | MACD: 0.0024 | RSI: 62.50
```
**Prompt Reference Example**:
```
BTC as market indicator:
- If BTC 4h Change < -5%, market turning bearish, be cautious on altcoin longs
- If BTC MACD death cross and RSI < 30, potential oversold bounce
```
---
### Complete Market Data
Each coin includes complete technical data:
- Price sequence (3-minute candles)
- EMA20 sequence
- MACD sequence
- RSI7/RSI14 sequences
- Volume sequence
- Open Interest (OI) sequence
- Funding rate
⚠️ **Note**: These are sequence data (arrays), automatically formatted by system, you don't need to specify field names.
**Prompt Reference Example**:
```
Analyze price sequences to identify support/resistance levels
Observe EMA20 trend to determine long/short direction
MACD sequence golden/death cross as signal confirmation
OI rapid growth + price increase = bullish signal
```
---
### Performance Metrics
| Field Name | Description | Range | Interpretation |
|---------|------|------|------|
| **Sharpe Ratio** | Risk-adjusted returns | -∞ ~ +∞ | >1 excellent, 0~1 normal, <0 losing |
**Actual Output Example**:
```
## 📊 Sharpe Ratio: 0.85
```
**Prompt Reference Example**:
```
Adjust strategy based on Sharpe Ratio:
- Sharpe < -0.5: Stop trading, observe for at least 18 minutes
- Sharpe -0.5~0: Only trade confidence >80
- Sharpe 0~0.7: Maintain current strategy
- Sharpe > 0.7: Can moderately increase position size
```
---
### Field Naming Consistency Principle
✅ **Correct Approach**: Use natural language labels from output
```
P&L Amount, Peak %, Margin, Leverage, Duration
```
❌ **Wrong Approach**: Use code field names
```
unrealized_pnl, peak_pnl_pct, margin_used, leverage
```
💡 **Core Principle**: Field names in Prompt must exactly match natural language labels in system output.
---
## ⚖️ System Constraints
### Hard Constraints (Non-overridable Rules)
The following constraints are enforced by the system. **Methods 1 & 2** automatically add them; **Method 3** requires you to include them:
#### 1. Risk-Reward Ratio
**Requirement**: Must be ≥ 1:3 (risk 1% for 3%+ reward)
**Meaning**: Take-profit space must be at least 3x stop-loss space
**Examples**:
```
✅ Entry 100, Stop 98(-2%), TP 106(+6%) → Risk-reward 6/2 = 3:1 ✓
❌ Entry 100, Stop 95(-5%), TP 110(+10%) → Risk-reward 10/5 = 2:1 ✗
```
#### 2. Maximum Positions
**Requirement**: Maximum 3 simultaneous positions
**Meaning**: Diversify risk, avoid overexposure
#### 3. Single Position Size
**Requirement**:
- Altcoins: 0.8~1.5x account equity
- BTC/ETH: 5~10x account equity
**Example** (Account equity 1000 USDT):
```
✅ Altcoin position: 800~1500 USDT
✅ BTC/ETH position: 5000~10000 USDT
```
#### 4. Leverage Limits
**Requirement**:
- Altcoins: Maximum 5x leverage
- BTC/ETH: Maximum 20x leverage
⚠️ **Strictly Enforced**: Decisions exceeding limits will be rejected
#### 5. Margin Usage Rate
**Requirement**: Total margin usage ≤ 90%
**Meaning**: Reserve 10% for liquidation protection and fees
#### 6. Minimum Opening Amount
**Requirement**:
- General coins: ≥ 12 USDT
- BTC/ETH: ≥ 60 USDT
**Reason**: Exchange minimum notional value + safety margin
---
### Reserved Keywords
The following XML tags are system-reserved and cannot be used in custom Prompts:
❌ **Prohibited**:
- `<reasoning>` - For marking chain of thought analysis
- `<decision>` - For marking JSON decisions
---
### JSON Output Format Specification
AI must output decisions in the following format:
#### Correct Format
```xml
<reasoning>
Your analysis...
</reasoning>
<decision>
```json
[
{
"symbol": "BTCUSDT",
"action": "open_short",
"leverage": 10,
"position_size_usd": 5000,
"stop_loss": 97000,
"take_profit": 91000,
"confidence": 85,
"risk_usd": 300
}
]
```
</decision>
```
#### JSON Format Prohibitions
❌ **Prohibited Items**:
**1. Range symbols `~`**
```json
// Wrong
{"position_size_usd": "2000~3000"} // Must be exact value
{"stop_loss": "95000~96000"} // Must be single price
// Correct
{"position_size_usd": 2500}
{"stop_loss": 95500}
```
**2. Thousands separators `,`**
```json
// Wrong
{"position_size_usd": 98,000} // JSON numbers don't allow commas
// Correct
{"position_size_usd": 98000}
```
**3. Chinese descriptions or comments**
```json
// Wrong
{
"symbol": "BTCUSDT",
"action": "open_long", // Open long
"confidence": 80 // Only necessary fields
}
// Correct
{
"symbol": "BTCUSDT",
"action": "open_long",
"confidence": 85
}
```
---
### Three Prompt Modes Comparison
| Mode | Configuration | Final Prompt | Use Case |
|------|------|------------|----------|
| **Mode 1<br/>Base Only** | `override_base_prompt=false`<br/>`custom_prompt=""` | Official template + Hard constraints + Output format | Beginners |
| **Mode 2<br/>Base+Custom** | `override_base_prompt=false`<br/>`custom_prompt="your strategy"` | Official template + Hard constraints + Output format<br/>+ Custom strategy + Notes | Intermediate |
| **Mode 3<br/>Full Custom** | `override_base_prompt=true`<br/>`custom_prompt="complete prompt"` | Only custom content<br/>(ignores all system defaults) | Advanced |
⚠️ **Mode 3 Risk Warning**:
- You must include all hard constraints yourself
- You must define output format yourself
- You must handle all risk control yourself
- Recommended only after fully understanding system mechanics
---
## 📦 Official Template Library
### Conservative Strategy
#### Use Cases
- ✅ Beginners seeking stability
- ✅ High market volatility, risk-averse
- ✅ Capital safety priority, tolerate low returns
#### Core Features
- Entry confidence ≥ 85 (only high-certainty opportunities)
- Risk-reward ratio ≥ 1:4 (stricter than system requirement)
- Maximum 2 positions (reduced risk exposure)
- Small position size (0.5x account equity)
#### Expected Performance
- Trading frequency: Low (possibly 1-2 trades/day)
- Holding time: Long (average 2-4 hours)
- Win rate: High (>70%)
- Volatility: Small
#### Complete Template
```plaintext
You are a professional cryptocurrency trading AI with a conservative and steady trading strategy.
# Core Objective
Maximize Sharpe Ratio, emphasizing risk control and stable returns.
Sharpe Ratio = Average Returns / Returns Volatility
This means:
- Only high-certainty trades (confidence ≥ 85)
- Strict stop-loss/take-profit, control drawdown
- Patient holding, avoid frequent trading
- Quality over quantity
# Trading Philosophy
Capital preservation first: Better to miss than make mistakes
Discipline over emotion: Execute plan, don't change arbitrarily
Quality over quantity: Few high-conviction trades beat many low-conviction ones
Respect trends: Don't fight strong trends
# Entry Criteria (Extremely Strict)
Only enter on strong signals; observe when uncertain.
Entry conditions (must all be met):
- Confidence ≥ 85 (high certainty)
- Multiple indicator convergence (at least 3 indicators support)
- Risk-reward ratio ≥ 1:4 (take-profit space 4x+ stop-loss)
- Clear BTC trend (as market indicator)
- Positions < 2 (quality > quantity)
Avoid low-quality signals:
- Single dimension (only one indicator)
- Contradictory (price up but volume shrinking)
- Range-bound choppy
- Just closed position (<30 minutes ago)
# Position Management (Conservative)
Single position: 0.5x account equity (smaller than system default)
Maximum positions: 2 coins (1 less than system default)
Leverage usage:
- Altcoins: 3x leverage (lower than system limit)
- BTC/ETH: 10x leverage (lower than system limit)
# Stop-Loss/Take-Profit (Strict)
Stop-loss: Set immediately after entry, never move stop-loss
Take-profit: Tiered profit-taking
- 50% target reached: Close 30%
- 75% target reached: Close 30%
- 100% target reached: Close all
Drawdown management:
If P&L Amount drawdown from Peak % exceeds 40%, immediately reduce 50% position
# Sharpe Ratio Self-Evolution
Sharpe < -0.5: Stop trading, observe continuously for at least 30 minutes
Sharpe -0.5~0: Only trade confidence ≥ 90
Sharpe 0~1: Maintain current strategy
Sharpe > 1: Can moderately increase to 0.8x equity position
# Decision Process
1. Analyze Sharpe Ratio: Is current strategy effective?
2. Evaluate positions: Should take profit/stop loss?
3. Find new opportunities: Any strong signals?
4. Output decision: Chain of thought + JSON
Remember:
- Goal is Sharpe Ratio, not trading frequency
- Better miss than make low-quality trades
- Every trade must withstand repeated scrutiny
```
#### Usage
**Method 1: Replace Default Template**
```bash
# Backup original
cp prompts/default.txt prompts/default.txt.bak
# Save above template to prompts/default.txt
# Restart system
docker-compose restart
```
**Method 2: Web Interface Custom**
1. Copy above template
2. Paste in web interface "Custom Prompt"
3. Set `override_base_prompt = false`
---
### Balanced Strategy
#### Use Cases
- ✅ Users with some experience
- ✅ Normal market conditions
- ✅ Seeking risk-reward balance
#### Core Features
- Entry confidence ≥ 75 (system default)
- Risk-reward ratio ≥ 1:3 (system default)
- Maximum 3 positions (system default)
- Moderate position size (0.8~1.5x equity)
#### Expected Performance
- Trading frequency: Medium (2-4 trades/day)
- Holding time: Medium (average 1-2 hours)
- Win rate: Medium (60-70%)
- Volatility: Moderate
#### Complete Template
```plaintext
You are a professional cryptocurrency trading AI conducting autonomous trading in futures markets.
# Core Objective
Maximize Sharpe Ratio
Sharpe Ratio = Average Returns / Returns Volatility
This means:
- High-quality trades (high win rate, large P&L ratio) → Improve Sharpe
- Stable returns, controlled drawdown → Improve Sharpe
- Patient holding, let profits run → Improve Sharpe
- Frequent trading, small wins/losses → Increase volatility, severely reduce Sharpe
- Overtrading, fee erosion → Direct losses
- Early exits, frequent in/out → Miss major moves
Key insight: System scans every 3 minutes, but doesn't mean trade every time!
Most times should be `wait` or `hold`, only enter on excellent opportunities.
# Trading Philosophy & Best Practices
## Core Principles:
Capital preservation first: Protecting capital more important than pursuing returns
Discipline over emotion: Execute exit plan, don't arbitrarily move stops or targets
Quality over quantity: Few high-conviction trades beat many low-conviction ones
Adapt to volatility: Adjust position size based on market conditions
Respect trends: Don't fight strong trends
## Common Pitfalls to Avoid:
Overtrading: Frequent trading causes fees to erode profits
Revenge trading: Immediately doubling down after loss to "get even"
Analysis paralysis: Over-waiting for perfect signal, missing opportunities
Ignoring correlation: BTC often leads altcoins, must observe BTC first
Over-leverage: Amplifies returns but also amplifies losses
# Trading Frequency Awareness
Quantitative standards:
- Excellent trader: 2-4 trades/day = 0.1-0.2 trades/hour
- Overtrading: >2 trades/hour = serious problem
- Best rhythm: Hold at least 30-60 minutes after opening
Self-check:
If you find yourself trading every cycle → Standards too low
If you find yourself closing positions <30 minutes → Too impatient
# Entry Criteria (Strict)
Only enter on strong signals; observe when uncertain.
Complete data available:
- Raw sequences: 3-min price sequence (MidPrices array) + 4-hour candle sequence
- Technical sequences: EMA20 sequence, MACD sequence, RSI7 sequence, RSI14 sequence
- Capital sequences: Volume sequence, Open Interest (OI) sequence, funding rate
- Filter markers: AI500 score / OI_Top ranking (if marked)
Analysis methods (fully autonomous):
- Freely use sequence data, you can but not limited to trend analysis, pattern recognition, support/resistance, Fibonacci, volatility bands
- Multi-dimensional cross-validation (price + volume + OI + indicators + sequence patterns)
- Use methods you deem most effective to discover high-certainty opportunities
- Combined confidence ≥ 75 to enter
Avoid low-quality signals:
- Single dimension (only one indicator)
- Contradictory (price up but volume shrinking)
- Range-bound choppy
- Just closed position (<15 minutes ago)
# Sharpe Ratio Self-Evolution
Each cycle you receive Sharpe Ratio as performance feedback:
Sharpe < -0.5 (continuous losses):
→ Stop trading, observe continuously for at least 6 cycles (18 minutes)
→ Deep reflection:
• Trading frequency too high? (>2/hour is excessive)
• Holding time too short? (<30 minutes is early exit)
• Signal strength insufficient? (confidence <75)
Sharpe -0.5 ~ 0 (slight losses):
→ Strict control: Only trade confidence >80
→ Reduce frequency: Max 1 new position/hour
→ Patient holding: Hold at least 30+ minutes
Sharpe 0 ~ 0.7 (positive returns):
→ Maintain current strategy
Sharpe > 0.7 (excellent performance):
→ Can moderately increase position size
Key: Sharpe Ratio is the only metric, naturally punishes frequent trading and excessive entries/exits.
# Decision Process
1. Analyze Sharpe Ratio: Is current strategy effective? Need adjustments?
2. Evaluate positions: Has trend changed? Should take profit/stop loss?
3. Find new opportunities: Any strong signals? Long/short opportunities?
4. Output decision: Chain of thought + JSON
# Position Size Calculation
**Important**: `position_size_usd` is **notional value** (includes leverage), not margin requirement.
**Calculation Steps**:
1. **Available Margin** = Available Cash × 0.88 (reserve 12% for fees, slippage, liquidation buffer)
2. **Notional Value** = Available Margin × Leverage
3. **position_size_usd** = Notional Value (fill this in JSON)
4. **Actual Coin Amount** = position_size_usd / Current Price
**Example**: Available cash $500, leverage 5x
- Available Margin = $500 × 0.88 = $440
- position_size_usd = $440 × 5 = **$2,200** ← Fill this in JSON
- Actually occupies margin = $440, remaining $60 for fees, slippage, liquidation protection
---
Remember:
- Goal is Sharpe Ratio, not trading frequency
- Better miss than make low-quality trades
- Risk-reward ratio 1:3 is baseline
```
#### Usage
Same as Conservative strategy usage.
---
### Aggressive Strategy
#### Use Cases
- ✅ High risk tolerance users
- ✅ Strong trend markets
- ✅ Pursue high returns, tolerate high volatility
#### Core Features
- Entry confidence ≥ 70 (lower than system default)
- Risk-reward ratio ≥ 1:3 (system minimum)
- Maximum 3 positions
- Large position size (near system limit 1.5x equity)
- High leverage (near system limits)
#### Expected Performance
- Trading frequency: High (4-8 trades/day)
- Holding time: Short (average 30min-1 hour)
- Win rate: Lower (50-60%)
- Volatility: Large
⚠️ **Risk Warning**: This strategy has high volatility and may experience significant drawdowns; suitable only for users with strong risk tolerance.
#### Complete Template
```plaintext
You are a professional cryptocurrency trading AI with an aggressive and proactive trading strategy.
⚠️ Risk Disclosure: This strategy pursues high returns but has high volatility and may experience significant drawdowns.
# Core Objective
Maximize returns while controlling risks and actively seizing market opportunities.
# Trading Philosophy
Opportunity first: Actively seek trading opportunities, don't over-observe
Quick in/out: Capture short-term volatility, timely stop-loss/take-profit
Trend following: Follow market trends, react quickly
Moderate aggression: Maximize position size and leverage within risk control
# Entry Criteria (Relatively Loose)
Entry conditions:
- Confidence ≥ 70 (medium certainty acceptable)
- At least 2 indicators support
- Risk-reward ratio ≥ 1:3 (system minimum)
- Follow major market trend
Scenarios to try:
- Break key resistance/support levels
- Rapid surge/decline initiation
- Abnormal volume surge
- Short-term overbought/oversold reversal
# Position Management (Aggressive)
Single position:
- Altcoins: 1.2~1.5x account equity (near limit)
- BTC/ETH: 8~10x account equity (near limit)
Maximum positions: 3 coins
Leverage usage:
- Altcoins: 4~5x leverage (near limit)
- BTC/ETH: 15~20x leverage (near limit)
# Stop-Loss/Take-Profit (Flexible)
Quick stop-loss: Stop at -3% loss immediately
Tiered take-profit:
- Reach +3%: Close 30%
- Reach +6%: Close 40%
- Reach +9%: Close all
Drawdown management:
P&L Amount drawdown from Peak % exceeds 60%, close all
# Sharpe Ratio Adjustment
Sharpe < -0.5: Pause trading 15 minutes
Sharpe -0.5~0: Reduce position to 0.8x equity
Sharpe 0~0.7: Maintain current strategy
Sharpe > 0.7: Stay aggressive, can full position
# Special Strategies
BTC strong trend following:
- BTC 4h Change > +5%: Prioritize long strong altcoins
- BTC 4h Change < -5%: Quick short or cash out observe
Short-term volatility capture:
- Price volatility >3% in short time (15min), consider reverse trade
- Duration typically 30-60 minutes
Remember:
- Aggressive ≠ gambling, still need strict risk control
- Quick in/out, don't linger
- Control single loss, protect principal
```
#### Usage
Same as Conservative strategy usage.
⚠️ **Reminder**: Aggressive strategy suitable for experienced users with strong risk tolerance; beginners use with caution.
---
## ✅ Quality Checklist
Check the following before using custom Prompt:
### 1. Internal Logic Check
- [ ] **Clear Strategy Goal**
- ✅ Clear trading philosophy (e.g., "trend following", "mean reversion")
- ❌ Vague goals ("make money")
- [ ] **Consistent Entry/Exit Logic**
- ✅ Entry: "MACD golden cross + volume surge"
- ✅ Exit: "MACD death cross OR reach stop/target"
- ❌ Contradictory logic: "Only long but also short on down signals"
- [ ] **Balanced Risk Control and Profit Goals**
- ✅ Risk-reward ratio ≥ 1:3, clear stop/target
- ❌ Only pursue returns, ignore risk control
- [ ] **No "Want Everything" Contradictions**
- ❌ "Both conservative and aggressive"
- ❌ "Both frequent trading and high win rate"
### 2. Field Reference Check
- [ ] **Field Names Match System Output**
- ✅ "P&L Amount", "Peak %", "Margin"
-`unrealized_pnl`, `peak_pnl_pct`, `margin_used`
- [ ] **Formulas Use Correct Fields**
- ✅ True ROI = P&L Amount / Margin
- ❌ True ROI = P&L % / Leverage
- [ ] **No References to Non-existent Fields**
- ❌ "Based on KDJ indicator..." (system doesn't provide KDJ)
- ✅ "Based on MACD, RSI indicators..."
- [ ] **Correct Unit Understanding**
- ✅ "P&L %" = Return with leverage
- ✅ "P&L Amount" = Actual USD P&L
### 3. System Constraints Check
- [ ] **Not Trying to Override Hard Constraints** (unless Mode 3 and fully understand)
- ❌ "Risk-reward ratio can be below 1:3"
- ❌ "Can hold 5 positions simultaneously"
- [ ] **Not Using Reserved Keywords**
- ❌ Write `<reasoning>Entry analysis...</reasoning>` in Prompt
- ✅ Only natural language to describe strategy
- [ ] **Not Requiring AI to Add Descriptions in JSON**
- ❌ "Add detailed Chinese explanation in JSON"
- ✅ "reasoning field keep brief (<20 chars)"
- [ ] **Correctly Understand Three Modes**
- ✅ Beginners use Mode 1
- ✅ Intermediate use Mode 2
- ✅ Advanced use Mode 3 and include complete constraints
### 4. Quantitative Investment Best Practices Check
- [ ] **Clear and Reasonable Risk-Reward Ratio**
- ✅ Require ≥ 1:3 (or stricter like 1:4)
- ❌ No mention of risk-reward ratio
- [ ] **Clear Stop-Loss/Take-Profit Strategy**
- ✅ "Stop: Entry -2%, Target: Entry +6%"
- ❌ "Set stop based on feel"
- [ ] **Avoid Overtrading**
- ✅ "Only enter on high-certainty opportunities, most cycles should wait"
- ❌ "Seek trading opportunities every cycle"
- [ ] **Strategy Testable and Verifiable**
- ✅ Clear quantitative indicators (e.g., "RSI<30 and MACD golden cross")
- ❌ Subjective judgment (e.g., "feel market will rise")
- [ ] **Consider Market Condition Changes**
- ✅ "Trend market chase momentum, range market fade extremes"
- ❌ Only suitable for single market environment
### Check Result Scoring
- **20/20**: Excellent, ready to use
- **15-19**: Good, recommend optimizing some issues
- **10-14**: Average, obvious issues exist, need modification
- **<10**: Unqualified, recommend rewrite or use official template
---
## ❓ Common Issues & Best Practices
### Common Error Cases
#### Error 1: Wrong Field Names
**❌ Wrong Example**:
```
When unrealized_pnl exceeds 50% of peak_pnl_pct, take partial profit
```
**Error Reason**:
- Used code field names instead of natural language labels
- AI cannot recognize `unrealized_pnl` and `peak_pnl_pct`
**✅ Correct Rewrite**:
```
When P&L Amount drawdown exceeds 50% of Peak %, take partial profit
```
**Key Takeaway**:
- ✅ Do: Use natural language field names (P&L Amount, Peak %)
- ❌ Don't: Use code field names (unrealized_pnl, peak_pnl_pct)
---
#### Error 2: Unit Misunderstanding
**❌ Wrong Example**:
```
Take profit when P&L exceeds 5%
```
**Error Reason**:
- "P&L" ambiguous: "P&L %" or "P&L Amount"?
- Is 5% return with leverage or true ROI?
**✅ Correct Rewrite**:
```
Option 1: When P&L % exceeds +5%, take partial profit
Option 2: When True ROI (P&L Amount/Margin) exceeds 10%, take partial profit
```
**Key Takeaway**:
- ✅ Do: Clearly specify field and unit
- ❌ Don't: Use ambiguous expressions
---
#### Error 3: Wrong Calculation Formula
**❌ Wrong Example**:
```
True ROI = P&L % / Leverage
```
**Error Reason**:
- Formula wrong, P&L % already includes leverage
- Should use P&L Amount divided by Margin
**✅ Correct Rewrite**:
```
True ROI = P&L Amount / Margin × 100%
```
**Key Takeaway**:
- ✅ Do: Use correct calculation logic
- ❌ Don't: Confuse fields with/without leverage
---
#### Error 4: JSON Format Error
**❌ Wrong Example**:
```
Add detailed Chinese explanation in JSON to help me understand decision reasons
```
**Error Reason**:
- Requiring AI to add Chinese descriptions in JSON breaks format
- JSON must strictly comply with format requirements
**✅ Correct Rewrite**:
```
reasoning field keep brief (10-20 chars), use keywords to summarize decision rationale
```
**Key Takeaway**:
- ✅ Do: Use reasoning field, keep brief
- ❌ Don't: Require long descriptions in JSON
---
#### Error 5: Using Reserved Keywords
**❌ Wrong Example**:
```
Use <reasoning> tags in your analysis to organize thoughts
```
**Error Reason**:
- `<reasoning>` is system-reserved XML tag
- Users shouldn't use these tags in Prompts
**✅ Correct Rewrite**:
```
When analyzing market, first evaluate trend, then confirm indicators, finally make decision
```
**Key Takeaway**:
- ✅ Do: Natural language to describe analysis process
- ❌ Don't: Use system-reserved XML tags
---
#### Error 6: Trying to Override Hard Constraints
**❌ Wrong Example**:
```
Risk-reward ratio can be appropriately lowered, 2:1 is also acceptable
```
**Error Reason**:
- System enforces risk-reward ratio ≥ 1:3
- Users cannot override this constraint in Modes 1 & 2
**✅ Correct Rewrite**:
```
Strictly follow risk-reward ratio ≥ 1:3, pursue higher 1:4 or 1:5
```
**Key Takeaway**:
- ✅ Do: Follow or strengthen hard constraints
- ❌ Don't: Try to relax hard constraints (unless Mode 3)
---
#### Error 7: Logical Contradictions
**❌ Wrong Example**:
```
Use conservative strategy but frequently trade to capture every move
```
**Error Reason**:
- Conservative strategy and frequent trading contradict
- Frequent trading increases costs and volatility, reduces Sharpe Ratio
**✅ Correct Rewrite**:
```
Use conservative strategy, only enter on high-certainty opportunities, mostly observe
```
**Key Takeaway**:
- ✅ Do: Ensure internal strategy logic consistency
- ❌ Don't: Simultaneously require contradictory goals
---
#### Error 8: Overtrading Tendency
**❌ Wrong Example**:
```
Seek trading opportunities every cycle, can't waste any market move
```
**Error Reason**:
- Overtrading increases fee erosion
- Reduces Sharpe Ratio, violates quantitative trading principles
**✅ Correct Rewrite**:
```
Only enter on strong signals, most cycles should wait or hold
Control trading frequency at 0.1-0.2 trades/hour (2-4 trades/day)
```
**Key Takeaway**:
- ✅ Do: Emphasize quality over quantity
- ❌ Don't: Require frequent trading
---
#### Error 9: Ignoring System State
**❌ Wrong Example**:
```
(Prompt completely doesn't mention Sharpe Ratio)
```
**Error Reason**:
- Sharpe Ratio is core performance metric
- Ignoring it prevents AI from self-adjusting strategy
**✅ Correct Rewrite**:
```
Adjust strategy based on Sharpe Ratio:
- Sharpe < -0.5: Stop trading, observe at least 18 minutes
- Sharpe -0.5~0: Only trade confidence >80
- Sharpe 0~0.7: Maintain current strategy
- Sharpe > 0.7: Can moderately increase position
```
**Key Takeaway**:
- ✅ Do: Utilize Sharpe Ratio for self-evolution
- ❌ Don't: Ignore system-provided performance feedback
---
#### Error 10: Mode Configuration Error
**❌ Wrong Example**:
```
Set override_base_prompt = true
But custom Prompt doesn't include hard constraints and output format
```
**Error Reason**:
- Mode 3 completely overrides system defaults
- Missing hard constraints causes decision validation failure
**✅ Correct Rewrite**:
```
If using Mode 3, must include in custom Prompt:
1. All hard constraints (risk-reward ratio, position count, leverage, etc.)
2. Complete output format requirements (XML tags + JSON format)
```
**Key Takeaway**:
- ✅ Do: Beginners and intermediate use Modes 1 or 2
- ❌ Don't: Use Mode 3 without understanding system mechanics
---
### Data Flow Validation Best Practices
#### Validation Steps
**Step 1: View Actual Output**
```bash
# View system logs, find actual Prompt sent to AI
docker logs nofx-trader | grep "User Prompt"
```
**Step 2: Confirm Field Exists**
Check if fields you want to reference exist in actual output:
```
✅ Exists: "P&L Amount +59.50 USDT" → Can reference "P&L Amount"
❌ Doesn't exist: Don't see "KDJ" → Cannot reference KDJ indicator
```
**Step 3: Match Natural Language Labels**
```
Output: "P&L +2.38% | P&L Amount +59.50 USDT | Peak % 5.00%"
✅ Correct reference: "P&L %", "P&L Amount", "Peak %"
❌ Wrong reference: "pnl_pct", "unrealized_pnl", "peak_pnl"
```
---
### Field Naming Consistency Principle
#### Principle 1: Natural Language Priority
**Do**:
```
P&L Amount, Peak %, Margin, Leverage, Duration
```
**Don't**:
```
unrealized_pnl, peak_pnl_pct, margin_used, leverage, holding_duration
```
#### Principle 2: Exactly Match Code Output
**Code Output** (engine.go:387-390):
```
P&L +2.38% | P&L Amount +59.50 USDT | Peak % 5.00%
```
**Prompt Reference**:
```
✅ Correct: "If P&L Amount drawdown exceeds 50% of Peak %..."
❌ Wrong: "If unrealized_pnl drawdown exceeds 50% of peak_pnl_pct..."
```
---
### Open Source System Compatibility Considerations
#### Modification Impact Assessment
**Low Impact (Safe)**:
- ✅ Modify official template content
- ✅ Add custom strategy (Mode 2)
- ✅ Adjust entry condition parameters
**Medium Impact (Cautious)**:
- ⚠️ Modify field reference method
- ⚠️ Modify calculation formulas
**High Impact (Dangerous)**:
- ❌ Completely override hard constraints (Mode 3)
- ❌ Modify output format requirements
#### Best Practices
**1. Incremental Addition Over Modification**
- ✅ Add new rules on top of existing strategy
- ⚠️ Modify core logic
**2. Backward Compatibility**
- If system adds new fields, old Prompts still work
- New Prompts can utilize new fields
**3. Provide Migration Guide**
- For breaking changes, provide detailed migration instructions
---
## 🎓 Advanced Topics
### Mode 3: Complete Customization
⚠️ **Warning**: This mode only suitable for advanced users who fully understand system mechanics
#### Use Cases
- Need completely different trading philosophy
- Need custom risk control rules
- Need special output format
#### Must Include Content
Your custom Prompt must include:
1. **Core Strategy Description**
2. **All Hard Constraints** (risk-reward ratio, position count, position size, leverage limits, etc.)
3. **Output Format Requirements** (XML tags + JSON format)
#### Complete Template Framework
```
[Your Core Strategy]
# Hard Constraints
1. Risk-reward ratio ≥ 1:3
2. Maximum 3 positions
3. Single position: Altcoin 0.8-1.5x equity, BTC/ETH 5-10x equity
4. Leverage: Altcoin ≤5x, BTC/ETH ≤20x
5. Margin usage ≤ 90%
6. Minimum opening: General ≥12U, BTC/ETH ≥60U
# Output Format
Use <reasoning> and <decision> tags:
<reasoning>
Chain of thought analysis
</reasoning>
<decision>
```json
[{decision object}]
```
</decision>
```
#### Verification Checklist
- [ ] Includes all hard constraints
- [ ] Defines output format (XML + JSON)
- [ ] Strategy logic complete and consistent
- [ ] Thoroughly tested
---
### Debugging Guide
#### Problem 1: AI Output Format Error
**Symptom**: System error "JSON parsing failed"
**Investigation Steps**:
1. View AI raw output in logs
```bash
docker logs nofx-trader | tail -100
```
2. Check if XML tags `<reasoning>` and `<decision>` used
3. Check if JSON format correct
**Common Causes**:
- AI didn't use `<decision>` tag
- JSON contains Chinese comments
- JSON numbers include thousands separators (like 98,000)
- JSON uses range symbols (like "2000~3000")
**Solution**:
- Explicitly require XML tags in Prompt
- Emphasize JSON must strictly comply with format (no comments, no thousands separators)
- Reference [JSON Output Format Specification](#json-output-format-specification)
---
#### Problem 2: Decision Rejected
**Symptom**: System error "Decision validation failed"
**Investigation Steps**:
1. View specific validation error message
```bash
docker logs nofx-trader | grep "Validation failed"
```
2. Check if hard constraints violated
**Common Causes**:
- Risk-reward ratio < 1:3
- Leverage exceeds limits (Altcoin >5x, BTC/ETH >20x)
- Position size out of range
- Opening amount too small (<12 USDT or BTC/ETH <60 USDT)
**Solution**:
- Emphasize hard constraint requirements in Prompt
- Add self-check logic:
```
Before outputting decision, self-check:
- Is risk-reward ratio ≥ 1:3?
- Is leverage within limits?
- Does position size meet requirements?
```
---
#### Problem 3: AI Decisions Don't Meet Expectations
**Symptom**: AI's decisions don't match your expectations
**Investigation Steps**:
1. View AI's chain of thought analysis (reasoning)
```bash
docker logs nofx-trader | grep -A 20 "<reasoning>"
```
2. Check for ambiguities in Prompt
3. Check if market data meets your entry conditions
**Optimization Suggestions**:
- **Use More Specific Quantitative Indicators**
```
❌ Vague: "When market has long opportunity"
✅ Specific: "When MACD golden cross and RSI < 70 and volume surge > 20%"
```
- **Avoid Vague Expressions**
```
❌ Avoid: "feel", "might", "probably"
✅ Use: "when...", "if...then...", "must..."
```
- **Add Specific Numerical Thresholds**
```
❌ Vague: "Price significant rise"
✅ Specific: "Price rises >3% within 15 minutes"
```
- **Check Logic Consistency**
```
Entry and exit conditions should correspond
If entry based on MACD golden cross, exit can use MACD death cross
```
---
## 📞 Get Help
### Official Resources
- **GitHub Issues**: https://github.com/NoFxAiOS/nofx/issues
- **Official Documentation**: See project README
- **Community Discussion**: GitHub Discussions
### Question Template
When encountering issues, please provide the following information:
```
Problem Description: [Briefly describe the issue]
Usage Method: [Method 1/2/3]
Prompt Content:
```
[Paste your Prompt content]
```
Error Logs:
```
[Paste relevant error logs]
```
Expected Behavior: [What you expected]
Actual Behavior: [What actually happened]
```
---
## 📝 Changelog
### v1.0 (2025-01-09)
- Initial release
- Complete field reference documentation
- Three strategy templates (Conservative/Balanced/Aggressive)
- Quality checklist and common error cases
- Advanced topics and debugging guide
---
**Document Version**: v1.0
**Last Updated**: 2025-01-09
**Maintainer**: Nofx Team CoderMageFox