feat: split portfolio and opportunity decision models

This commit is contained in:
2026-04-20 16:13:57 +08:00
parent 4312b16288
commit 1da08415f1
10 changed files with 326 additions and 195 deletions

View File

@@ -70,6 +70,12 @@ BINANCE_API_KEY=
BINANCE_API_SECRET=
```
Strategy settings are split into three blocks:
- `[signal]` for shared market-signal weights and lookback interval
- `[opportunity]` for scan thresholds, liquidity filters, and top-N output
- `[portfolio]` for add/hold/trim/exit thresholds and max position weight
Override the default home directory with `COINHUNTER_HOME`.
## Commands
@@ -122,6 +128,8 @@ coinhunter catlog -n 10 -o 10
coinhunter config get # show all config
coinhunter config get binance.recv_window
coinhunter config set opportunity.top_n 20
coinhunter config set signal.lookback_interval 4h
coinhunter config set portfolio.max_position_weight 0.25
coinhunter config set trading.dry_run_default true
coinhunter config set market.universe_allowlist BTCUSDT,ETHUSDT
coinhunter config key YOUR_API_KEY # or omit value to prompt interactively
@@ -148,7 +156,7 @@ CoinHunter V2 uses a flat, direct architecture:
|-------|----------------|-----------|
| **CLI** | Single entrypoint, argument parsing | `cli.py` |
| **Binance** | Thin API wrappers with unified error handling | `binance/spot_client.py` |
| **Services** | Domain logic | `services/account_service.py`, `services/market_service.py`, `services/trade_service.py`, `services/opportunity_service.py` |
| **Services** | Domain logic | `services/account_service.py`, `services/market_service.py`, `services/signal_service.py`, `services/opportunity_service.py`, `services/portfolio_service.py`, `services/trade_service.py` |
| **Config** | TOML config, `.env` secrets, path resolution | `config.py` |
| **Runtime** | Paths, TUI/JSON/compact output | `runtime.py` |
| **Audit** | Structured JSONL logging | `audit.py` |