added logs for BUY, init README
This commit is contained in:
parent
fe9b04c177
commit
161ddf4065
110
README.md
Normal file
110
README.md
Normal file
@ -0,0 +1,110 @@
|
||||
# Multi-Currency Spot Trader (OKX + TA + Optional DeepSeek)
|
||||
|
||||
A pragmatic, menu-driven spot trading system for OKX.
|
||||
It fetches market data, computes robust technical signals, optionally blends an AI opinion, sizes positions under strict risk constraints, and executes market orders with dynamic trailing stops and full state persistence.
|
||||
|
||||
## Features
|
||||
|
||||
- **OKX official SDK** spot trading (market orders)
|
||||
- **Technical stack**: RSI/KDJ/MACD/Bollinger/ATR/MA/Stochastic + reversal detectors
|
||||
- **Decisioning**: TA weighted score + (optional) DeepSeek AI JSON action
|
||||
- **Risk control**: max portfolio allocations, fixed SL/TP, **trailing stops** that ratchet up
|
||||
- **Persistence**: SQLite for positions, trades, trailing stop state
|
||||
- **Multi-symbol orchestration** with a simple CLI control panel
|
||||
|
||||
## Project layout
|
||||
|
||||
```
|
||||
apiratelimiter.py # tiny per-API rate limiter
|
||||
database_manager.py # SQLite schema + CRUD for positions/trades/dynamic stops
|
||||
deepseekanalyzer.py # optional AI integration (BUY/SELL/HOLD + sell proportion)
|
||||
multistrategyrunner.py # threads per symbol, lifecycle, status
|
||||
okxapiclient.py # OKX SDK wrapper: candles, prices, balances, orders
|
||||
okxtrading2.0.py # CLI entrypoint (menu)
|
||||
riskmanager.py # portfolio sizing, limits, trailing parameters
|
||||
technicalanalyzer.py # indicators, signals, reversal detectors
|
||||
tradingstrategy.py # analysis→decision matrix→execution loop per symbol
|
||||
```
|
||||
|
||||
## Requirements
|
||||
|
||||
- Python 3.10+
|
||||
- Packages: `okx` (official SDK), `pandas`, `numpy`, `python-dotenv` (optional), plus stdlib.
|
||||
- An OKX API key with **trading permissions** for **spot**.
|
||||
> By default `tdMode` is set to `"cross"` and instruments are fetched with `instType='SPOT'`.
|
||||
|
||||
## Quick start
|
||||
|
||||
1) **Install deps**
|
||||
|
||||
```bash
|
||||
python -m venv .venv && source .venv/bin/activate
|
||||
pip install okx pandas numpy python-dotenv
|
||||
```
|
||||
|
||||
2) **Set environment variables**
|
||||
|
||||
Create `.env` (or export in your shell):
|
||||
|
||||
```dotenv
|
||||
# OKX (required)
|
||||
OKX_API_KEY=...
|
||||
OKX_SECRET_KEY=...
|
||||
OKX_PASSWORD=...
|
||||
|
||||
# Optional AI
|
||||
DEEPSEEK_API_KEY=...
|
||||
|
||||
# Risk/sizing (defaults shown)
|
||||
MAX_TOTAL_POSITION=1 # 100% portfolio cap
|
||||
MAX_SINGLE_POSITION=0.3 # 30% per symbol cap
|
||||
STOP_LOSS=0.05 # fixed SL 5%
|
||||
TAKE_PROFIT=0.15 # fixed TP 15%
|
||||
TRAILING_STOP_PERCENT=0.03 # 3% trail width
|
||||
MONITOR_INTERVAL=300 # seconds between trail checks
|
||||
DB_PATH=trading_system.db # sqlite path
|
||||
```
|
||||
|
||||
3) **Run the control panel**
|
||||
|
||||
```bash
|
||||
python okxtrading2.0.py
|
||||
```
|
||||
|
||||
You’ll see a menu:
|
||||
|
||||
- `Start All Strategies` — launch threads for all configured symbols
|
||||
- `Start/Stop Specific Strategy` — control a single market
|
||||
- `View System Status` — running flags, active symbols, stored positions
|
||||
- `Manual Position Sync` — reconcile on-exchange balances to local state
|
||||
- `Toggle Debug Mode` — echo OKX HTTP call codes
|
||||
|
||||
## How it trades (in one pass)
|
||||
|
||||
1. **Market data**: fetch latest candles for the symbol (`1H` by default).
|
||||
2. **Indicators**: compute RSI/KDJ/MACD/BB/ATR/MA/Stochastic and reversal hints.
|
||||
3. **Signals**: produce a weighted TA score and optional **DeepSeek** action.
|
||||
4. **Decision matrix**: combine AI, TA, support/resistance, market state into a total score → `BUY/SELL/HOLD` + confidence.
|
||||
5. **Sizing & risk**: compute size from portfolio constraints and market context (vol/trend/USDT ratio).
|
||||
6. **Execution**:
|
||||
- `BUY`: market buy using **quote amount (USDT)**; respects exchange **minSz**.
|
||||
- `SELL`: market sell using **base amount**; optional AI estimates a **sell proportion** (with sensible fallbacks).
|
||||
7. **Stops & persistence**:
|
||||
- Save position/trades to **SQLite**.
|
||||
- Set/ratchet **trailing stop** (and a symmetric dynamic take-profit band).
|
||||
- Background monitor checks triggers every `MONITOR_INTERVAL` seconds.
|
||||
|
||||
## Configuration
|
||||
|
||||
- **Symbols & cadence**: edit `symbol_configs` in `multistrategyrunner.py`:
|
||||
```python
|
||||
'ETH-USDT': {'name': 'Ethereum', 'interval': 1800, 'timeframe': '1H'}
|
||||
```
|
||||
- **Risk knobs**: tweak env vars in `.env` (caps, SL/TP, trailing %).
|
||||
- **Database**: change `DB_PATH` to relocate the SQLite file.
|
||||
|
||||
## Operational notes
|
||||
|
||||
- **AI is optional**: if `DEEPSEEK_API_KEY` is missing, system runs purely on TA with deterministic fallbacks.
|
||||
- **Min trade sizes**: on buy, system checks if `estimated_base_amount >= minSz`; on sell, blocks dust/too-small partials.
|
||||
- **Graceful shutdown**: Ctrl-C or menu exit triggers strategy/thread stops and monitor shutdown; state is persisted.
|
||||
@ -480,6 +480,9 @@ class TradingStrategy:
|
||||
logger.info(f"[{self.symbol}] Buy successful: quantity={fill_amount:.10f}, price=${fill_price:.2f}")
|
||||
logger.info(f"[{self.symbol}] Updated position: {self.symbol.split('-')[0]}={self.base_amount:.10f}")
|
||||
|
||||
# Save trade record
|
||||
self.db.save_trade_record(self.symbol, 'buy', fill_amount, fill_price, order_id)
|
||||
|
||||
# Sync exchange position
|
||||
self.sync_with_exchange()
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user