Overview
The Manual Trade Entry system allows you to manually inject trade opportunities that the bot will monitor and execute automatically, without waiting for normal signal generation. This is perfect for when you spot opportunities during manual market review that you don't want the bot to miss.
How It Works
🔄 Automatic Hot-Reload
- Add entries to
settings/manual_trade_symbols.yamlwhile the bot is running - Changes are picked up automatically within 30 seconds (next processing cycle)
- No restart required!
🎯 Trade Execution Flow
- You add a trade entry to the YAML file
- Bot detects the new entry on next cycle (≤30 seconds)
- Bot validates:
- Symbol exists in bot's trading list
- No running orders for that symbol
- Price conditions met (if threshold configured)
- Bot executes trade automatically
- Entry removed from YAML file after successful execution (prevents duplicates)
Configuration File Location
settings/manual_trade_symbols.yaml
Field Reference
Symbol (Required)
- Trading pair in exchange-specific format
- Examples:
BTCUSDT,ETHUSDT,1000PEPEUSDT - Must match exactly how it appears in your bot's symbol list
Price (Required)
0= Bot fetches and uses current market price (recommended)> 0= Use this specific price as entry reference- When set to
0, the bot will:- Fetch current market price
- Update this field in the YAML with the fetched price
- Use this price for threshold calculations on subsequent cycles
Direction (Required)
Long= Buy/long positionShort= Sell/short position
Amount (Required)
0= Use bot's default position sizing> 0= Override with specific amount (in quote currency)- Examples:
1000.0= $1000 position size2500.5= $2500.50 position size
ExecuteThresholdPerfect (Required)
0= Execute immediately (no price movement required)> 0= Wait for price to move by this percentage before executing- For LONG positions: Waits for price to DROP by this %
- For SHORT positions: Waits for price to RISE by this %
Timestamp (Optional)
- Use
nullor omit the field entirely - Bot automatically sets this when processing the entry
- Can be used in future for expiry validation
Usage Examples
Example 1: Immediate Entry (Spot an opportunity NOW)
Trades:
- Symbol: 'BTCUSDT'
Price: 0 # Use current price
Direction: Long # Go long
Amount: 0 # Use default sizing
ExecuteThresholdPerfect: 0 # Execute immediately
Timestamp: null
Use Case: You spot BTC breaking out and want to enter now.
Example 2: Buy the Dip (5% pullback strategy)
Trades:
- Symbol: 'ETHUSDT'
Price: 0 # Bot will fetch current price (e.g., $3000)
Direction: Long
Amount: 1000 # $1000 position
ExecuteThresholdPerfect: 5 # Wait for 5% drop (execute at ~$2850)
Timestamp: null
Use Case: ETH looks strong but slightly overextended. You want to buy if it pulls back 5%.
Example 3: Aggressive Dip Buy (10% retracement)
Trades:
- Symbol: '1000PEPEUSDT'
Price: 0
Direction: Long
Amount: 2000 # $2000 position
ExecuteThresholdPerfect: 10 # Wait for 10% drop
Timestamp: null
Use Case: PEPE is pumping hard. You want to accumulate if there's a significant pullback.
Example 4: Short the Pump (Wait for 3% rise)
Trades:
- Symbol: 'SOLUSDT'
Price: 0 # Bot fetches current price (e.g., $100)
Direction: Short # Short position
Amount: 1500
ExecuteThresholdPerfect: 3 # Execute when price rises 3% (to ~$103)
Timestamp: null
Use Case: SOL looks overextended. You want to short if it pumps another 3%.
Example 5: Multiple Entries at Different Levels
Trades:
# Immediate entry
- Symbol: 'BTCUSDT'
Price: 0
Direction: Long
Amount: 500
ExecuteThresholdPerfect: 0 # Enter now
Timestamp: null
# Add more on 5% dip
- Symbol: 'BTCUSDT'
Price: 0
Direction: Long
Amount: 1000
ExecuteThresholdPerfect: 5 # Add to position on 5% dip
Timestamp: null
# Add even more on 10% dip
- Symbol: 'BTCUSDT'
Price: 0
Direction: Long
Amount: 1500
ExecuteThresholdPerfect: 10 # Heavy accumulation on 10% dip
Timestamp: null
Use Case: Dollar-cost averaging into BTC at multiple price levels.
Important Notes
✅ DO's
- ✅ Keep the file valid YAML (proper indentation, no syntax errors)
- ✅ Use
nullfor Timestamp (notNone) - ✅ Use
LongorShortfor Direction (not 0 or 1) - ✅ Verify symbol names match your exchange format exactly
- ✅ Wait at least 30 seconds after adding entries for bot to pick them up
❌ DON'Ts
- ❌ Don't use
Nonefor Timestamp (usenullor omit it) - ❌ Don't use
0or1for Direction (useLongorShort) - ❌ Don't add entries for symbols the bot isn't monitoring
- ❌ Don't edit the file while bot is saving (rare race condition risk)
🔒 Safety Features
- No duplicate executions: Entries are removed after execution
- No conflicts: Won't execute if symbol already has running orders
- Price validation: Automatically fetches and updates prices when set to 0
- Timestamp tracking: Bot tracks when each entry was created
📊 Monitoring
Check the logs to see when entries are processed:
logs/orders.YYYY-MM-DD.log- All trade executions (JSON format)logs/trade_summary.YYYY-MM-DD.log- High-level summarieslogs/debug.YYYY-MM-DD.log- Detailed processing (if debug mode enabled)
Workflow Example
Step 1: You're reviewing charts and spot ETHUSDT breaking resistance
# Add to manual_trade_symbols.yaml
Trades:
- Symbol: 'ETHUSDT'
Price: 0
Direction: Long
Amount: 1000
ExecuteThresholdPerfect: 0
Timestamp: null
Step 2: Save the file (bot still running)
Step 3: Within 30 seconds, bot will:
- Load the file
- Fetch current ETH price (e.g., $3000)
- Update Price field to 3000 in the YAML
- Set Timestamp to current time
- Check if ETHUSDT bot has no running orders
- Execute the trade
- Remove the entry from YAML
Step 4: Check logs to confirm execution
✅ Trade executed successfully for ETHUSDT
💾 Manual trades config updated and saved (executed trades removed)
Pro Tips
💡 For volatile markets: Use higher thresholds (10-20%) to catch better entries
💡 For immediate opportunities: Use ExecuteThresholdPerfect: 0 and Amount: 0 for quick entries with standard sizing
💡 For scaling in: Add multiple entries with increasing thresholds for the same symbol
💡 For risk management: Use specific amounts instead of 0 to control position sizes precisely
💡 For multiple symbols: Group similar strategies together in the YAML for easier management
Remember: This system is designed to complement your manual analysis, not replace it. Use it wisely to capture opportunities the bot might miss during its normal signal generation cycles! 🚀