diff --git a/docs/architecture/README.md b/docs/architecture/README.md index 2aa6047c..4da12317 100644 --- a/docs/architecture/README.md +++ b/docs/architecture/README.md @@ -1,4 +1,4 @@ -# ๐Ÿ—๏ธ NOFX Architecture Documentation +# NOFX Architecture Documentation **Language:** [English](README.md) | [ไธญๆ–‡](README.zh-CN.md) @@ -6,570 +6,159 @@ Technical documentation for developers who want to understand NOFX internals. --- -## ๐Ÿ“‹ Overview +## Overview + +NOFX is a full-stack AI trading platform for cryptocurrency and US stock markets: -NOFX is a full-stack AI trading platform with: - **Backend:** Go (Gin framework, SQLite) - **Frontend:** React/TypeScript (Vite, TailwindCSS) -- **Architecture:** Microservice-inspired modular design +- **AI Models:** DeepSeek, Qwen, OpenAI (GPT-5.2), Claude, Gemini, Grok, Kimi +- **Exchanges:** Binance, Bybit, OKX, Hyperliquid, Aster, Lighter --- -## ๐Ÿ“ Project Structure +## System Architecture + +``` +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ NOFX Platform โ”‚ +โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค +โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚ +โ”‚ โ”‚ Strategy โ”‚ โ”‚ Backtest โ”‚ โ”‚ Debate โ”‚ โ”‚ Live Trading โ”‚โ”‚ +โ”‚ โ”‚ Studio โ”‚ โ”‚ Engine โ”‚ โ”‚ Arena โ”‚ โ”‚ (Auto Trader) โ”‚โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ Core Services โ”‚ โ”‚ +โ”‚ โ”‚ - Market Data โ”‚ โ”‚ +โ”‚ โ”‚ - AI Providers โ”‚ โ”‚ +โ”‚ โ”‚ - Risk Control โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ Exchanges โ”‚ โ”‚ Database โ”‚ โ”‚ Frontend UI โ”‚ โ”‚ +โ”‚ โ”‚ (CEX/DEX) โ”‚ โ”‚ (SQLite) โ”‚ โ”‚ (React SPA) โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ +``` + +--- + +## Module Documentation + +### Core Modules + +| Module | Description | Documentation | +|--------|-------------|---------------| +| **Strategy Studio** | Strategy configuration, coin selection, data assembly, AI prompts | [STRATEGY_MODULE.md](STRATEGY_MODULE.md) | +| **Backtest Engine** | Historical simulation, performance metrics, AI decision replay | [BACKTEST_MODULE.md](BACKTEST_MODULE.md) | +| **Debate Arena** | Multi-AI collaborative decision making with voting consensus | [DEBATE_MODULE.md](DEBATE_MODULE.md) | + +### Module Overview + +#### Strategy Module +Complete strategy configuration system including: +- Coin source selection (static list, AI500 pool, OI ranking) +- Market data indicators (K-lines, EMA, MACD, RSI, ATR) +- Prompt construction (system prompt, user prompt, sections) +- AI response parsing and decision execution +- Risk control enforcement + +**[Read Full Documentation โ†’](STRATEGY_MODULE.md)** + +#### Backtest Module +Historical trading simulation engine: +- Multi-symbol, multi-timeframe backtesting +- AI decision replay with caching +- Performance metrics (Sharpe, drawdown, win rate) +- Real-time progress streaming via SSE +- Checkpoint and resume support + +**[Read Full Documentation โ†’](BACKTEST_MODULE.md)** + +#### Debate Module +Multi-AI collaborative decision system: +- 5 AI personalities (Bull, Bear, Analyst, Contrarian, Risk Manager) +- Multi-round debate with market context +- Weighted voting and consensus algorithm +- Auto-execution to live trading +- Real-time SSE streaming + +**[Read Full Documentation โ†’](DEBATE_MODULE.md)** + +--- + +## Project Structure ``` nofx/ -โ”œโ”€โ”€ main.go # Program entry (multi-trader manager) -โ”œโ”€โ”€ config.json # ~~Multi-trader config~~ (Now via web interface) -โ”œโ”€โ”€ trading.db # SQLite database (traders, models, exchanges) -โ”‚ -โ”œโ”€โ”€ api/ # HTTP API service -โ”‚ โ””โ”€โ”€ server.go # Gin framework, RESTful API -โ”‚ -โ”œโ”€โ”€ trader/ # Trading core -โ”‚ โ”œโ”€โ”€ auto_trader.go # Auto trading main controller -โ”‚ โ”œโ”€โ”€ interface.go # Unified trader interface -โ”‚ โ”œโ”€โ”€ binance_futures.go # Binance API wrapper -โ”‚ โ”œโ”€โ”€ hyperliquid_trader.go # Hyperliquid DEX wrapper -โ”‚ โ””โ”€โ”€ aster_trader.go # Aster DEX wrapper -โ”‚ -โ”œโ”€โ”€ manager/ # Multi-trader management -โ”‚ โ””โ”€โ”€ trader_manager.go # Manages multiple trader instances -โ”‚ -โ”œโ”€โ”€ config/ # Configuration & database -โ”‚ โ””โ”€โ”€ database.go # SQLite operations and schema -โ”‚ -โ”œโ”€โ”€ auth/ # Authentication -โ”‚ โ””โ”€โ”€ jwt.go # JWT token management & 2FA -โ”‚ -โ”œโ”€โ”€ mcp/ # Model Context Protocol - AI communication -โ”‚ โ””โ”€โ”€ client.go # AI API client (DeepSeek/Qwen/Custom) -โ”‚ -โ”œโ”€โ”€ decision/ # AI decision engine -โ”‚ โ”œโ”€โ”€ engine.go # Decision logic with historical feedback -โ”‚ โ””โ”€โ”€ prompt_manager.go # Prompt template system -โ”‚ -โ”œโ”€โ”€ market/ # Market data fetching -โ”‚ โ””โ”€โ”€ data.go # Market data & technical indicators (TA-Lib) -โ”‚ โ””โ”€โ”€ api_client.go # Market data acquisition API -โ”‚ โ””โ”€โ”€ websocket_client.go # Market data acquisition WebSocket interface -โ”‚ โ””โ”€โ”€ combined_streams.go # Market data acquisition: Combined streaming (single link to subscribe to multiple cryptocurrencies) -โ”‚ โ””โ”€โ”€ monitor.go # Market data cache -โ”‚ โ””โ”€โ”€ types.go # market structure - -โ”œโ”€โ”€ provider/ # Data provider management -โ”‚ โ””โ”€โ”€ data_provider.go # AI500 + OI Top data provider -โ”‚ -โ”œโ”€โ”€ logger/ # Logging system -โ”‚ โ””โ”€โ”€ decision_logger.go # Decision recording + performance analysis -โ”‚ -โ”œโ”€โ”€ decision_logs/ # Decision log storage (JSON files) -โ”‚ โ”œโ”€โ”€ {trader_id}/ # Per-trader logs -โ”‚ โ””โ”€โ”€ {timestamp}.json # Individual decisions -โ”‚ -โ””โ”€โ”€ web/ # React frontend - โ”œโ”€โ”€ src/ - โ”‚ โ”œโ”€โ”€ components/ # React components - โ”‚ โ”‚ โ”œโ”€โ”€ EquityChart.tsx # Equity curve chart - โ”‚ โ”‚ โ”œโ”€โ”€ ComparisonChart.tsx # Multi-AI comparison chart - โ”‚ โ”‚ โ””โ”€โ”€ CompetitionPage.tsx # Competition leaderboard - โ”‚ โ”œโ”€โ”€ lib/api.ts # API call wrapper - โ”‚ โ”œโ”€โ”€ types/index.ts # TypeScript types - โ”‚ โ”œโ”€โ”€ stores/ # Zustand state management - โ”‚ โ”œโ”€โ”€ index.css # Binance-style CSS - โ”‚ โ””โ”€โ”€ App.tsx # Main app - โ”œโ”€โ”€ package.json # Frontend dependencies - โ””โ”€โ”€ vite.config.ts # Vite configuration +โ”œโ”€โ”€ main.go # Entry point +โ”œโ”€โ”€ api/ # HTTP API (Gin framework) +โ”œโ”€โ”€ trader/ # Trading execution layer +โ”œโ”€โ”€ strategy/ # Strategy engine +โ”œโ”€โ”€ backtest/ # Backtest simulation engine +โ”œโ”€โ”€ debate/ # Debate arena engine +โ”œโ”€โ”€ market/ # Market data service +โ”œโ”€โ”€ mcp/ # AI model clients +โ”œโ”€โ”€ store/ # Database operations +โ”œโ”€โ”€ auth/ # JWT authentication +โ”œโ”€โ”€ manager/ # Multi-trader management +โ””โ”€โ”€ web/ # React frontend + โ”œโ”€โ”€ src/pages/ # Page components + โ”œโ”€โ”€ src/components/ # Shared components + โ””โ”€โ”€ src/lib/api.ts # API client ``` --- -## ๐Ÿ”ง Core Dependencies +## Core Dependencies ### Backend (Go) -| Package | Purpose | Version | -|---------|---------|---------| -| `github.com/gin-gonic/gin` | HTTP API framework | v1.9+ | -| `github.com/adshao/go-binance/v2` | Binance API client | v2.4+ | -| `github.com/markcheno/go-talib` | Technical indicators (TA-Lib) | Latest | -| `github.com/lib/pq` | PostgreSQL database driver | v1.10+ | -| `github.com/golang-jwt/jwt/v5` | JWT authentication | v5.0+ | -| `github.com/pquerna/otp` | 2FA/TOTP support | v1.4+ | -| `golang.org/x/crypto` | Password hashing (bcrypt) | Latest | +| Package | Purpose | +|---------|---------| +| `gin-gonic/gin` | HTTP API framework | +| `adshao/go-binance` | Binance API client | +| `markcheno/go-talib` | Technical indicators | +| `golang-jwt/jwt` | JWT authentication | -### Frontend (React + TypeScript) +### Frontend (React) -| Package | Purpose | Version | -|---------|---------|---------| -| `react` + `react-dom` | UI framework | 18.3+ | -| `typescript` | Type safety | 5.8+ | -| `vite` | Build tool | 6.0+ | -| `recharts` | Charts (equity, comparison) | 2.15+ | -| `swr` | Data fetching & caching | 2.2+ | -| `zustand` | State management | 5.0+ | -| `tailwindcss` | CSS framework | 3.4+ | -| `lucide-react` | Icon library | Latest | +| Package | Purpose | +|---------|---------| +| `react` | UI framework | +| `recharts` | Charts and visualizations | +| `swr` | Data fetching | +| `zustand` | State management | +| `tailwindcss` | CSS framework | --- -## ๐Ÿ—‚๏ธ System Architecture +## Quick Links -### High-Level Overview - -``` -โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -โ”‚ PRESENTATION LAYER โ”‚ -โ”‚ React SPA (Vite + TypeScript + TailwindCSS) โ”‚ -โ”‚ - Competition dashboard, trader management UI โ”‚ -โ”‚ - Real-time charts (Recharts), authentication pages โ”‚ -โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - โ†“ HTTP/JSON API -โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -โ”‚ API LAYER (Gin Router) โ”‚ -โ”‚ /api/traders, /api/status, /api/positions, /api/decisions โ”‚ -โ”‚ Authentication middleware (JWT), CORS handling โ”‚ -โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - โ†“ -โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -โ”‚ BUSINESS LOGIC LAYER โ”‚ -โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ -โ”‚ โ”‚ TraderManager โ”‚ โ”‚ DecisionEngine โ”‚ โ”‚ MarketData โ”‚ โ”‚ -โ”‚ โ”‚ - Multi-trader โ”‚ โ”‚ - AI reasoning โ”‚ โ”‚ - K-lines โ”‚ โ”‚ -โ”‚ โ”‚ orchestration โ”‚ โ”‚ - Risk control โ”‚ โ”‚ - Indicators โ”‚ โ”‚ -โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ -โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - โ†“ -โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -โ”‚ DATA ACCESS LAYER โ”‚ -โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ -โ”‚ โ”‚ SQLite DB โ”‚ โ”‚ File Logger โ”‚ โ”‚ External APIs โ”‚ โ”‚ -โ”‚ โ”‚ - Traders โ”‚ โ”‚ - Decisions โ”‚ โ”‚ - Binance โ”‚ โ”‚ -โ”‚ โ”‚ - Models โ”‚ โ”‚ - Performanceโ”‚ โ”‚ - Hyperliquid โ”‚ โ”‚ -โ”‚ โ”‚ - Exchanges โ”‚ โ”‚ analysis โ”‚ โ”‚ - Aster โ”‚ โ”‚ -โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ -โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ -``` - -### Component Diagram - -*(Coming soon: detailed component interaction diagram)* +- [Strategy Module](STRATEGY_MODULE.md) - How strategies work +- [Backtest Module](BACKTEST_MODULE.md) - How backtesting works +- [Debate Module](DEBATE_MODULE.md) - How AI debates work +- [Getting Started](../getting-started/README.md) - Setup guide +- [FAQ](../faq/README.md) - Frequently asked questions --- -## ๐Ÿ“š Core Modules - -### 1. Trader System (`trader/`) - -**Purpose:** Trading execution layer with multi-exchange support - -**Key Files:** -- `auto_trader.go` - Main trading orchestrator (100+ lines) -- `interface.go` - Unified trader interface -- `binance_futures.go` - Binance API wrapper -- `hyperliquid_trader.go` - Hyperliquid DEX wrapper -- `aster_trader.go` - Aster DEX wrapper - -**Design Pattern:** Strategy pattern with interface-based abstraction - -**Example:** -```go -type ExchangeClient interface { - GetAccount() (*AccountInfo, error) - GetPositions() ([]*Position, error) - CreateOrder(*OrderParams) (*Order, error) - // ... more methods -} -``` - ---- - -### 2. Decision Engine (`decision/`) - -**Purpose:** AI-powered trading decision making - -**Key Files:** -- `engine.go` - Decision logic with historical feedback -- `prompt_manager.go` - Template system for AI prompts - -**Features:** -- Chain-of-Thought reasoning -- Historical performance analysis -- Risk-aware decision making -- Multi-model support (DeepSeek, Qwen, custom) - -**Flow:** -``` -Historical Data โ†’ Prompt Generation โ†’ AI API Call โ†’ -Decision Parsing โ†’ Risk Validation โ†’ Execution -``` - ---- - -### 3. Market Data System (`market/`) - -**Purpose:** Fetch and analyze market data - -**Key Files:** -- `data.go` - Market data fetching and technical indicators - -**Features:** -- Multi-timeframe K-line data (3min, 4hour) -- Technical indicators via TA-Lib: - - EMA (20, 50) - - MACD - - RSI (7, 14) - - ATR (volatility) -- Open Interest tracking - ---- - -### 4. Manager (`manager/`) - -**Purpose:** Multi-trader orchestration - -**Key Files:** -- `trader_manager.go` - Manages multiple trader instances - -**Responsibilities:** -- Trader lifecycle (start, stop, restart) -- Resource allocation -- Concurrent execution coordination - ---- - -### 5. API Server (`api/`) - -**Purpose:** HTTP API for frontend communication - -**Key Files:** -- `server.go` - Gin framework RESTful API - -**Endpoints:** -``` -GET /api/traders # List all traders -POST /api/traders # Create trader -POST /api/traders/:id/start # Start trader -GET /api/status # System status -GET /api/positions # Current positions -GET /api/decisions/latest # Recent decisions -``` - ---- - -### 6. Database Layer (`config/`) - -**Purpose:** SQLite data persistence - -**Key Files:** -- `database.go` - Database operations and schema - -**Tables:** -- `users` - User accounts (with 2FA support) -- `ai_models` - AI model configurations -- `exchanges` - Exchange credentials -- `traders` - Trader instances -- `equity_history` - Performance tracking -- `system_config` - Application settings - ---- - -### 7. Authentication (`auth/`) - -**Purpose:** User authentication and authorization - -**Features:** -- JWT token-based auth -- 2FA with TOTP (Google Authenticator) -- Bcrypt password hashing -- Admin mode (simplified single-user) - ---- - -## ๐Ÿ”„ Request Flow Examples - -### Example 1: Create New Trader - -``` -User Action (Frontend) - โ†“ -POST /api/traders - โ†“ -API Server (auth middleware) - โ†“ -Database.CreateTrader() - โ†“ -TraderManager.StartTrader() - โ†“ -AutoTrader.Run() โ†’ goroutine - โ†“ -Response: {trader_id, status} -``` - -### Example 2: Trading Decision Cycle - -``` -AutoTrader (every 3-5 min) - โ†“ -1. FetchAccountStatus() - โ†“ -2. GetOpenPositions() - โ†“ -3. FetchMarketData() โ†’ TA-Lib indicators - โ†“ -4. AnalyzeHistory() โ†’ last 20 trades - โ†“ -5. GeneratePrompt() โ†’ full context - โ†“ -6. CallAI() โ†’ DeepSeek/Qwen - โ†“ -7. ParseDecision() โ†’ structured output - โ†“ -8. ValidateRisk() โ†’ position limits, margin - โ†“ -9. ExecuteOrders() โ†’ exchange API - โ†“ -10. LogDecision() โ†’ JSON file + database -``` - ---- - -## ๐Ÿ“Š Data Flow - -### Market Data Flow - -``` -Exchange API - โ†“ -market.FetchKlines() - โ†“ -TA-Lib.Calculate(EMA, MACD, RSI) - โ†“ -DecisionEngine (as context) - โ†“ -AI Model (reasoning) -``` - -### Decision Logging Flow - -``` -AI Response - โ†“ -decision_logger.go - โ†“ -JSON file: decision_logs/{trader_id}/{timestamp}.json - โ†“ -Database: performance tracking - โ†“ -Frontend: /api/decisions/latest -``` - ---- - -## ๐Ÿ—„๏ธ Database Schema - -### Core Tables - -**users** -```sql -- id (INTEGER PRIMARY KEY) -- username (TEXT UNIQUE) -- password_hash (TEXT) -- totp_secret (TEXT) -- is_admin (BOOLEAN) -- created_at (DATETIME) -``` - -**ai_models** -```sql -- id (INTEGER PRIMARY KEY) -- name (TEXT) -- model_type (TEXT) -- deepseek, qwen, custom -- api_key (TEXT) -- api_url (TEXT) -- enabled (BOOLEAN) -``` - -**traders** -```sql -- id (TEXT PRIMARY KEY) -- name (TEXT) -- ai_model_id (INTEGER FK) -- exchange_id (INTEGER FK) -- initial_balance (REAL) -- current_equity (REAL) -- status (TEXT) -- running, stopped -- created_at (DATETIME) -``` - -*(More details: database-schema.md - coming soon)* - ---- - -## ๐Ÿ”Œ API Reference - -### Authentication - -**POST /api/auth/login** -```json -Request: { - "username": "string", - "password": "string", - "totp_code": "string" // optional -} - -Response: { - "token": "jwt_token", - "user": {...} -} -``` - -### Trader Management - -**GET /api/traders** -```json -Response: { - "traders": [ - { - "id": "string", - "name": "string", - "status": "running|stopped", - "balance": 1000.0, - "roi": 5.2 - } - ] -} -``` - -*(Full API reference: api-reference.md - coming soon)* - ---- - -## ๐Ÿงช Testing Architecture - -### Current State -- โš ๏ธ No unit tests yet -- โš ๏ธ Manual testing only -- โš ๏ธ Testnet verification - -### Planned Testing Strategy - -**Unit Tests (Priority 1)** -``` -trader/binance_futures_test.go -- Mock API responses -- Test precision handling -- Validate order construction -``` - -**Integration Tests (Priority 2)** -``` -- End-to-end trading flow (testnet) -- Multi-trader scenarios -- Database operations -``` - -**Frontend Tests (Priority 3)** -``` -- Component tests (Vitest + React Testing Library) -- API integration tests -- E2E tests (Playwright) -``` - -*(Testing guide: testing-guide.md - coming soon)* - ---- - -## ๐Ÿ”ง Development Tools - -### Build & Run - -```bash -# Backend -go build -o nofx -./nofx - -# Frontend -cd web -npm run dev - -# Docker -docker compose up --build -``` - -### Code Quality - -```bash -# Format Go code -go fmt ./... - -# Lint (if configured) -golangci-lint run - -# Type check TypeScript -cd web && npm run build -``` - ---- - -## ๐Ÿ“ˆ Performance Considerations - -### Backend -- **Concurrency:** Each trader runs in separate goroutine -- **Database:** SQLite (good for <100 traders) -- **API Rate Limits:** Handled per exchange -- **Memory:** ~50-100MB per trader - -### Frontend -- **Data Fetching:** SWR with 5-10s polling -- **State:** Zustand (lightweight) -- **Bundle Size:** ~500KB (gzipped) - ---- - -## ๐Ÿ”ฎ Future Architecture Plans - -### Planned Improvements - -1. **Microservices Split** (if scaling needed) - - Separate decision engine service - - Market data service - - Execution service - -2. **Database Migration** - - Mysql for production (>100 traders) - - Redis for caching - -3. **Event-Driven Architecture** - - WebSocket for real-time updates - - Message queue (RabbitMQ/NATS) - -4. **Kubernetes Deployment** - - Helm charts - - Auto-scaling - - High availability - ---- - -## ๐Ÿ†˜ For Developers +## For Developers **Want to contribute?** -- Read [Contributing Guide](../../CONTRIBUTING.md) -- Check [Open Issues](https://github.com/tinkle-community/nofx/issues) -- Join [Telegram Community](https://t.me/nofx_dev_community) +- Read the module documentation above +- Check [Open Issues](https://github.com/NoFxAiOS/nofx/issues) +- Join our community -**Need clarification?** -- Open a [GitHub Discussion](https://github.com/tinkle-community/nofx/discussions) -- Ask in Telegram +**Repository:** https://github.com/NoFxAiOS/nofx --- -## ๐Ÿ“š Related Documentation - -- [Getting Started](../getting-started/README.md) - Setup and deployment -- [Contributing](../../CONTRIBUTING.md) - How to contribute -- [Community](../community/README.md) - Bounties and recognition - ---- - -[โ† Back to Documentation Home](../README.md) +[โ† Back to Documentation](../README.md) diff --git a/docs/architecture/README.zh-CN.md b/docs/architecture/README.zh-CN.md index a376ba3a..995d3200 100644 --- a/docs/architecture/README.zh-CN.md +++ b/docs/architecture/README.zh-CN.md @@ -1,4 +1,4 @@ -# ๐Ÿ—๏ธ NOFX ๆžถๆž„ๆ–‡ๆกฃ +# NOFX ๆžถๆž„ๆ–‡ๆกฃ **่ฏญ่จ€:** [English](README.md) | [ไธญๆ–‡](README.zh-CN.md) @@ -6,568 +6,158 @@ --- -## ๐Ÿ“‹ ๆฆ‚่ฟฐ +## ๆฆ‚่ฟฐ -NOFX ๆ˜ฏไธ€ไธชๅ…จๆ ˆ AI ไบคๆ˜“ๅนณๅฐ๏ผš -- **ๅŽ็ซฏ๏ผš** Go (Gin ๆก†ๆžถ, SQLite) -- **ๅ‰็ซฏ๏ผš** React/TypeScript (Vite, TailwindCSS) -- **ๆžถๆž„๏ผš** ๅพฎๆœๅŠกๅฏๅ‘็š„ๆจกๅ—ๅŒ–่ฎพ่ฎก +NOFX ๆ˜ฏไธ€ไธชๆ”ฏๆŒๅŠ ๅฏ†่ดงๅธๅ’Œ็พŽ่‚กๅธ‚ๅœบ็š„ๅ…จๆ ˆ AI ไบคๆ˜“ๅนณๅฐ๏ผš + +- **ๅŽ็ซฏ:** Go (Gin ๆก†ๆžถ, SQLite) +- **ๅ‰็ซฏ:** React/TypeScript (Vite, TailwindCSS) +- **AI ๆจกๅž‹:** DeepSeek, Qwen, OpenAI (GPT-5.2), Claude, Gemini, Grok, Kimi +- **ไบคๆ˜“ๆ‰€:** Binance, Bybit, OKX, Hyperliquid, Aster, Lighter --- -## ๐Ÿ“ ้กน็›ฎ็ป“ๆž„ +## ็ณป็ปŸๆžถๆž„ + +``` +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ NOFX ๅนณๅฐ โ”‚ +โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค +โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚ +โ”‚ โ”‚ ็ญ–็•ฅ โ”‚ โ”‚ ๅ›žๆต‹ โ”‚ โ”‚ ่พฉ่ฎบ โ”‚ โ”‚ ๅฎž็›˜ไบคๆ˜“ โ”‚โ”‚ +โ”‚ โ”‚ ๅทฅไฝœๅฎค โ”‚ โ”‚ ๅผ•ๆ“Ž โ”‚ โ”‚ ็ซžๆŠ€ๅœบ โ”‚ โ”‚ (่‡ชๅŠจไบคๆ˜“ๅ‘˜) โ”‚โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ๆ ธๅฟƒๆœๅŠก โ”‚ โ”‚ +โ”‚ โ”‚ - ่กŒๆƒ…ๆ•ฐๆฎ โ”‚ โ”‚ +โ”‚ โ”‚ - AI ๆจกๅž‹ โ”‚ โ”‚ +โ”‚ โ”‚ - ้ฃŽ้™ฉๆŽงๅˆถ โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ +โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ +โ”‚ โ”‚ ไบคๆ˜“ๆ‰€ โ”‚ โ”‚ ๆ•ฐๆฎๅบ“ โ”‚ โ”‚ ๅ‰็ซฏ UI โ”‚ โ”‚ +โ”‚ โ”‚ (CEX/DEX) โ”‚ โ”‚ (SQLite) โ”‚ โ”‚ (React SPA) โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ +โ”‚ โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ +``` + +--- + +## ๆจกๅ—ๆ–‡ๆกฃ + +### ๆ ธๅฟƒๆจกๅ— + +| ๆจกๅ— | ๆ่ฟฐ | ๆ–‡ๆกฃ | +|------|------|------| +| **็ญ–็•ฅๅทฅไฝœๅฎค** | ็ญ–็•ฅ้…็ฝฎใ€ๅธ็ง้€‰ๆ‹ฉใ€ๆ•ฐๆฎ็ป„่ฃ…ใ€AI ๆ็คบ่ฏ | [STRATEGY_MODULE.md](STRATEGY_MODULE.md) | +| **ๅ›žๆต‹ๅผ•ๆ“Ž** | ๅކๅฒๆจกๆ‹Ÿใ€ๆ€ง่ƒฝๆŒ‡ๆ ‡ใ€AI ๅ†ณ็ญ–ๅ›žๆ”พ | [BACKTEST_MODULE.md](BACKTEST_MODULE.md) | +| **่พฉ่ฎบ็ซžๆŠ€ๅœบ** | ๅคš AI ๅไฝœๅ†ณ็ญ–๏ผŒๆŠ•็ฅจๅ…ฑ่ฏ†ๆœบๅˆถ | [DEBATE_MODULE.md](DEBATE_MODULE.md) | + +### ๆจกๅ—ๆฆ‚่งˆ + +#### ็ญ–็•ฅๆจกๅ— +ๅฎŒๆ•ด็š„็ญ–็•ฅ้…็ฝฎ็ณป็ปŸ๏ผŒๅŒ…ๆ‹ฌ๏ผš +- ๅธ็งๆฅๆบ้€‰ๆ‹ฉ๏ผˆ้™ๆ€ๅˆ—่กจใ€AI500 ๅธๆฑ ใ€OI ๆŽ’่กŒ๏ผ‰ +- ๅธ‚ๅœบๆ•ฐๆฎๆŒ‡ๆ ‡๏ผˆK็บฟใ€EMAใ€MACDใ€RSIใ€ATR๏ผ‰ +- ๆ็คบ่ฏๆž„ๅปบ๏ผˆ็ณป็ปŸๆ็คบ่ฏใ€็”จๆˆทๆ็คบ่ฏใ€ๅˆ†ๆฎต้…็ฝฎ๏ผ‰ +- AI ๅ“ๅบ”่งฃๆžๅ’Œๅ†ณ็ญ–ๆ‰ง่กŒ +- ้ฃŽ้™ฉๆŽงๅˆถๅผบๅˆถๆ‰ง่กŒ + +**[้˜…่ฏปๅฎŒๆ•ดๆ–‡ๆกฃ โ†’](STRATEGY_MODULE.md)** + +#### ๅ›žๆต‹ๆจกๅ— +ๅކๅฒไบคๆ˜“ๆจกๆ‹Ÿๅผ•ๆ“Ž๏ผš +- ๅคšๅธ็งใ€ๅคšๆ—ถ้—ดๅ‘จๆœŸๅ›žๆต‹ +- AI ๅ†ณ็ญ–ๅ›žๆ”พไธŽ็ผ“ๅญ˜ +- ๆ€ง่ƒฝๆŒ‡ๆ ‡๏ผˆๅคๆ™ฎๆฏ”็އใ€ๆœ€ๅคงๅ›žๆ’คใ€่ƒœ็އ๏ผ‰ +- SSE ๅฎžๆ—ถ่ฟ›ๅบฆๆŽจ้€ +- ๆ–ญ็‚น็ปญๆต‹ๆ”ฏๆŒ + +**[้˜…่ฏปๅฎŒๆ•ดๆ–‡ๆกฃ โ†’](BACKTEST_MODULE.md)** + +#### ่พฉ่ฎบๆจกๅ— +ๅคš AI ๅไฝœๅ†ณ็ญ–็ณป็ปŸ๏ผš +- 5 ็ง AI ๆ€งๆ ผ๏ผˆๅคšๅคดใ€็ฉบๅคดใ€ๅˆ†ๆžๅธˆใ€้€†ๅŠฟ่€…ใ€้ฃŽๆŽง๏ผ‰ +- ๅคš่ฝฎ่พฉ่ฎบไธŽๅธ‚ๅœบๆ•ฐๆฎไธŠไธ‹ๆ–‡ +- ๅŠ ๆƒๆŠ•็ฅจไธŽๅ…ฑ่ฏ†็ฎ—ๆณ• +- ่‡ชๅŠจๆ‰ง่กŒๅˆฐๅฎž็›˜ไบคๆ˜“ +- SSE ๅฎžๆ—ถๆตๆŽจ้€ + +**[้˜…่ฏปๅฎŒๆ•ดๆ–‡ๆกฃ โ†’](DEBATE_MODULE.md)** + +--- + +## ้กน็›ฎ็ป“ๆž„ ``` nofx/ -โ”œโ”€โ”€ main.go # ็จ‹ๅบๅ…ฅๅฃ๏ผˆๅคšไบคๆ˜“ๅ‘˜็ฎก็†ๅ™จ๏ผ‰ -โ”œโ”€โ”€ config.json # ~~ๅคšไบคๆ˜“ๅ‘˜้…็ฝฎ~~ (็Žฐ้€š่ฟ‡Web็•Œ้ข) -โ”œโ”€โ”€ trading.db # SQLite ๆ•ฐๆฎๅบ“๏ผˆไบคๆ˜“ๅ‘˜ใ€ๆจกๅž‹ใ€ไบคๆ˜“ๆ‰€๏ผ‰ -โ”‚ -โ”œโ”€โ”€ api/ # HTTP API ๆœๅŠก -โ”‚ โ””โ”€โ”€ server.go # Gin ๆก†ๆžถ๏ผŒRESTful API -โ”‚ -โ”œโ”€โ”€ trader/ # ไบคๆ˜“ๆ ธๅฟƒ -โ”‚ โ”œโ”€โ”€ auto_trader.go # ่‡ชๅŠจไบคๆ˜“ไธปๆŽงๅˆถๅ™จ -โ”‚ โ”œโ”€โ”€ interface.go # ็ปŸไธ€ไบคๆ˜“ๅ‘˜ๆŽฅๅฃ -โ”‚ โ”œโ”€โ”€ binance_futures.go # Binance API ๅŒ…่ฃ…ๅ™จ -โ”‚ โ”œโ”€โ”€ hyperliquid_trader.go # Hyperliquid DEX ๅŒ…่ฃ…ๅ™จ -โ”‚ โ””โ”€โ”€ aster_trader.go # Aster DEX ๅŒ…่ฃ…ๅ™จ -โ”‚ -โ”œโ”€โ”€ manager/ # ๅคšไบคๆ˜“ๅ‘˜็ฎก็† -โ”‚ โ””โ”€โ”€ trader_manager.go # ็ฎก็†ๅคšไธชไบคๆ˜“ๅ‘˜ๅฎžไพ‹ -โ”‚ -โ”œโ”€โ”€ config/ # ้…็ฝฎไธŽๆ•ฐๆฎๅบ“ -โ”‚ โ””โ”€โ”€ database.go # SQLite ๆ“ไฝœๅ’Œๆจกๅผ -โ”‚ -โ”œโ”€โ”€ auth/ # ่ฎค่ฏ -โ”‚ โ””โ”€โ”€ jwt.go # JWT token ็ฎก็† & 2FA -โ”‚ -โ”œโ”€โ”€ mcp/ # Model Context Protocol - AI ้€šไฟก -โ”‚ โ””โ”€โ”€ client.go # AI API ๅฎขๆˆท็ซฏ๏ผˆDeepSeek/Qwen/่‡ชๅฎšไน‰๏ผ‰ -โ”‚ -โ”œโ”€โ”€ decision/ # AI ๅ†ณ็ญ–ๅผ•ๆ“Ž -โ”‚ โ”œโ”€โ”€ engine.go # ๅธฆๅކๅฒๅ้ฆˆ็š„ๅ†ณ็ญ–้€ป่พ‘ -โ”‚ โ””โ”€โ”€ prompt_manager.go # ๆ็คบ่ฏๆจกๆฟ็ณป็ปŸ -โ”‚ -โ”œโ”€โ”€ market/ # ๅธ‚ๅœบๆ•ฐๆฎ่Žทๅ– -โ”‚ โ””โ”€โ”€ data.go # ๅธ‚ๅœบๆ•ฐๆฎไธŽๆŠ€ๆœฏๆŒ‡ๆ ‡๏ผˆTA-Lib๏ผ‰ -โ”‚ โ””โ”€โ”€ api_client.go # ่กŒๆƒ…่Žทๅ– ApiๆŽฅๅฃ -โ”‚ โ””โ”€โ”€ websocket_client.go # ่กŒๆƒ…่Žทๅ– WebsocketๆŽฅๅฃ -โ”‚ โ””โ”€โ”€ combined_streams.go # ่กŒๆƒ…่Žทๅ– ็ป„ๅˆๆตๅผ(ๅ•้“พๆŽฅ่ฎข้˜…ๅคšไธชๅธ็ง) -โ”‚ โ””โ”€โ”€ monitor.go # ่กŒๆƒ…ๆ•ฐๆฎ็ผ“ๅญ˜ -โ”‚ โ””โ”€โ”€ types.go # market็ป“ๆž„ไฝ“ -โ”‚ -โ”œโ”€โ”€ provider/ # ๆ•ฐๆฎๆบ็ฎก็† -โ”‚ โ””โ”€โ”€ data_provider.go # AI500 + OI Top ๆ•ฐๆฎๆบ -โ”‚ -โ”œโ”€โ”€ logger/ # ๆ—ฅๅฟ—็ณป็ปŸ -โ”‚ โ””โ”€โ”€ decision_logger.go # ๅ†ณ็ญ–่ฎฐๅฝ• + ๆ€ง่ƒฝๅˆ†ๆž -โ”‚ -โ”œโ”€โ”€ decision_logs/ # ๅ†ณ็ญ–ๆ—ฅๅฟ—ๅญ˜ๅ‚จ๏ผˆJSON ๆ–‡ไปถ๏ผ‰ -โ”‚ โ”œโ”€โ”€ {trader_id}/ # ๆฏไธชไบคๆ˜“ๅ‘˜็š„ๆ—ฅๅฟ— -โ”‚ โ””โ”€โ”€ {timestamp}.json # ๅ•ไธชๅ†ณ็ญ– -โ”‚ -โ””โ”€โ”€ web/ # React ๅ‰็ซฏ - โ”œโ”€โ”€ src/ - โ”‚ โ”œโ”€โ”€ components/ # React ็ป„ไปถ - โ”‚ โ”‚ โ”œโ”€โ”€ EquityChart.tsx # ๆƒ็›Šๆ›ฒ็บฟๅ›พ่กจ - โ”‚ โ”‚ โ”œโ”€โ”€ ComparisonChart.tsx # ๅคš AI ๅฏนๆฏ”ๅ›พ่กจ - โ”‚ โ”‚ โ””โ”€โ”€ CompetitionPage.tsx # ็ซž่ต›ๆŽ’่กŒๆฆœ - โ”‚ โ”œโ”€โ”€ lib/api.ts # API ่ฐƒ็”จๅŒ…่ฃ…ๅ™จ - โ”‚ โ”œโ”€โ”€ types/index.ts # TypeScript ็ฑปๅž‹ - โ”‚ โ”œโ”€โ”€ stores/ # Zustand ็Šถๆ€็ฎก็† - โ”‚ โ”œโ”€โ”€ index.css # Binance ้ฃŽๆ ผๆ ทๅผ - โ”‚ โ””โ”€โ”€ App.tsx # ไธปๅบ”็”จ - โ”œโ”€โ”€ package.json # ๅ‰็ซฏไพ่ต– - โ””โ”€โ”€ vite.config.ts # Vite ้…็ฝฎ +โ”œโ”€โ”€ main.go # ็จ‹ๅบๅ…ฅๅฃ +โ”œโ”€โ”€ api/ # HTTP API (Gin ๆก†ๆžถ) +โ”œโ”€โ”€ trader/ # ไบคๆ˜“ๆ‰ง่กŒๅฑ‚ +โ”œโ”€โ”€ strategy/ # ็ญ–็•ฅๅผ•ๆ“Ž +โ”œโ”€โ”€ backtest/ # ๅ›žๆต‹ๆจกๆ‹Ÿๅผ•ๆ“Ž +โ”œโ”€โ”€ debate/ # ่พฉ่ฎบ็ซžๆŠ€ๅœบๅผ•ๆ“Ž +โ”œโ”€โ”€ market/ # ่กŒๆƒ…ๆ•ฐๆฎๆœๅŠก +โ”œโ”€โ”€ mcp/ # AI ๆจกๅž‹ๅฎขๆˆท็ซฏ +โ”œโ”€โ”€ store/ # ๆ•ฐๆฎๅบ“ๆ“ไฝœ +โ”œโ”€โ”€ auth/ # JWT ่ฎค่ฏ +โ”œโ”€โ”€ manager/ # ๅคšไบคๆ˜“ๅ‘˜็ฎก็† +โ””โ”€โ”€ web/ # React ๅ‰็ซฏ + โ”œโ”€โ”€ src/pages/ # ้กต้ข็ป„ไปถ + โ”œโ”€โ”€ src/components/ # ๅ…ฑไบซ็ป„ไปถ + โ””โ”€โ”€ src/lib/api.ts # API ๅฎขๆˆท็ซฏ ``` --- -## ๐Ÿ”ง ๆ ธๅฟƒไพ่ต– +## ๆ ธๅฟƒไพ่ต– ### ๅŽ็ซฏ (Go) -| ๅŒ… | ็”จ้€” | ็‰ˆๆœฌ | -|---------|---------|---------| -| `github.com/gin-gonic/gin` | HTTP API ๆก†ๆžถ | v1.9+ | -| `github.com/adshao/go-binance/v2` | Binance API ๅฎขๆˆท็ซฏ | v2.4+ | -| `github.com/markcheno/go-talib` | ๆŠ€ๆœฏๆŒ‡ๆ ‡๏ผˆTA-Lib๏ผ‰ | ๆœ€ๆ–ฐ | -| `github.com/lib/pq` | PostgreSQL ๆ•ฐๆฎๅบ“้ฉฑๅŠจ | v1.10+ | -| `github.com/golang-jwt/jwt/v5` | JWT ่ฎค่ฏ | v5.0+ | -| `github.com/pquerna/otp` | 2FA/TOTP ๆ”ฏๆŒ | v1.4+ | -| `golang.org/x/crypto` | ๅฏ†็ ๅ“ˆๅธŒ๏ผˆbcrypt๏ผ‰ | ๆœ€ๆ–ฐ | +| ๅŒ… | ็”จ้€” | +|---------|---------| +| `gin-gonic/gin` | HTTP API ๆก†ๆžถ | +| `adshao/go-binance` | Binance API ๅฎขๆˆท็ซฏ | +| `markcheno/go-talib` | ๆŠ€ๆœฏๆŒ‡ๆ ‡่ฎก็ฎ— | +| `golang-jwt/jwt` | JWT ่ฎค่ฏ | -### ๅ‰็ซฏ (React + TypeScript) +### ๅ‰็ซฏ (React) -| ๅŒ… | ็”จ้€” | ็‰ˆๆœฌ | -|---------|---------|---------| -| `react` + `react-dom` | UI ๆก†ๆžถ | 18.3+ | -| `typescript` | ็ฑปๅž‹ๅฎ‰ๅ…จ | 5.8+ | -| `vite` | ๆž„ๅปบๅทฅๅ…ท | 6.0+ | -| `recharts` | ๅ›พ่กจ๏ผˆๆƒ็›Šใ€ๅฏนๆฏ”๏ผ‰ | 2.15+ | -| `swr` | ๆ•ฐๆฎ่Žทๅ–ไธŽ็ผ“ๅญ˜ | 2.2+ | -| `zustand` | ็Šถๆ€็ฎก็† | 5.0+ | -| `tailwindcss` | CSS ๆก†ๆžถ | 3.4+ | -| `lucide-react` | ๅ›พๆ ‡ๅบ“ | ๆœ€ๆ–ฐ | +| ๅŒ… | ็”จ้€” | +|---------|---------| +| `react` | UI ๆก†ๆžถ | +| `recharts` | ๅ›พ่กจๅฏ่ง†ๅŒ– | +| `swr` | ๆ•ฐๆฎ่Žทๅ– | +| `zustand` | ็Šถๆ€็ฎก็† | +| `tailwindcss` | CSS ๆก†ๆžถ | --- -## ๐Ÿ—‚๏ธ ็ณป็ปŸๆžถๆž„ +## ๅฟซ้€Ÿ้“พๆŽฅ -### ้ซ˜ๅฑ‚ๆžถๆž„ๆฆ‚่งˆ - -``` -โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -โ”‚ ่กจ็Žฐๅฑ‚ โ”‚ -โ”‚ React SPA (Vite + TypeScript + TailwindCSS) โ”‚ -โ”‚ - ็ซž่ต›ไปช่กจๆฟใ€ไบคๆ˜“ๅ‘˜็ฎก็† UI โ”‚ -โ”‚ - ๅฎžๆ—ถๅ›พ่กจ (Recharts)ใ€่ฎค่ฏ้กต้ข โ”‚ -โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - โ†“ HTTP/JSON API -โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -โ”‚ API ๅฑ‚ (Gin Router) โ”‚ -โ”‚ /api/traders, /api/status, /api/positions, /api/decisions โ”‚ -โ”‚ ่ฎค่ฏไธญ้—ดไปถ (JWT)ใ€CORS ๅค„็† โ”‚ -โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - โ†“ -โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -โ”‚ ไธšๅŠก้€ป่พ‘ๅฑ‚ โ”‚ -โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ -โ”‚ โ”‚ TraderManager โ”‚ โ”‚ DecisionEngine โ”‚ โ”‚ MarketData โ”‚ โ”‚ -โ”‚ โ”‚ - ๅคšไบคๆ˜“ๅ‘˜ โ”‚ โ”‚ - AI ๆŽจ็† โ”‚ โ”‚ - K็บฟๆ•ฐๆฎ โ”‚ โ”‚ -โ”‚ โ”‚ ็ผ–ๆŽ’ โ”‚ โ”‚ - ้ฃŽ้™ฉๆŽงๅˆถ โ”‚ โ”‚ - ๆŠ€ๆœฏๆŒ‡ๆ ‡ โ”‚ โ”‚ -โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ -โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - โ†“ -โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -โ”‚ ๆ•ฐๆฎ่ฎฟ้—ฎๅฑ‚ โ”‚ -โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ -โ”‚ โ”‚ SQLite DB โ”‚ โ”‚ ๆ–‡ไปถๆ—ฅๅฟ— โ”‚ โ”‚ ๅค–้ƒจ APIs โ”‚ โ”‚ -โ”‚ โ”‚ - Traders โ”‚ โ”‚ - Decisions โ”‚ โ”‚ - Binance โ”‚ โ”‚ -โ”‚ โ”‚ - Models โ”‚ โ”‚ - Performanceโ”‚ โ”‚ - Hyperliquid โ”‚ โ”‚ -โ”‚ โ”‚ - Exchanges โ”‚ โ”‚ analysis โ”‚ โ”‚ - Aster โ”‚ โ”‚ -โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ -โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ -``` - -### ็ป„ไปถๅ›พ - -*๏ผˆๅณๅฐ†ๆŽจๅ‡บ๏ผš่ฏฆ็ป†็š„็ป„ไปถไบคไบ’ๅ›พ๏ผ‰* +- [็ญ–็•ฅๆจกๅ—](STRATEGY_MODULE.md) - ็ญ–็•ฅๅฆ‚ไฝ•่ฟไฝœ +- [ๅ›žๆต‹ๆจกๅ—](BACKTEST_MODULE.md) - ๅ›žๆต‹ๅฆ‚ไฝ•่ฟไฝœ +- [่พฉ่ฎบๆจกๅ—](DEBATE_MODULE.md) - AI ่พฉ่ฎบๅฆ‚ไฝ•่ฟไฝœ +- [ๅฟซ้€Ÿๅผ€ๅง‹](../getting-started/README.zh-CN.md) - ้ƒจ็ฝฒๆŒ‡ๅ— +- [ๅธธ่ง้—ฎ้ข˜](../faq/README.md) - FAQ --- -## ๐Ÿ“š ๆ ธๅฟƒๆจกๅ— - -### 1. ไบคๆ˜“็ณป็ปŸ (`trader/`) - -**็”จ้€”๏ผš** ๆ”ฏๆŒๅคšไบคๆ˜“ๆ‰€็š„ไบคๆ˜“ๆ‰ง่กŒๅฑ‚ - -**ๅ…ณ้”ฎๆ–‡ไปถ๏ผš** -- `auto_trader.go` - ไธปไบคๆ˜“็ผ–ๆŽ’ๅ™จ๏ผˆ100+ ่กŒ๏ผ‰ -- `interface.go` - ็ปŸไธ€็š„ไบคๆ˜“ๅ‘˜ๆŽฅๅฃ -- `binance_futures.go` - Binance API ๅŒ…่ฃ…ๅ™จ -- `hyperliquid_trader.go` - Hyperliquid DEX ๅŒ…่ฃ…ๅ™จ -- `aster_trader.go` - Aster DEX ๅŒ…่ฃ…ๅ™จ - -**่ฎพ่ฎกๆจกๅผ๏ผš** ๅŸบไบŽๆŽฅๅฃๆŠฝ่ฑก็š„็ญ–็•ฅๆจกๅผ - -**็คบไพ‹๏ผš** -```go -type ExchangeClient interface { - GetAccount() (*AccountInfo, error) - GetPositions() ([]*Position, error) - CreateOrder(*OrderParams) (*Order, error) - // ... ๆ›ดๅคšๆ–นๆณ• -} -``` - ---- - -### 2. ๅ†ณ็ญ–ๅผ•ๆ“Ž (`decision/`) - -**็”จ้€”๏ผš** AI ้ฉฑๅŠจ็š„ไบคๆ˜“ๅ†ณ็ญ–ๅˆถๅฎš - -**ๅ…ณ้”ฎๆ–‡ไปถ๏ผš** -- `engine.go` - ๅธฆๅކๅฒๅ้ฆˆ็š„ๅ†ณ็ญ–้€ป่พ‘ -- `prompt_manager.go` - AI ๆ็คบ่ฏๆจกๆฟ็ณป็ปŸ - -**็‰นๆ€ง๏ผš** -- ๆ€็ปด้“พๆŽจ็† -- ๅކๅฒ่กจ็Žฐๅˆ†ๆž -- ้ฃŽ้™ฉๆ„Ÿ็Ÿฅๅ†ณ็ญ– -- ๅคšๆจกๅž‹ๆ”ฏๆŒ๏ผˆDeepSeekใ€Qwenใ€่‡ชๅฎšไน‰๏ผ‰ - -**ๆต็จ‹๏ผš** -``` -ๅކๅฒๆ•ฐๆฎ โ†’ ๆ็คบ่ฏ็”Ÿๆˆ โ†’ AI API ่ฐƒ็”จ โ†’ -ๅ†ณ็ญ–่งฃๆž โ†’ ้ฃŽ้™ฉ้ชŒ่ฏ โ†’ ๆ‰ง่กŒ -``` - ---- - -### 3. ๅธ‚ๅœบๆ•ฐๆฎ็ณป็ปŸ (`market/`) - -**็”จ้€”๏ผš** ่Žทๅ–ๅ’Œๅˆ†ๆžๅธ‚ๅœบๆ•ฐๆฎ - -**ๅ…ณ้”ฎๆ–‡ไปถ๏ผš** -- `data.go` - ๅธ‚ๅœบๆ•ฐๆฎ่Žทๅ–ๅ’ŒๆŠ€ๆœฏๆŒ‡ๆ ‡ - -**็‰นๆ€ง๏ผš** -- ๅคšๆ—ถ้—ดๅ‘จๆœŸ K็บฟๆ•ฐๆฎ๏ผˆ3ๅˆ†้’Ÿใ€4ๅฐๆ—ถ๏ผ‰ -- ้€š่ฟ‡ TA-Lib ่ฎก็ฎ—ๆŠ€ๆœฏๆŒ‡ๆ ‡๏ผš - - EMA (20, 50) - - MACD - - RSI (7, 14) - - ATR๏ผˆๆณขๅŠจ็އ๏ผ‰ -- ๆŒไป“้‡่ทŸ่ธช - ---- - -### 4. ็ฎก็†ๅ™จ (`manager/`) - -**็”จ้€”๏ผš** ๅคšไบคๆ˜“ๅ‘˜็ผ–ๆŽ’ - -**ๅ…ณ้”ฎๆ–‡ไปถ๏ผš** -- `trader_manager.go` - ็ฎก็†ๅคšไธชไบคๆ˜“ๅ‘˜ๅฎžไพ‹ - -**่Œ่ดฃ๏ผš** -- ไบคๆ˜“ๅ‘˜็”Ÿๅ‘ฝๅ‘จๆœŸ๏ผˆๅฏๅŠจใ€ๅœๆญขใ€้‡ๅฏ๏ผ‰ -- ่ต„ๆบๅˆ†้… -- ๅนถๅ‘ๆ‰ง่กŒๅ่ฐƒ - ---- - -### 5. API ๆœๅŠกๅ™จ (`api/`) - -**็”จ้€”๏ผš** ๅ‰็ซฏ้€šไฟก็š„ HTTP API - -**ๅ…ณ้”ฎๆ–‡ไปถ๏ผš** -- `server.go` - Gin ๆก†ๆžถ RESTful API - -**็ซฏ็‚น๏ผš** -``` -GET /api/traders # ๅˆ—ๅ‡บๆ‰€ๆœ‰ไบคๆ˜“ๅ‘˜ -POST /api/traders # ๅˆ›ๅปบไบคๆ˜“ๅ‘˜ -POST /api/traders/:id/start # ๅฏๅŠจไบคๆ˜“ๅ‘˜ -GET /api/status # ็ณป็ปŸ็Šถๆ€ -GET /api/positions # ๅฝ“ๅ‰ๆŒไป“ -GET /api/decisions/latest # ๆœ€่ฟ‘ๅ†ณ็ญ– -``` - ---- - -### 6. ๆ•ฐๆฎๅบ“ๅฑ‚ (`config/`) - -**็”จ้€”๏ผš** SQLite ๆ•ฐๆฎๆŒไน…ๅŒ– - -**ๅ…ณ้”ฎๆ–‡ไปถ๏ผš** -- `database.go` - ๆ•ฐๆฎๅบ“ๆ“ไฝœๅ’Œๆจกๅผ - -**่กจ๏ผš** -- `users` - ็”จๆˆท่ดฆๆˆท๏ผˆๆ”ฏๆŒ 2FA๏ผ‰ -- `ai_models` - AI ๆจกๅž‹้…็ฝฎ -- `exchanges` - ไบคๆ˜“ๆ‰€ๅ‡ญ่ฏ -- `traders` - ไบคๆ˜“ๅ‘˜ๅฎžไพ‹ -- `equity_history` - ็ปฉๆ•ˆ่ทŸ่ธช -- `system_config` - ๅบ”็”จ็จ‹ๅบ่ฎพ็ฝฎ - ---- - -### 7. ่ฎค่ฏ (`auth/`) - -**็”จ้€”๏ผš** ็”จๆˆท่ฎค่ฏๅ’ŒๆŽˆๆƒ - -**็‰นๆ€ง๏ผš** -- ๅŸบไบŽ JWT token ็š„่ฎค่ฏ -- ไฝฟ็”จ TOTP ็š„ 2FA๏ผˆGoogle Authenticator๏ผ‰ -- Bcrypt ๅฏ†็ ๅ“ˆๅธŒ - ---- - -## ๐Ÿ”„ ่ฏทๆฑ‚ๆต็จ‹็คบไพ‹ - -### ็คบไพ‹ 1๏ผšๅˆ›ๅปบๆ–ฐไบคๆ˜“ๅ‘˜ - -``` -็”จๆˆทๆ“ไฝœ๏ผˆๅ‰็ซฏ๏ผ‰ - โ†“ -POST /api/traders - โ†“ -API ๆœๅŠกๅ™จ๏ผˆ่ฎค่ฏไธญ้—ดไปถ๏ผ‰ - โ†“ -Database.CreateTrader() - โ†“ -TraderManager.StartTrader() - โ†“ -AutoTrader.Run() โ†’ goroutine - โ†“ -ๅ“ๅบ”: {trader_id, status} -``` - -### ็คบไพ‹ 2๏ผšไบคๆ˜“ๅ†ณ็ญ–ๅ‘จๆœŸ - -``` -AutoTrader๏ผˆๆฏ 3-5 ๅˆ†้’Ÿ๏ผ‰ - โ†“ -1. FetchAccountStatus() - โ†“ -2. GetOpenPositions() - โ†“ -3. FetchMarketData() โ†’ TA-Lib ๆŒ‡ๆ ‡ - โ†“ -4. AnalyzeHistory() โ†’ ๆœ€่ฟ‘ 20 ็ฌ”ไบคๆ˜“ - โ†“ -5. GeneratePrompt() โ†’ ๅฎŒๆ•ดไธŠไธ‹ๆ–‡ - โ†“ -6. CallAI() โ†’ DeepSeek/Qwen - โ†“ -7. ParseDecision() โ†’ ็ป“ๆž„ๅŒ–่พ“ๅ‡บ - โ†“ -8. ValidateRisk() โ†’ ไป“ไฝ้™ๅˆถใ€ไฟ่ฏ้‡‘ - โ†“ -9. ExecuteOrders() โ†’ ไบคๆ˜“ๆ‰€ API - โ†“ -10. LogDecision() โ†’ JSON ๆ–‡ไปถ + ๆ•ฐๆฎๅบ“ -``` - ---- - -## ๐Ÿ“Š ๆ•ฐๆฎๆต - -### ๅธ‚ๅœบๆ•ฐๆฎๆต - -``` -ไบคๆ˜“ๆ‰€ API - โ†“ -market.FetchKlines() - โ†“ -TA-Lib.Calculate(EMA, MACD, RSI) - โ†“ -DecisionEngine๏ผˆไฝœไธบไธŠไธ‹ๆ–‡๏ผ‰ - โ†“ -AI ๆจกๅž‹๏ผˆๆŽจ็†๏ผ‰ -``` - -### ๅ†ณ็ญ–ๆ—ฅๅฟ—ๆต - -``` -AI ๅ“ๅบ” - โ†“ -decision_logger.go - โ†“ -JSON ๆ–‡ไปถ: decision_logs/{trader_id}/{timestamp}.json - โ†“ -ๆ•ฐๆฎๅบ“: ็ปฉๆ•ˆ่ทŸ่ธช - โ†“ -ๅ‰็ซฏ: /api/decisions/latest -``` - ---- - -## ๐Ÿ—„๏ธ ๆ•ฐๆฎๅบ“ๆžถๆž„ - -### ๆ ธๅฟƒ่กจ - -**users** -```sql -- id (INTEGER PRIMARY KEY) -- username (TEXT UNIQUE) -- password_hash (TEXT) -- totp_secret (TEXT) -- is_admin (BOOLEAN) -- created_at (DATETIME) -``` - -**ai_models** -```sql -- id (INTEGER PRIMARY KEY) -- name (TEXT) -- model_type (TEXT) -- deepseek, qwen, custom -- api_key (TEXT) -- api_url (TEXT) -- enabled (BOOLEAN) -``` - -**traders** -```sql -- id (TEXT PRIMARY KEY) -- name (TEXT) -- ai_model_id (INTEGER FK) -- exchange_id (INTEGER FK) -- initial_balance (REAL) -- current_equity (REAL) -- status (TEXT) -- running, stopped -- created_at (DATETIME) -``` - -*๏ผˆๆ›ดๅคš่ฏฆๆƒ…๏ผšdatabase-schema.md - ๅณๅฐ†ๆŽจๅ‡บ๏ผ‰* - ---- - -## ๐Ÿ”Œ API ๅ‚่€ƒ - -### ่ฎค่ฏ - -**POST /api/auth/login** -```json -่ฏทๆฑ‚: { - "username": "string", - "password": "string", - "totp_code": "string" // ๅฏ้€‰ -} - -ๅ“ๅบ”: { - "token": "jwt_token", - "user": {...} -} -``` - -### ไบคๆ˜“ๅ‘˜็ฎก็† - -**GET /api/traders** -```json -ๅ“ๅบ”: { - "traders": [ - { - "id": "string", - "name": "string", - "status": "running|stopped", - "balance": 1000.0, - "roi": 5.2 - } - ] -} -``` - -*๏ผˆๅฎŒๆ•ด API ๅ‚่€ƒ๏ผšapi-reference.md - ๅณๅฐ†ๆŽจๅ‡บ๏ผ‰* - ---- - -## ๐Ÿงช ๆต‹่ฏ•ๆžถๆž„ - -### ๅฝ“ๅ‰็Šถๆ€ -- โš ๏ธ ๅฐšๆ— ๅ•ๅ…ƒๆต‹่ฏ• -- โš ๏ธ ไป…ๆ‰‹ๅŠจๆต‹่ฏ• -- โš ๏ธ ๆต‹่ฏ•็ฝ‘้ชŒ่ฏ - -### ่ฎกๅˆ’็š„ๆต‹่ฏ•็ญ–็•ฅ - -**ๅ•ๅ…ƒๆต‹่ฏ•๏ผˆไผ˜ๅ…ˆ็บง 1๏ผ‰** -``` -trader/binance_futures_test.go -- ๆจกๆ‹Ÿ API ๅ“ๅบ” -- ๆต‹่ฏ•็ฒพๅบฆๅค„็† -- ้ชŒ่ฏ่ฎขๅ•ๆž„้€  -``` - -**้›†ๆˆๆต‹่ฏ•๏ผˆไผ˜ๅ…ˆ็บง 2๏ผ‰** -``` -- ็ซฏๅˆฐ็ซฏไบคๆ˜“ๆต็จ‹๏ผˆๆต‹่ฏ•็ฝ‘๏ผ‰ -- ๅคšไบคๆ˜“ๅ‘˜ๅœบๆ™ฏ -- ๆ•ฐๆฎๅบ“ๆ“ไฝœ -``` - -**ๅ‰็ซฏๆต‹่ฏ•๏ผˆไผ˜ๅ…ˆ็บง 3๏ผ‰** -``` -- ็ป„ไปถๆต‹่ฏ•๏ผˆVitest + React Testing Library๏ผ‰ -- API ้›†ๆˆๆต‹่ฏ• -- E2E ๆต‹่ฏ•๏ผˆPlaywright๏ผ‰ -``` - -*๏ผˆๆต‹่ฏ•ๆŒ‡ๅ—๏ผštesting-guide.md - ๅณๅฐ†ๆŽจๅ‡บ๏ผ‰* - ---- - -## ๐Ÿ”ง ๅผ€ๅ‘ๅทฅๅ…ท - -### ๆž„ๅปบไธŽ่ฟ่กŒ - -```bash -# ๅŽ็ซฏ -go build -o nofx -./nofx - -# ๅ‰็ซฏ -cd web -npm run dev - -# Docker -docker compose up --build -``` - -### ไปฃ็ ่ดจ้‡ - -```bash -# ๆ ผๅผๅŒ– Go ไปฃ็  -go fmt ./... - -# Lint๏ผˆๅฆ‚ๆžœ้…็ฝฎ๏ผ‰ -golangci-lint run - -# TypeScript ็ฑปๅž‹ๆฃ€ๆŸฅ -cd web && npm run build -``` - ---- - -## ๐Ÿ“ˆ ๆ€ง่ƒฝ่€ƒ่™‘ - -### ๅŽ็ซฏ -- **ๅนถๅ‘๏ผš** ๆฏไธชไบคๆ˜“ๅ‘˜ๅœจ็‹ฌ็ซ‹็š„ goroutine ไธญ่ฟ่กŒ -- **ๆ•ฐๆฎๅบ“๏ผš** SQLite๏ผˆ้€‚็”จไบŽ <100 ไธชไบคๆ˜“ๅ‘˜๏ผ‰ -- **API ้€Ÿ็އ้™ๅˆถ๏ผš** ๆŒ‰ไบคๆ˜“ๆ‰€ๅค„็† -- **ๅ†…ๅญ˜๏ผš** ๆฏไธชไบคๆ˜“ๅ‘˜ ~50-100MB - -### ๅ‰็ซฏ -- **ๆ•ฐๆฎ่Žทๅ–๏ผš** SWR๏ผŒ5-10 ็ง’่ฝฎ่ฏข -- **็Šถๆ€๏ผš** Zustand๏ผˆ่ฝป้‡็บง๏ผ‰ -- **ๅŒ…ๅคงๅฐ๏ผš** ~500KB๏ผˆgzipped๏ผ‰ - ---- - -## ๐Ÿ”ฎ ๆœชๆฅๆžถๆž„่ฎกๅˆ’ - -### ่ฎกๅˆ’ๆ”น่ฟ› - -1. **ๅพฎๆœๅŠกๆ‹†ๅˆ†**๏ผˆๅฆ‚้œ€ๆ‰ฉๅฑ•๏ผ‰ - - ็‹ฌ็ซ‹็š„ๅ†ณ็ญ–ๅผ•ๆ“ŽๆœๅŠก - - ๅธ‚ๅœบๆ•ฐๆฎๆœๅŠก - - ๆ‰ง่กŒๆœๅŠก - -2. **ๆ•ฐๆฎๅบ“่ฟ็งป** - - ็”Ÿไบง็Žฏๅขƒไฝฟ็”จ Mysql (>100 ไธชไบคๆ˜“ๅ‘˜๏ผ‰ - - Redis ็ผ“ๅญ˜ - -3. **ไบ‹ไปถ้ฉฑๅŠจๆžถๆž„** - - WebSocket ๅฎžๆ—ถๆ›ดๆ–ฐ - - ๆถˆๆฏ้˜Ÿๅˆ—๏ผˆRabbitMQ/NATS๏ผ‰ - -4. **Kubernetes ้ƒจ็ฝฒ** - - Helm charts - - ่‡ชๅŠจๆ‰ฉๅฑ• - - ้ซ˜ๅฏ็”จๆ€ง - ---- - -## ๐Ÿ†˜ ๅผ€ๅ‘่€…่ต„ๆบ +## ๅผ€ๅ‘่€…่ต„ๆบ **ๆƒณ่ฆ่ดก็Œฎ๏ผŸ** -- ้˜…่ฏป[่ดก็ŒฎๆŒ‡ๅ—](../../CONTRIBUTING.md) -- ๆŸฅ็œ‹[ๅผ€ๆ”พ้—ฎ้ข˜](https://github.com/tinkle-community/nofx/issues) -- ๅŠ ๅ…ฅ [Telegram ็คพๅŒบ](https://t.me/nofx_dev_community) +- ้˜…่ฏปไธŠๆ–น็š„ๆจกๅ—ๆ–‡ๆกฃ +- ๆŸฅ็œ‹ [Open Issues](https://github.com/NoFxAiOS/nofx/issues) +- ๅŠ ๅ…ฅๆˆ‘ไปฌ็š„็คพๅŒบ -**้œ€่ฆๆพ„ๆธ…๏ผŸ** -- ๅผ€ๅฏ [GitHub ่ฎจ่ฎบ](https://github.com/tinkle-community/nofx/discussions) -- ๅœจ Telegram ๆ้—ฎ - ---- - -## ๐Ÿ“š ็›ธๅ…ณๆ–‡ๆกฃ - -- [ๅฟซ้€Ÿๅผ€ๅง‹](../getting-started/README.zh-CN.md) - ่ฎพ็ฝฎๅ’Œ้ƒจ็ฝฒ -- [่ดก็ŒฎๆŒ‡ๅ—](../../CONTRIBUTING.md) - ๅฆ‚ไฝ•่ดก็Œฎ -- [็คพๅŒบ](../community/README.md) - ๆ‚ฌ่ตๅ’Œ่ฎคๅฏ +**ไปฃ็ ไป“ๅบ“:** https://github.com/NoFxAiOS/nofx ---