tinkle-community 7e96c5d0f2 Ai grid (#1344)
* 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
2026-01-19 12:07:14 +08:00
2026-01-19 12:07:14 +08:00
2025-12-08 01:43:22 +08:00
2026-01-19 12:07:14 +08:00
2026-01-19 12:07:14 +08:00
2025-12-28 23:29:59 +08:00
2026-01-19 12:07:14 +08:00
2026-01-19 12:07:14 +08:00
2026-01-19 12:07:14 +08:00
2025-12-28 23:29:59 +08:00
2026-01-19 12:07:14 +08:00
2026-01-19 12:07:14 +08:00
2026-01-19 12:07:14 +08:00
2026-01-19 12:07:14 +08:00
2025-12-21 01:36:16 +08:00
2025-12-21 01:36:16 +08:00
2025-11-25 20:32:01 +08:00
2025-12-21 01:36:16 +08:00
2025-11-25 20:18:29 +08:00
2025-12-21 01:36:16 +08:00
2025-12-21 01:36:16 +08:00

NOFX - Agentic Trading OS

Go Version React TypeScript License

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

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:

  1. Exchange Account - Register on any supported exchange and create API credentials with trading permissions
  2. 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
Config - AI Models & Exchanges Config - Traders List

Competition & Backtest

Competition Mode Backtest Lab
Competition Page Backtest Lab

Dashboard

Overview Market Chart
Dashboard Overview Dashboard Market Chart
Trading Stats Position History
Trading Stats Position History
Positions Trader Details
Dashboard Positions Trader Details

Strategy Studio

Strategy Editor Indicators Config
Strategy Studio Strategy Indicators

Debate Arena

AI Debate Session Create Debate
Debate Arena 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:

Deploy on Railway

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

  1. Install Docker Desktop

  2. 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
    
  3. Access: Open http://127.0.0.1:3000 in your browser

Method 2: WSL2 (For Development)

  1. Install WSL2

    # Open PowerShell as Administrator
    wsl --install
    

    Restart your computer after installation.

  2. Install Ubuntu from Microsoft Store

    • Open Microsoft Store
    • Search "Ubuntu 22.04" and install
    • Launch Ubuntu and set up username/password
  3. 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
    
  4. 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
    
  5. Access: Open http://127.0.0.1:3000 in Windows browser

Method 3: Docker in WSL2 (Best of Both Worlds)

  1. 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
  2. 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 SSL
  • http://localhost - Local development

Quick HTTPS Setup with Cloudflare

  1. Add your domain to Cloudflare (free plan works)

  2. Create DNS record

    • Type: A
    • Name: nofx (or your subdomain)
    • Content: Your server IP
    • Proxy status: Proxied (orange cloud)
  3. Configure SSL/TLS

    • Go to SSL/TLS settings
    • Set encryption mode to Flexible
    User ──[HTTPS]──→ Cloudflare ──[HTTP]──→ Your Server:3000
    
  4. Enable transport encryption

    # Edit .env and set
    TRANSPORT_ENCRYPTION=true
    
  5. Done! Access via https://nofx.yourdomain.com


Initial Setup (Web Interface)

After starting the system, configure through the web interface:

  1. Configure AI Models - Add your AI API keys (DeepSeek, OpenAI, etc.)
  2. Configure Exchanges - Set up exchange API credentials
  3. Create Strategy - Configure trading strategy in Strategy Studio
  4. Create Trader - Combine AI model + Exchange + Strategy
  5. 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


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:


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


Star History

Star History Chart

Description
Open-source Trading OS with pluggable AI brain | From market data → AI reasoning → Trade execution | Self-hosted & Multi-exchange
Readme AGPL-3.0 644 MiB
Languages
Go 67.9%
TypeScript 30.9%
Shell 0.6%
CSS 0.4%
JavaScript 0.1%