* feat: add AI grid trading and market regime classification - Add GridTrader interface with PlaceLimitOrder, CancelOrder, GetOrderBook - Implement GridTrader for all exchanges (Binance, Bybit, OKX, Bitget, Hyperliquid, Aster, Lighter) - Add grid engine with ATR-based boundary calculation and fund distribution - Add market regime classification documents (Chinese/English) - Add GridConfigEditor component for frontend configuration * fix: implement GetOpenOrders for Lighter exchange * debug: add logging for Lighter GetActiveOrders API call * fix: correct Lighter API response parsing for GetOpenOrders - Changed response field from 'data' to 'orders' to match Lighter API - Updated OrderResponse struct to match Lighter's actual field names - Fixed field types: price/quantity as strings, is_ask for side * feat: implement GetOpenOrders for Aster, OKX, Bitget exchanges - Aster: uses /fapi/v3/openOrders endpoint - OKX: uses /api/v5/trade/orders-pending and orders-algo-pending - Bitget: uses /api/v2/mix/order/orders-pending and orders-plan-pending * fix: address code review issues for GetOpenOrders - Add error logging for OKX/Bitget API failures (was silently swallowed) - Fix Lighter position side logic to handle reduce-only orders - Change verbose debug logs from Infof to Debugf level * fix: provide FromAccountIndex and ApiKeyIndex for Lighter nonce auto-fetch Root cause: SDK requires these fields to fetch nonce from API, otherwise nonce gets cached/stuck * fix: use auth query parameter instead of Authorization header for Lighter API * test: add Lighter API authentication tests and diagnostic tools * fix(grid): add leverage setting before order placement CRITICAL BUG FIX: - Call SetLeverage() in GridTraderAdapter.PlaceLimitOrder() - Set leverage during grid initialization - Log leverage setting results * fix(grid): prevent CancelOrder from canceling all orders CRITICAL BUG FIX: - CancelOrder no longer calls CancelAllOrders - Try exchange-specific CancelOrder if available - Return error if individual cancellation not supported * fix(grid): add total position value limit check CRITICAL: Prevent excessive position accumulation - New checkTotalPositionLimit() function - Checks current + pending + new order value - Rejects orders that would exceed TotalInvestment x Leverage - Logs clear error messages when limit exceeded * feat(grid): implement stop loss execution CRITICAL: Add code-level stop loss protection - New checkAndExecuteStopLoss() function - Checks each filled level against StopLossPct - Automatically closes positions exceeding stop loss - Called during every grid state sync * feat(grid): add breakout detection and auto-pause CRITICAL: Detect price breakout from grid range - New checkBreakout() function to detect upper/lower breakouts - Auto-pause grid on significant breakout (>2%) - Cancel all orders when breakout detected - Prevent continued losses in trending market - Minor breakouts (1-2%) logged for AI consideration * feat(grid): enforce max drawdown limit with emergency exit CRITICAL: Add drawdown protection - New checkMaxDrawdown() function tracks peak equity - emergencyExit() closes all positions and cancels orders - Auto-pause grid when MaxDrawdownPct exceeded - Protect capital from excessive losses * feat(grid): enforce daily loss limit - Add checkDailyLossLimit() function to check if daily loss exceeds limit - Track daily PnL with auto-reset at midnight - Pause grid when DailyLossLimitPct exceeded - Add updateDailyPnL() helper for realized PnL tracking - Prevent excessive single-day losses * fix(grid): update daily PnL when stop loss is executed The updateDailyPnL() function was added but never called, leaving DailyPnL always at 0 and preventing daily loss limit checks from triggering. This fix updates DailyPnL and TotalProfit directly in checkAndExecuteStopLoss() when a stop loss is executed. We update directly rather than calling updateDailyPnL() because the mutex is already held in that function. * feat(grid): add automatic grid adjustment - New checkGridSkew() detects imbalanced grid - autoAdjustGrid() reinitializes around current price - Prevents grid from becoming ineffective after drift - Triggers when one side is 3x more filled than other * fix(grid): recalculate bounds in autoAdjustGrid before reinitializing levels Critical fix for grid auto-adjustment: - Recalculate grid bounds (UpperPrice, LowerPrice, GridSpacing) centered on current price before reinitializing grid levels - Preserve filled positions during adjustment by saving and restoring them to the closest new level after reinitialization - Hold mutex lock for the entire adjustment operation to ensure atomicity - Add locked variants of calculateDefaultBounds, calculateATRBounds, and initializeGridLevels to use during adjustment Without this fix, autoAdjustGrid was using old boundaries when creating new grid levels, defeating the purpose of auto-adjustment when price moved significantly. * fix(grid): improve order state sync logic - Don't assume missing orders are filled - Compare position size to determine fill vs cancel - Properly reset cancelled orders to empty state - More accurate grid state tracking * fix(grid): use actual PositionSize sum instead of count in syncGridState heuristic The position-based heuristic was using `float64(previousFilledCount) * level.OrderQuantity` which incorrectly assumed uniform order quantities. Since the grid uses weighted distribution (gaussian, pyramid, uniform) where orders have different quantities, this could lead to incorrect fill detection. Now sums the actual PositionSize from filled levels for accurate comparison. Also adds warning log when GetPositions() fails. * docs: add grid market regime detection design Design for enhanced market state recognition with: - Multi-dimensional indicators (ATR, Bollinger, EMA, MACD, RSI) - Multi-period box indicators (72/240/500 1h candles) - 4-level ranging classification - Breakout detection and handling - Frontend risk control panel * docs: add grid market regime implementation plan 20 tasks covering: - Donchian channel calculation - Box data types and API - Regime classification (4 levels) - Breakout detection and handling - False breakout recovery - Frontend risk panel - AI prompt updates * feat(market): add Donchian channel calculation Add calculateDonchian function to compute highest high and lowest low over a specified period. This is the foundation for box (range) detection in the multi-period box indicator system for grid trading. * fix(market): handle invalid period in calculateDonchian * feat(market): add BoxData and RegimeLevel types * feat(market): add GetBoxData for multi-period box calculation Adds calculateBoxData internal function and GetBoxData public API that fetches 1h klines and computes three Donchian box levels (short/mid/long). This will be used by the grid trading system to detect market regime. * feat(store): add box and regime fields to grid models * feat(trader): add regime classification and breakout detection Implements Tasks 6-9 for grid market regime awareness: - Task 6: classifyRegimeLevel with Bollinger/ATR thresholds - Task 7: detectBoxBreakout for multi-period box breakouts - Task 8: confirmBreakout with 3-candle confirmation logic - Task 9: getBreakoutAction mapping breakout levels to actions * feat(trader): integrate box breakout detection into grid cycle - Task 10: Add checkBoxBreakout with 3-candle confirmation - Task 11: Add checkFalseBreakoutRecovery for 50% position recovery - Task 12: Add box/breakout/regime fields to GridState * feat: add grid risk panel with API endpoint - Task 13: Add GridRiskInfo type to frontend - Task 14: Add /traders/:id/grid-risk API endpoint - Task 15: Add GetGridRiskInfo method to AutoTrader - Task 16: Create GridRiskPanel component with i18n * feat(kernel): add box indicators to AI prompt - Add BoxData field to GridContext - Add box indicator table to both zh/en prompts - Show breakout/warning alerts based on price position * feat(web): integrate GridRiskPanel into TraderDashboardPage * feat(lighter): improve API key validation and market caching - Add API key validation status tracking - Add market list caching to reduce API calls - Improve logging (debug vs info levels) - Add comprehensive integration tests - Update trader manager and store for lighter support * fix: remove hardcoded test wallet address * fix(grid): improve GridRiskPanel layout and fix liquidation data - Make panel collapsible with summary badges when collapsed - Use compact 2-column grid layout for detailed info - Fix auth token key (token -> auth_token) - Only calculate liquidation distance when position exists * fix(grid): add isRunning checks to prevent trades after Stop() is called
NOFX - Agentic Trading OS
| CONTRIBUTOR AIRDROP PROGRAM |
|---|
| Code · Bug Fixes · Issues → Airdrop |
| Learn More |
Languages: English | 中文 | 日本語 | 한국어 | Русский | Українська | Tiếng Việt
AI-Powered Multi-Asset Trading Platform
NOFX is an open-source AI trading system that lets you run multiple AI models to trade automatically. Configure strategies through a web interface, monitor performance in real-time, and let AI agents compete to find the best trading approach.
Supported Markets
| Market | Trading | Status |
|---|---|---|
| 🪙 Crypto | BTC, ETH, Altcoins | ✅ Supported |
| 📈 US Stocks | AAPL, TSLA, NVDA, etc. | ✅ Supported |
| 💱 Forex | EUR/USD, GBP/USD, etc. | ✅ Supported |
| 🥇 Metals | Gold, Silver | ✅ Supported |
Core Features
- Multi-AI Support: Run DeepSeek, Qwen, GPT, Claude, Gemini, Grok, Kimi - switch models anytime
- Multi-Exchange: Trade on Binance, Bybit, OKX, Bitget, Hyperliquid, Aster DEX, Lighter from one platform
- Strategy Studio: Visual strategy builder with coin sources, indicators, and risk controls
- AI Debate Arena: Multiple AI models debate trading decisions with different roles (Bull, Bear, Analyst)
- AI Competition Mode: Multiple AI traders compete in real-time, track performance side by side
- Web-Based Config: No JSON editing - configure everything through the web interface
- Real-Time Dashboard: Live positions, P/L tracking, AI decision logs with Chain of Thought
Core Team
- Tinkle - @Web3Tinkle
- Official Twitter - @nofx_official
Official Links
- Official Website: https://nofxai.com
- Data Dashboard: https://nofxos.ai/dashboard
- API Documentation: https://nofxos.ai/api-docs
Risk Warning: This system is experimental. AI auto-trading carries significant risks. Strongly recommended for learning/research purposes or testing with small amounts only!
Developer Community
Join our Telegram developer community: NOFX Developer Community
Before You Begin
To use NOFX, you'll need:
- Exchange Account - Register on any supported exchange and create API credentials with trading permissions
- AI Model API Key - Get from any supported provider (DeepSeek recommended for cost-effectiveness)
Supported Exchanges
CEX (Centralized Exchanges)
| Exchange | Status | Register (Fee Discount) |
|---|---|---|
| Binance | ✅ Supported | Register |
| Bybit | ✅ Supported | Register |
| OKX | ✅ Supported | Register |
| Bitget | ✅ Supported | Register |
Perp-DEX (Decentralized Perpetual Exchanges)
| Exchange | Status | Register (Fee Discount) |
|---|---|---|
| Hyperliquid | ✅ Supported | Register |
| Aster DEX | ✅ Supported | Register |
| Lighter | ✅ Supported | Register |
Supported AI Models
| AI Model | Status | Get API Key |
|---|---|---|
| DeepSeek | ✅ Supported | Get API Key |
| Qwen | ✅ Supported | Get API Key |
| OpenAI (GPT) | ✅ Supported | Get API Key |
| Claude | ✅ Supported | Get API Key |
| Gemini | ✅ Supported | Get API Key |
| Grok | ✅ Supported | Get API Key |
| Kimi | ✅ Supported | Get API Key |
Screenshots
Config Page
| AI Models & Exchanges | Traders List |
|---|---|
![]() |
![]() |
Competition & Backtest
| Competition Mode | Backtest Lab |
|---|---|
![]() |
![]() |
Dashboard
| Overview | Market Chart |
|---|---|
![]() |
![]() |
| Trading Stats | Position History |
|---|---|
![]() |
![]() |
| Positions | Trader Details |
|---|---|
![]() |
![]() |
Strategy Studio
| Strategy Editor | Indicators Config |
|---|---|
![]() |
![]() |
Debate Arena
| AI Debate Session | Create Debate |
|---|---|
![]() |
![]() |
Quick Start
One-Click Install (Local/Server)
Linux / macOS:
curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bash
That's it! Open http://127.0.0.1:3000 in your browser.
One-Click Cloud Deploy (Railway)
Deploy to Railway with one click - no server setup required:
After deployment, Railway will provide a public URL to access your NOFX instance.
Docker Compose (Manual)
# Download and start
curl -O https://raw.githubusercontent.com/NoFxAiOS/nofx/main/docker-compose.prod.yml
docker compose -f docker-compose.prod.yml up -d
Access Web Interface: http://127.0.0.1:3000
# Management commands
docker compose -f docker-compose.prod.yml logs -f # View logs
docker compose -f docker-compose.prod.yml restart # Restart
docker compose -f docker-compose.prod.yml down # Stop
docker compose -f docker-compose.prod.yml pull && docker compose -f docker-compose.prod.yml up -d # Update
Keeping Updated
💡 Updates are frequent. Run this command daily to stay current with the latest features and fixes:
curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bash
This one-liner pulls the latest official images and restarts services automatically.
Manual Installation (For Developers)
Prerequisites
- Go 1.21+
- Node.js 18+
- TA-Lib (technical indicator library)
# Install TA-Lib
# macOS
brew install ta-lib
# Ubuntu/Debian
sudo apt-get install libta-lib0-dev
Installation Steps
# 1. Clone the repository
git clone https://github.com/NoFxAiOS/nofx.git
cd nofx
# 2. Install backend dependencies
go mod download
# 3. Install frontend dependencies
cd web
npm install
cd ..
# 4. Build and start backend
go build -o nofx
./nofx
# 5. Start frontend (new terminal)
cd web
npm run dev
Access Web Interface: http://127.0.0.1:3000
Windows Installation
Method 1: Docker Desktop (Recommended)
-
Install Docker Desktop
- Download from docker.com/products/docker-desktop
- Run the installer and restart your computer
- Start Docker Desktop and wait for it to be ready
-
Run NOFX
# Open PowerShell and run: curl -o docker-compose.prod.yml https://raw.githubusercontent.com/NoFxAiOS/nofx/main/docker-compose.prod.yml docker compose -f docker-compose.prod.yml up -d -
Access: Open http://127.0.0.1:3000 in your browser
Method 2: WSL2 (For Development)
-
Install WSL2
# Open PowerShell as Administrator wsl --installRestart your computer after installation.
-
Install Ubuntu from Microsoft Store
- Open Microsoft Store
- Search "Ubuntu 22.04" and install
- Launch Ubuntu and set up username/password
-
Install Dependencies in WSL2
# Update system sudo apt update && sudo apt upgrade -y # Install Go wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc source ~/.bashrc # Install Node.js curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs # Install TA-Lib sudo apt-get install -y libta-lib0-dev # Install Git sudo apt-get install -y git -
Clone and Run NOFX
git clone https://github.com/NoFxAiOS/nofx.git cd nofx # Build and run backend go build -o nofx && ./nofx # In another terminal, run frontend cd web && npm install && npm run dev -
Access: Open http://127.0.0.1:3000 in Windows browser
Method 3: Docker in WSL2 (Best of Both Worlds)
-
Install Docker Desktop with WSL2 backend
- During Docker Desktop installation, enable "Use WSL 2 based engine"
- In Docker Desktop Settings → Resources → WSL Integration, enable your Linux distro
-
Run from WSL2 terminal
curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bash
Server Deployment
Quick Deploy (HTTP via IP)
By default, transport encryption is disabled, allowing you to access NOFX via IP address without HTTPS:
# Deploy to your server
curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bash
Access via http://YOUR_SERVER_IP:3000 - works immediately.
Enhanced Security (HTTPS)
For enhanced security, enable transport encryption in .env:
TRANSPORT_ENCRYPTION=true
When enabled, browser uses Web Crypto API to encrypt API keys before transmission. This requires:
https://- Any domain with SSLhttp://localhost- Local development
Quick HTTPS Setup with Cloudflare
-
Add your domain to Cloudflare (free plan works)
- Go to dash.cloudflare.com
- Add your domain and update nameservers
-
Create DNS record
- Type:
A - Name:
nofx(or your subdomain) - Content: Your server IP
- Proxy status: Proxied (orange cloud)
- Type:
-
Configure SSL/TLS
- Go to SSL/TLS settings
- Set encryption mode to Flexible
User ──[HTTPS]──→ Cloudflare ──[HTTP]──→ Your Server:3000 -
Enable transport encryption
# Edit .env and set TRANSPORT_ENCRYPTION=true -
Done! Access via
https://nofx.yourdomain.com
Initial Setup (Web Interface)
After starting the system, configure through the web interface:
- Configure AI Models - Add your AI API keys (DeepSeek, OpenAI, etc.)
- Configure Exchanges - Set up exchange API credentials
- Create Strategy - Configure trading strategy in Strategy Studio
- Create Trader - Combine AI model + Exchange + Strategy
- Start Trading - Launch your configured traders
All configuration is done through the web interface - no JSON file editing required.
Web Interface Features
Competition Page
- Real-time ROI leaderboard
- Multi-AI performance comparison charts
- Live P/L tracking and rankings
Dashboard
- TradingView-style candlestick charts
- Real-time position management
- AI decision logs with Chain of Thought reasoning
- Equity curve tracking
Strategy Studio
- Coin source configuration (Static list, AI500 pool, OI Top)
- Technical indicators (EMA, MACD, RSI, ATR, Volume, OI, Funding Rate)
- Risk control settings (leverage, position limits, margin usage)
- AI test with real-time prompt preview
Debate Arena
- Multi-AI debate sessions for trading decisions
- Configurable AI roles (Bull, Bear, Analyst, Contrarian, Risk Manager)
- Multiple rounds of debate with consensus voting
- Auto-execute consensus trades
Backtest Lab
- 3-step wizard configuration (Model → Parameters → Confirm)
- Real-time progress visualization with animated ring
- Equity curve chart with trade markers
- Trade timeline with card-style display
- Performance metrics (Return, Max DD, Sharpe, Win Rate)
- AI decision trail with Chain of Thought
Common Issues
TA-Lib not found
# macOS
brew install ta-lib
# Ubuntu
sudo apt-get install libta-lib0-dev
AI API timeout
- Check if API key is correct
- Check network connection
- System timeout is 120 seconds
Frontend can't connect to backend
- Ensure backend is running on http://localhost:8080
- Check if port is occupied
Documentation
| Document | Description |
|---|---|
| Architecture Overview | System design and module index |
| Strategy Module | Coin selection, data assembly, AI prompts, execution |
| Backtest Module | Historical simulation, metrics, checkpoint/resume |
| Debate Module | Multi-AI debate, voting consensus, auto-execution |
| FAQ | Frequently asked questions |
| Getting Started | Deployment guide |
License
This project is licensed under GNU Affero General Public License v3.0 (AGPL-3.0) - See LICENSE file.
Contributing
We welcome contributions! See:
- Contributing Guide - Development workflow and PR process
- Code of Conduct - Community guidelines
- Security Policy - Report vulnerabilities
Contributor Airdrop Program
All contributions are tracked on GitHub. When NOFX generates revenue, contributors will receive airdrops based on their contributions.
PRs that resolve Pinned Issues receive the HIGHEST rewards!
| Contribution Type | Weight |
|---|---|
| Pinned Issue PRs | ⭐⭐⭐⭐⭐⭐ |
| Code Commits (Merged PRs) | ⭐⭐⭐⭐⭐ |
| Bug Fixes | ⭐⭐⭐⭐ |
| Feature Suggestions | ⭐⭐⭐ |
| Bug Reports | ⭐⭐ |
| Documentation | ⭐⭐ |
Contact
- GitHub Issues: Submit an Issue
- Developer Community: Telegram Group













