# ๐Ÿ—๏ธ NOFX ๆžถๆž„ๆ–‡ๆกฃ **่ฏญ่จ€:** [English](README.md) | [ไธญๆ–‡](README.zh-CN.md) ไธบๅธŒๆœ›ไบ†่งฃ NOFX ๅ†…้ƒจๅฎž็Žฐ็š„ๅผ€ๅ‘่€…ๆไพ›็š„ๆŠ€ๆœฏๆ–‡ๆกฃใ€‚ --- ## ๐Ÿ“‹ ๆฆ‚่ฟฐ NOFX ๆ˜ฏไธ€ไธชๅ…จๆ ˆ AI ไบคๆ˜“ๅนณๅฐ๏ผš - **ๅŽ็ซฏ๏ผš** Go (Gin ๆก†ๆžถ, SQLite) - **ๅ‰็ซฏ๏ผš** React/TypeScript (Vite, TailwindCSS) - **ๆžถๆž„๏ผš** ๅพฎๆœๅŠกๅฏๅ‘็š„ๆจกๅ—ๅŒ–่ฎพ่ฎก --- ## ๐Ÿ“ ้กน็›ฎ็ป“ๆž„ ``` 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็ป“ๆž„ไฝ“ โ”‚ โ”œโ”€โ”€ pool/ # ๅธ็งๆฑ ็ฎก็† โ”‚ โ””โ”€โ”€ coin_pool.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 ้…็ฝฎ ``` --- ## ๐Ÿ”ง ๆ ธๅฟƒไพ่ต– ### ๅŽ็ซฏ (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๏ผ‰ | ๆœ€ๆ–ฐ | ### ๅ‰็ซฏ (React + TypeScript) | ๅŒ… | ็”จ้€” | ็‰ˆๆœฌ | |---------|---------|---------| | `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 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 โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ็ป„ไปถๅ›พ *๏ผˆๅณๅฐ†ๆŽจๅ‡บ๏ผš่ฏฆ็ป†็š„็ป„ไปถไบคไบ’ๅ›พ๏ผ‰* --- ## ๐Ÿ“š ๆ ธๅฟƒๆจกๅ— ### 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) **้œ€่ฆๆพ„ๆธ…๏ผŸ** - ๅผ€ๅฏ [GitHub ่ฎจ่ฎบ](https://github.com/tinkle-community/nofx/discussions) - ๅœจ Telegram ๆ้—ฎ --- ## ๐Ÿ“š ็›ธๅ…ณๆ–‡ๆกฃ - [ๅฟซ้€Ÿๅผ€ๅง‹](../getting-started/README.zh-CN.md) - ่ฎพ็ฝฎๅ’Œ้ƒจ็ฝฒ - [่ดก็ŒฎๆŒ‡ๅ—](../../CONTRIBUTING.md) - ๅฆ‚ไฝ•่ดก็Œฎ - [็คพๅŒบ](../community/README.md) - ๆ‚ฌ่ตๅ’Œ่ฎคๅฏ --- [โ† ่ฟ”ๅ›žๆ–‡ๆกฃ้ฆ–้กต](../README.md)