- Add unified coinhunter_shim.py that accepts subcommands (pre/gate/review/rotate-log) - Update SKILL.md gate pseudocode to read optional ~/.coinhunter/platform.json - Split cron/setup examples into Hermes and OpenClaw variants across docs - Introduce platform.json schema in user-data-layout.md - Remove stale auto_trader.py/run_trader.sh references from auto-trading-guide.md - Keep legacy shims as backward-compatible wrappers
203 lines
6.9 KiB
Markdown
203 lines
6.9 KiB
Markdown
# Automated Trading Guide for Coin Hunter
|
||
|
||
Complete guide for building and running a hands-off meme-coin trading bot using the Binance Spot API.
|
||
|
||
> Note: The CoinHunter CLI is an external PyPI package (`pipx install coinhunter`). All execution goes through the `coinhunter` command. Treat any references in this guide to local source directories, `coinhunter_cli.py`, or shell wrappers like `run_trader.sh` as legacy structure notes unless explicitly updated below.
|
||
|
||
## Scope
|
||
|
||
This guide covers:
|
||
- Creating a safe Binance API key
|
||
- Installing dependencies (ccxt, pandas, numpy)
|
||
- Setting up `auto_trader.py`
|
||
- Testing in `DRY_RUN` mode
|
||
- Scheduling execution with `cronjob`
|
||
- Critical safety rules and troubleshooting
|
||
|
||
## What the bot does
|
||
|
||
1. **Monitors existing positions** for stop-loss (-7%) and take-profit (+15% / +30%) levels
|
||
2. **Scans the market** for new meme-coin candidates (price < $1, 24h volume > $1M, 24h change > 5%)
|
||
3. **Dynamically sizes orders** based on the user's total USDT balance and a configurable allocation percentage
|
||
4. **Runs on a schedule** (default every 15 minutes) and reports actions back via Telegram
|
||
|
||
## Architecture
|
||
|
||
> **Note:** The current architecture uses the external `coinhunter` CLI (installed from PyPI) plus thin platform shims. The legacy local files (`auto_trader.py`, `run_trader.sh`) noted below are historical references only.
|
||
|
||
```
|
||
~/.coinhunter/
|
||
├── .env # API keys and secrets
|
||
├── positions.json # Portfolio state (shared with coinhunter)
|
||
├── state/ # Gate state and locks
|
||
├── logs/ # Execution logs
|
||
└── reviews/ # Hourly review reports
|
||
```
|
||
|
||
## Step 1: Binance API Key setup
|
||
|
||
1. Log in to Binance → **API Management**
|
||
2. Create a new API Key
|
||
3. Enable permissions:
|
||
- ✅ **Enable Reading**
|
||
- ✅ **Enable Spot & Margin Trading**
|
||
- ❌ **Disable Withdrawal** (security red line)
|
||
4. Add an **IP whitelist** (strongly recommended):
|
||
- Use the public IP of the machine that will run the bot
|
||
- This prevents key reuse if the credential is ever leaked
|
||
|
||
**Security reminder:** never paste API keys into chat messages. Write them into your platform's environment file (e.g. `~/.hermes/.env` or `~/.openclaw/.env`). You can also store them under `~/.coinhunter/.env` and source that file in your wrapper script.
|
||
|
||
## Step 2: Store credentials
|
||
|
||
Append to your environment file (check `platform.json` -> `env_file` if you have one, otherwise use your platform default):
|
||
|
||
```bash
|
||
cat >> ~/.coinhunter/.env << 'EOF'
|
||
BINANCE_API_KEY=your_api_key_here
|
||
BINANCE_API_SECRET=your_api_secret_here
|
||
EOF
|
||
```
|
||
|
||
## Step 3: Install dependencies
|
||
|
||
The bot uses `ccxt` for exchange connectivity and `pandas`/`numpy` for data handling.
|
||
|
||
```bash
|
||
uv pip install ccxt pandas numpy
|
||
```
|
||
|
||
Or if using a venv:
|
||
|
||
```bash
|
||
source venv/bin/activate
|
||
pip install ccxt pandas numpy
|
||
```
|
||
|
||
## Step 4: Deploy the bot
|
||
|
||
The trading logic is provided by the external `coinhunter` CLI. To run it automatically, deploy the platform shim and a small wrapper script.
|
||
|
||
If you need custom parameters (max positions, allocation percentage, stop-loss levels), configure them in `~/.coinhunter/config.json` and reference them from your wrapper script, or pass them as flags to `coinhunter exec`.
|
||
|
||
Example wrapper (`run_trader.sh`):
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
set -e
|
||
cd "$(dirname "$0")"
|
||
source ~/.coinhunter/.env
|
||
source /path/to/venv/bin/activate
|
||
export DRY_RUN=${DRY_RUN:-true}
|
||
coinhunter exec >> logs/trader.log 2>&1
|
||
```
|
||
|
||
Make executable:
|
||
|
||
```bash
|
||
chmod +x run_trader.sh
|
||
mkdir -p logs
|
||
```
|
||
|
||
## Step 5: Run a DRY_RUN test
|
||
|
||
```bash
|
||
DRY_RUN=true coinhunter exec
|
||
```
|
||
|
||
Expected behavior:
|
||
- Reads current positions from `positions.json`
|
||
- Fetches live Binance prices
|
||
- Prints PnL for each position
|
||
- Prints `[DRY RUN]` instead of real trades
|
||
- Does **not** move money
|
||
|
||
Only proceed to live trading after at least one dry-run cycle completes without errors.
|
||
|
||
## Step 6: Schedule with your platform's cron system
|
||
|
||
**Hermes example:**
|
||
|
||
```json
|
||
{
|
||
"action": "create",
|
||
"name": "Coin Hunter Auto Trader",
|
||
"schedule": "*/15 * * * *",
|
||
"deliver": "telegram",
|
||
"prompt": "Run the Coin Hunter automatic meme-coin trading bot.\n1. cd /home/<user>/.coinhunter\n2. ./run_trader.sh\n3. Summarize actions and report back."
|
||
}
|
||
```
|
||
|
||
**OpenClaw example:**
|
||
|
||
```json
|
||
{
|
||
"action": "create",
|
||
"name": "Coin Hunter Auto Trader",
|
||
"schedule": "*/15 * * * *",
|
||
"deliver": "webhook",
|
||
"prompt": "Run the Coin Hunter automatic meme-coin trading bot.\n1. cd /home/<user>/.coinhunter\n2. ./run_trader.sh\n3. Summarize actions and report back."
|
||
}
|
||
```
|
||
|
||
## Step 7: Switch to live trading
|
||
|
||
Once DRY_RUN validation succeeds and the user confirms:
|
||
|
||
1. Edit `run_trader.sh`
|
||
2. Change `DRY_RUN=${DRY_RUN:-true}` to `DRY_RUN=${DRY_RUN:-false}`
|
||
3. The next cron run will execute real orders
|
||
|
||
**You must always obtain explicit user confirmation before enabling live trading.**
|
||
|
||
## Key safety rules
|
||
|
||
1. **Never enable Withdrawal permission** on the API key.
|
||
2. **Always bind an IP whitelist** if possible.
|
||
3. **Never accept API keys in plaintext chat.** Ask the user to write them into their platform environment file (e.g. `~/.hermes/.env` or `~/.openclaw/.env`) or `~/.coinhunter/.env`.
|
||
4. **Do not set allocation to exactly 100%.** Leave at least 3–5% buffer for fees and slippage.
|
||
5. **Start with DRY_RUN.** Run at least one full cycle before going live.
|
||
6. **Check the account balance first.** If USDT is 0 (or held in Earn/Margin/Futures), the bot cannot trade.
|
||
7. **Educate the user about risks.** Automated bots can and will lose money during flash crashes, API errors, or black-swan events.
|
||
|
||
## Common pitfalls
|
||
|
||
### Ticker symbol mismatch
|
||
|
||
ccxt returns tickers with a slash (e.g., `PENGU/USDT`), but `positions.json` may store symbols without a slash (`PENGUUSDT`). If the bot looks up `tickers.get("PENGUUSDT")`, it will get `None` and silently skip stop-loss/take-profit checks.
|
||
|
||
**Fix:** normalize symbols before lookup:
|
||
|
||
```python
|
||
sym_ccxt = sym.replace("USDT", "/USDT") if "/" not in sym else sym
|
||
ticker = tickers.get(sym_ccxt)
|
||
```
|
||
|
||
### .env file is protected
|
||
|
||
The `patch` tool may reject edits to environment files. Use terminal redirection instead:
|
||
|
||
```bash
|
||
cat >> ~/.coinhunter/.env << 'EOF'
|
||
BINANCE_API_KEY=xxx
|
||
BINANCE_API_SECRET=yyy
|
||
EOF
|
||
```
|
||
|
||
### Zero balance surprises
|
||
|
||
The bot reads **Spot free balance**. If the user holds USDT in:
|
||
- Flexible Savings / Earn
|
||
- Margin account
|
||
- Futures wallet
|
||
- Another sub-account
|
||
|
||
…it will see $0 and fail to open new positions. Ask the user to transfer funds to Spot before going live.
|
||
|
||
## Customization ideas
|
||
|
||
- **Chain bias:** restrict candidate scanning to Solana-only or Base-only by filtering `cand["base"]` or integrating DexScreener chain filters.
|
||
- **Social signal integration:** add a Twitter/X sentiment check before opening a position.
|
||
- **Tiered stops:** replace fixed -7% with trailing stops using recent ATR or swing lows.
|
||
- **Blacklist expansion:** add recently rugged tickers to `BLACKLIST` based on on-chain data.
|