Skip to content

Latest commit

ย 

History

77 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

OpenQuant โ€” Algorithmic Trading System

Language: English | ไธญๆ–‡
Click to switch language / ็‚นๅ‡ปๅˆ‡ๆข่ฏญ่จ€


๐Ÿ‡ฌ๐Ÿ‡ง English

Overview

OpenQuant is a modular algorithmic trading system built in Python. It runs a parallel dual-engine architecture: Grid Trading (always on, scalping micro-oscillations) and Trend Following (opportunistic, capturing macro moves). Both engines operate independently โ€” the grid never stops, and trend trades overlay on top when a strong signal fires.

The system doesn't predict the market โ€” it reacts to it. Grid grinds. Trend hunts.

Architecture

openquant/
โ”œโ”€โ”€ core/              # State Machine & Double-Entry Ledger (PostgreSQL)
โ”œโ”€โ”€ data/              # Market Data Ingestion (WebSocket) & Indicators
โ”œโ”€โ”€ strategy/          # Grid Strategy, Trend Strategy, Regime Detector
โ”œโ”€โ”€ execution/         # Exchange API Routing & Order Management
โ”œโ”€โ”€ risk/              # Independent Risk Guard
โ”œโ”€โ”€ config/            # JSON Configuration
โ”œโ”€โ”€ tests/             # Unit Tests (100+ passing)
โ”œโ”€โ”€ main.py            # Event Bus & Main Loop
โ”œโ”€โ”€ backtest.py        # Historical Backtesting Engine
โ”œโ”€โ”€ dashboard.py       # Real-Time Trading Dashboard
โ””โ”€โ”€ visualize.py       # Candlestick Chart Generator

Hard rule: The Brain (strategy/) NEVER imports the Hands (execution/). All communication goes through standardized, immutable StrategySignal data classes via the event bus in main.py.

Project Status

Feature Status
Parallel Grid+Trend Engine โœ… Live
Tracking Grid (price-following) โœ… Live
Pyramid Capital Allocation โœ… Live
Volatility-Adaptive Levels โœ… Live
Grid Stop-Loss โœ… Live
Unidirectional Deployment โœ… Live
Double-Entry Ledger (PostgreSQL) โœ… Live
Time-Sync (auto server clock) โœ… Live
Risk Guard (6 checks) โœ… Complete
Binance Spot Live Trading โœ… LIVE โ€” DOGEUSDT
Backtesting (dual engine) โœ… Complete
Real-Time Web Dashboard โœ… Complete
100+ Unit Tests โœ… Passing

Strategy Explained

Dual Engine โ€” Parallel, Not Mutually Exclusive

Old architecture (regime-switching): Detect if market is "trending" or "ranging" โ†’ pick ONE strategy.
New architecture (parallel): Grid runs 100% of the time. Trend independently monitors for strong signals and fires when conditions align. They don't fight โ€” they coexist.

                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚   K-line Data    โ”‚
                    โ”‚   (WebSocket)    โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                             โ”‚
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚   Indicators     โ”‚
                    โ”‚ EMA/MACD/ADX/ATRโ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                             โ”‚
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ”‚                             โ”‚
     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
     โ”‚   GRID ENGINE    โ”‚          โ”‚  TREND ENGINE    โ”‚
     โ”‚   Always Running โ”‚          โ”‚  Opportunistic   โ”‚
     โ”‚   10-layer Trail  โ”‚          โ”‚  EMA Cross+MACD  โ”‚
     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
              โ”‚                             โ”‚
              โ”‚     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ–บ   Risk Guard  โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                    โ”‚   6 Checks     โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                            โ”‚
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚  Order Manager โ”‚
                    โ”‚  โ†’ Binance API โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Strategy A: Grid Trading (Always On)

Place a ladder of limit buy orders below the current price. When price dips, buy. Automatically place a take-profit sell above entry. Round-trip captures 0.3% minus fees.

Parameter Value Meaning
Levels 3~5 per side Capped by capital (min $1/level)
Range ยฑ3% Grid covers 3% above/below current price
Profit 0.3%/level Target profit per round-trip
Rebalance Drift > 1% Auto-recenter around new price

Key innovations over vanilla grid:

  1. Tracking reference price: Grid always centers on the latest close, not a stale SMA. As price drifts, the grid follows โ€” keeping buy levels close to market.

  2. Pyramid capital allocation: Levels closest to the current price get more capital (exponential decay weight). Why? Higher fill probability.

    Capital per level (pyramid decay=0.5):
    Buy #1 (closest):   ~$2.70   57% of side capital
    Buy #2:             ~$1.35   29%
    Buy #3 (farthest):  ~$0.68   14% โ†’ skipped if < $1 min
    
  3. Volatility-adaptive density: More levels in low-volatility ranging markets; fewer in high-volatility trending markets.

  4. Grid stop-loss: If price drops 3% below the lowest buy level, emergency-close the entire grid โ€” prevents catching a falling knife.

  5. Unidirectional deployment: Checks actual account balances before placing orders. No DOGE? Skip sell levels. No USDT? Skip buy levels. No more "insufficient balance" error storms.

Strategy B: Trend Following (Opportunistic)

Evaluated independently every tick. Only fires on true ENTRY or EXIT signals โ€” never overrides the grid.

Signal Condition
LONG Entry EMA12 crosses ABOVE EMA26 + MACD histogram > 0 + market not flat
SHORT Entry EMA12 crosses BELOW EMA26 + MACD histogram < 0 + market not flat
Stop-Loss Entry price ยฑ 2ร— ATR
Trailing Stop Ratchets at 3ร— ATR distance in favorable direction
Position Size Kelly-style: risk 1% of capital per trade
Cooldown First 30 ticks (~2.5h) after startup: no trend trades

Regime Detector (Informational)

The five-factor scoring model still runs, but it no longer MUTES the grid. Its output is used to:

  • Tune grid density (more levels when ranging)
  • Gate trend entries (higher confidence required in ambiguous markets)
  • Provide diagnostic insight
Factor Weight What It Measures
Trend Strength (ADX) 30% Is there a clear directional move?
Volatility Regime 25% Is volatility expanding or contracting?
Momentum (MACD + EMA) 20% Are short-term and long-term forces aligned?
Volume Profile 15% Does volume confirm the price move?
Market Microstructure 10% Are candles decisive or indecisive?

Hysteresis: score > 0.70 โ†’ classify as trending; score < 0.30 โ†’ classify as ranging; otherwise hold previous.


Trade Lifecycle: From Signal to Settlement

Here's exactly what happens when a grid level executes:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  STEP 1: GRID DEPLOYMENT                                    โ”‚
โ”‚  _process_symbol_tick (every 5 min)                         โ”‚
โ”‚  โ†’ compute_grid(reference_price=close, atr, is_ranging)     โ”‚
โ”‚  โ†’ generate_signal โ†’ dispatch                               โ”‚
โ”‚  โ†’ BUY LIMIT 20 DOGE @ 0.0792 โ†’ ๆŒ‚ๅœจ Binance               โ”‚
โ”‚  โ†’ ่ดฆๆˆท USDT ่ขซ้”ๅฎš $1.58                                   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  STEP 2: EXCHANGE FILL (Binance)                            โ”‚
โ”‚  ไปทๆ ผ่ทŒๅˆฐ 0.0792 โ†’ ๆ’ฎๅˆๆˆไบค                                  โ”‚
โ”‚  โ†’ ่ดฆๆˆทๅคšไบ† 19.98 DOGE๏ผˆๆ‰ฃ 0.1% ๆ‰‹็ปญ่ดนๅŽ๏ผ‰                    โ”‚
โ”‚  โ†’ USDT ้”ๅฎš้‡Šๆ”พ                                            โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ  (ๆœ€ๅคš 30 ็ง’ๅŽ)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  STEP 3: RECONCILIATION DETECTS FILL                        โ”‚
โ”‚  _reconciliation_loop (every 30s)                           โ”‚
โ”‚  โ†’ GET /myTrades?symbol=DOGEUSDT&limit=50                   โ”‚
โ”‚  โ†’ ๅ‘็Žฐๆ–ฐๆˆไบค: BUY 20 DOGE @ 0.0792                          โ”‚
โ”‚  โ†’ ๆ—ฅๅฟ—: "Fill: DOGEUSDT BUY 20 @ $0.0792"                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ  (ๅŒไธ€่ฝฎ reconciliation)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  STEP 4: AUTO PLACE TAKE-PROFIT                             โ”‚
โ”‚  โ†’ ่ฎก็ฎ—ๆญข็›ˆไปท: 0.0792 ร— 1.003 = 0.07944                     โ”‚
โ”‚  โ†’ ๆŸฅ DOGE ๅฎž้™…ไฝ™้ข: 19.98 โ†’ ๅ–ๆ•ดๅˆฐๆ•ดๆ•ฐ: 19 DOGE             โ”‚
โ”‚  โ†’ ๅŽป้‡ๆฃ€ๆŸฅ: ่ฟ™ไธช fill ID ๆ˜ฏๅฆๅทฒๅค„็†่ฟ‡๏ผŸโ†’ ๅฆ                  โ”‚
โ”‚  โ†’ SELL LIMIT 19 DOGE @ 0.07944 โ†’ ๆŒ‚ๅœจ Binance              โ”‚
โ”‚  โ†’ ่ฎฐๅฝ•ๅˆฐ _tp_attempted๏ผˆ็ปไธๅค้‡๏ผ‰                           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  STEP 5: TP FILL (Binance)                                  โ”‚
โ”‚  ไปทๆ ผๆถจๅˆฐ 0.07944 โ†’ ๆ’ฎๅˆๆˆไบค                                 โ”‚
โ”‚  โ†’ ๅ–ๅ‡บ 19 DOGE โ†’ ๆ‹ฟๅ›ž ~$1.51 USDT                           โ”‚
โ”‚  โ†’ ๅ‡€่ตš: ~0.3% โˆ’ 0.2% ๆ‰‹็ปญ่ดน = ~$0.002                       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ  (ๆœ€ๅคš 30 ็ง’ๅŽ)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  STEP 6: RECONCILIATION DETECTS TP FILL                     โ”‚
โ”‚  โ†’ ๅ‘็Žฐ SELL ๆˆไบค, ่ฎฐๅฝ•ๅˆฐ่ดฆๆœฌ                                  โ”‚
โ”‚  โ†’ ๆ— ๆ–ฐๅŠจไฝœ๏ผˆๅ–ๅฎŒๅณๆญข๏ผ‰                                       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ  (ไธ‹ๆฌก tick)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  STEP 7: GRID CONTINUES                                     โ”‚
โ”‚  _process_symbol_tick (ๆฏ 5 ๅˆ†้’Ÿ)                             โ”‚
โ”‚  โ†’ ๆฃ€ๆŸฅไปทๆ ผๅ็ฆปๆ˜ฏๅฆ > 1%                                      โ”‚
โ”‚  โ†’ ๆฒกๅ็ฆป: ไนฐๅ•่ฟ˜ๅœจ๏ผŒไป€ไนˆ้ƒฝไธๅš                                โ”‚
โ”‚  โ†’ ๅ็ฆปไบ†: ๅ–ๆถˆๆ—งๅ•๏ผŒๅ›ด็ป•ๆ–ฐไปทๆ ผ้‡ๅปบ็ฝ‘ๆ ผ                         โ”‚
โ”‚  โ†’ ่ดฆๆˆท USDT ๅคŸ โ†’ ๆ–ฐไนฐๅ•่‡ชๅŠจ่กฅไธŠ                              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Key timing:

  • Fill โ†’ system awareness: 0โ€“30 seconds (reconciliation poll interval)
  • Fill โ†’ TP placed: 0โ€“30 seconds (same reconciliation cycle)
  • The system is poll-based, not event-driven. Reconciliation bridges the gap.

Data Flow

WebSocket โ†’ MarketDataEngine โ†’ OHLCV โ†’ Indicators (EMA/MACD/ADX/ATR/RSI/BB)
   โ†’ GridStrategy: always evaluates, may rebalance
   โ†’ TrendStrategy: independently evaluates, fires on strong ENTRY/EXIT
   โ†’ RegimeDetector: scores market (ranging/trending) for parameter tuning
   โ†’ RiskGuard (6 checks) โ†’ APPROVED / BLOCKED / MODIFIED
   โ†’ OrderManager โ†’ Binance API
   โ†’ LedgerEngine (PostgreSQL double-entry bookkeeping)

Safety

Layer What It Does
Strategy Computes signals only โ€” never touches API or database
Risk Guard 6 pre-execution checks: drawdown, daily loss, position size, exposure, dust orders, circuit breaker
Grid Stop-Loss Price drops 3% below grid floor โ†’ emergency close all
Time Sync Auto-syncs Binance server time at startup; auto-corrects on recvWindow errors
Watchdog Independent async task: warns if main loop stalls > 2 tick intervals
Per-Tick Timeout 30-second hard limit per tick; hung ticks are skipped

Double-Entry Ledger (PostgreSQL)

  • Thread-safe connection pool (psycopg2, 2โ€“10 connections)
  • SERIALIZABLE isolation for ACID compliance
  • Every trade: at least two journal lines (one debit, one credit)
  • Immutable audit trail (corrections via reversing entries, never UPDATEs)
  • NUMERIC(20,8) โ€” no floating-point rounding errors in accounting

Tech Stack

  • Language: Python 3.10+
  • Data: pandas, numpy, pandas-ta
  • Database: PostgreSQL 16 (Docker or native)
  • Exchange: Binance REST API & WebSocket (aiohttp)
  • Testing: pytest (100+ tests)
  • Dashboard: HTTP server on port 8080

Quick Start

# Clone
git clone https://github.com/Joe-Xuu/openquant.git
cd openquant

# Virtual environment
python -m venv .venv
source .venv/bin/activate  # or .venv\Scripts\activate on Windows

# Install
pip install -r requirements.txt

# Database (Docker)
docker-compose up -d   # starts PostgreSQL 16

# Configure
cp .env.example .env
# Edit .env with your Binance API keys

# Unit tests
python -m pytest tests/ -v

# Run
python main.py

Live Trading

# 1. Set BINANCE_TESTNET=false in .env
# 2. Fill in BINANCE_API_KEY and BINANCE_API_SECRET
# 3. Whitelist your IP in Binance API Management

python main.py

Dashboard

# Real-time dashboard at http://localhost:8080
python dashboard.py

Backtest

# Run backtest on historical data
python backtest.py --symbol DOGEUSDT --capital 12

Visualization

# Generate candlestick charts with trade markers
python visualize.py

๐Ÿ‡จ๐Ÿ‡ณ ไธญๆ–‡

ๆฆ‚่ฟฐ

OpenQuant ๆ˜ฏไธ€ไธช็”จ Python ๆž„ๅปบ็š„ๆจกๅ—ๅŒ–็ฎ—ๆณ•ไบคๆ˜“็ณป็ปŸใ€‚้‡‡็”จๅนถ่กŒๅŒๅผ•ๆ“Žๆžถๆž„๏ผš็ฝ‘ๆ ผไบคๆ˜“๏ผˆๅธธ้ฉป่ฟ่กŒ๏ผŒ่š•้ฃŸๅพฎๅน…้œ‡่ก๏ผ‰ๅ’Œ่ถ‹ๅŠฟ่ทŸ้š๏ผˆไผบๆœบ่€ŒๅŠจ๏ผŒๆ•่Žทๅฎ่ง‚ๆณขๆฎต๏ผ‰ใ€‚ไธคไธชๅผ•ๆ“Ž็‹ฌ็ซ‹ๅนถ่กŒโ€”โ€”็ฝ‘ๆ ผๆฐธไธๅœ๏ผŒ่ถ‹ๅŠฟไฟกๅทๅผบๆ—ถๅ ๅŠ ไป‹ๅ…ฅใ€‚

็ณป็ปŸไธ้ข„ๆต‹ๅธ‚ๅœบโ€”โ€”ๅฎƒๅฏนๅธ‚ๅœบๅšๅ‡บๅๅบ”ใ€‚็ฝ‘ๆ ผ็ฃจๅฐๅˆฉ๏ผŒ่ถ‹ๅŠฟๆŠ“ๅคงๆณขใ€‚

็ณป็ปŸๆžถๆž„

openquant/
โ”œโ”€โ”€ core/              # ็Šถๆ€ๆœบ & ๅคๅผ่ฎฐ่ดฆ่ดฆๆœฌ (PostgreSQL)
โ”œโ”€โ”€ data/              # ่กŒๆƒ…ๆ•ฐๆฎ (WebSocket) & ๆŠ€ๆœฏๆŒ‡ๆ ‡
โ”œโ”€โ”€ strategy/          # ็ฝ‘ๆ ผ็ญ–็•ฅใ€่ถ‹ๅŠฟ็ญ–็•ฅใ€็Šถๆ€ๆฃ€ๆต‹ๅ™จ
โ”œโ”€โ”€ execution/         # ไบคๆ˜“ๆ‰€ API ่ทฏ็”ฑ & ่ฎขๅ•็ฎก็†
โ”œโ”€โ”€ risk/              # ็‹ฌ็ซ‹้ฃŽ้™ฉๅฎˆๅซ
โ”œโ”€โ”€ config/            # JSON ้…็ฝฎ
โ”œโ”€โ”€ tests/             # ๅ•ๅ…ƒๆต‹่ฏ• (100+ ้€š่ฟ‡)
โ”œโ”€โ”€ main.py            # ไบ‹ไปถๆ€ป็บฟ & ไธปๅพช็Žฏ
โ”œโ”€โ”€ backtest.py        # ๅކๅฒๅ›žๆต‹ๅผ•ๆ“Ž
โ”œโ”€โ”€ dashboard.py       # ๅฎžๆ—ถไบคๆ˜“็œ‹ๆฟ
โ””โ”€โ”€ visualize.py       # K็บฟๅ›พ็”Ÿๆˆๅ™จ

้“ๅพ‹๏ผš ๅคง่„‘๏ผˆstrategy/๏ผ‰็ปไธๅฏผๅ…ฅๅŒๆ‰‹๏ผˆexecution/๏ผ‰ใ€‚ๆ‰€ๆœ‰้€šไฟก้€š่ฟ‡ๆ ‡ๅ‡†ๅŒ–ไธๅฏๅ˜็š„ StrategySignal ๆ•ฐๆฎ็ฑป๏ผŒ็ป็”ฑ main.py ไธญ็š„ไบ‹ไปถๆ€ป็บฟไผ ้€’ใ€‚

้กน็›ฎ็Šถๆ€

ๅŠŸ่ƒฝ ็Šถๆ€
ๅนถ่กŒ็ฝ‘ๆ ผ+่ถ‹ๅŠฟๅผ•ๆ“Ž โœ… ๅฎž็›˜่ฟ่กŒ
่ฟฝ่ธช็ฝ‘ๆ ผ๏ผˆ่ทŸ้šๅธ‚ไปท๏ผ‰ โœ… ๅฎž็›˜่ฟ่กŒ
้‡‘ๅญ—ๅก”่ต„้‡‘ๅˆ†้… โœ… ๅฎž็›˜่ฟ่กŒ
ๆณขๅŠจ็އ่‡ช้€‚ๅบ”ๅฑ‚ๆ•ฐ โœ… ๅฎž็›˜่ฟ่กŒ
็ฝ‘ๆ ผๆ€ปๆญขๆŸ โœ… ๅฎž็›˜่ฟ่กŒ
ๅ•ๅ‘้ƒจ็ฝฒ โœ… ๅฎž็›˜่ฟ่กŒ
ๅคๅผ่ฎฐ่ดฆ (PostgreSQL) โœ… ๅฎž็›˜่ฟ่กŒ
่‡ชๅŠจๅฏนๆ—ถ โœ… ๅฎž็›˜่ฟ่กŒ
้ฃŽ้™ฉๅฎˆๅซ (6้กนๆฃ€ๆŸฅ) โœ… ๅฎŒๆˆ
ๅธๅฎ‰็Žฐ่ดงๅฎž็›˜ โœ… ๅฎž็›˜ โ€” DOGEUSDT
ๅ›žๆต‹ (ๅŒๅผ•ๆ“Ž) โœ… ๅฎŒๆˆ
ๅฎžๆ—ถ็ฝ‘้กต็œ‹ๆฟ โœ… ๅฎŒๆˆ
100+ ๅ•ๅ…ƒๆต‹่ฏ• โœ… ้€š่ฟ‡

็ญ–็•ฅ่ฏฆ่งฃ

ๅŒๅผ•ๆ“Žๅนถ่กŒ โ€” ไธไบ’ๆ–ฅ

ๆ—งๆžถๆž„๏ผˆ็Šถๆ€ๅˆ‡ๆข๏ผ‰๏ผš ๆฃ€ๆต‹่ถ‹ๅŠฟ/้œ‡่ก โ†’ ้€‰ไธ€ไธช็ญ–็•ฅ่ท‘ใ€‚
ๆ–ฐๆžถๆž„๏ผˆๅนถ่กŒ๏ผ‰๏ผš ็ฝ‘ๆ ผ 100% ๆ—ถ้—ดๅœจ่ท‘ใ€‚่ถ‹ๅŠฟ็‹ฌ็ซ‹็›‘ๆŽง๏ผŒๅชๅœจๅผบไฟกๅทๆ—ถๅ‡บๆ‰‹ใ€‚ไธค่€…ไธๆ‰“ๆžถ๏ผŒๅ…ฑๅญ˜ใ€‚

                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚    K็บฟๆ•ฐๆฎ (WS)   โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                             โ”‚
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚   ๆŠ€ๆœฏๆŒ‡ๆ ‡่ฎก็ฎ—    โ”‚
                    โ”‚ EMA/MACD/ADX/ATRโ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                             โ”‚
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ”‚                             โ”‚
     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
     โ”‚   ็ฝ‘ๆ ผๅผ•ๆ“Ž       โ”‚          โ”‚   ่ถ‹ๅŠฟๅผ•ๆ“Ž        โ”‚
     โ”‚   ๆฐธ่ฟœๅœจ็บฟ       โ”‚          โ”‚   ไผบๆœบ่€ŒๅŠจ        โ”‚
     โ”‚   ่ฟฝ่ธช็ฝ‘ๆ ผ       โ”‚          โ”‚   EMAไบคๅ‰+MACD   โ”‚
     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
              โ”‚                             โ”‚
              โ”‚     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ–บ   ้ฃŽ้™ฉๅฎˆๅซ     โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                    โ”‚   6้กนๆฃ€ๆŸฅ      โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                            โ”‚
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚   ่ฎขๅ•็ฎก็†ๅ™จ   โ”‚
                    โ”‚   โ†’ ๅธๅฎ‰ API  โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

็ญ–็•ฅ A๏ผš็ฝ‘ๆ ผไบคๆ˜“๏ผˆๅธธ้ฉป่ฟ่กŒ๏ผ‰

ๅœจๅฝ“ๅ‰ไปทไธ‹ๆ–นๆŒ‚ไธ€ๆŽ’้™ไปทไนฐๅ•ใ€‚ไปทๆ ผ่ทŒๅˆฐๅฐฑๅƒ่ฟ›๏ผŒ่‡ชๅŠจๅœจไธŠๆ–นๆŒ‚ๆญข็›ˆๅ–ๅ•ใ€‚ไธ€่ฝฎไนฐๅ–ๅƒ 0.3% ๅทฎไปทใ€‚

ๅ‚ๆ•ฐ ๅ€ผ ๅซไน‰
ๅฑ‚ๆ•ฐ 3~5/่พน ๆŒ‰่ต„ๆœฌ่‡ชๅŠจๅฐ้กถ๏ผˆๆฏๅฑ‚โ‰ฅ$1๏ผ‰
่Œƒๅ›ด ยฑ3% ็ฝ‘ๆ ผ่ฆ†็›–ๅฝ“ๅ‰ไปทไธŠไธ‹ 3%
ๅˆฉๆถฆ 0.3%/ๅฑ‚ ๆฏ็ฌ”็›ฎๆ ‡ๅˆฉๆถฆ
้‡ๅนณ่กก ๅ็ฆป >1% ่‡ชๅŠจๅ›ด็ป•ๆ–ฐไปทๆ ผ้‡ๅปบ

็›ธๆฏ”ไผ ็ปŸ็ฝ‘ๆ ผ็š„ๅˆ›ๆ–ฐ๏ผš

  1. ่ฟฝ่ธชๅ‚่€ƒไปท๏ผš ็ฝ‘ๆ ผๅง‹็ปˆไปฅๆœ€ๆ–ฐๆ”ถ็›˜ไปทไธบไธญๅฟƒ๏ผŒ่€Œ้ž่ฟ‡ๆ—ถ็š„ๅ‡็บฟใ€‚ไปทๆ ผๆผ‚็งป๏ผŒ็ฝ‘ๆ ผ่ทŸ้šโ€”โ€”ไนฐๅ•ๅง‹็ปˆ็ดง่ดดๅธ‚ไปทใ€‚

  2. ้‡‘ๅญ—ๅก”่ต„้‡‘ๅˆ†้…๏ผš ็ฆปๅธ‚ไปท่ถŠ่ฟ‘็š„ๅฑ‚ๅˆ†้…่ถŠๅคš่ต„้‡‘๏ผˆๆŒ‡ๆ•ฐ่กฐๅ‡ๆƒ้‡๏ผ‰๏ผŒๅ› ไธบๆˆไบคๆฆ‚็އๆ›ด้ซ˜ใ€‚

  3. ๆณขๅŠจ็އ่‡ช้€‚ๅบ”ๅฏ†ๅบฆ๏ผš ไฝŽๆณขๅŠจๆจช็›˜ๆ—ถๅŠ ๅฏ†ๅฑ‚ๆ•ฐ๏ผ›้ซ˜ๆณขๅŠจ่ถ‹ๅŠฟๆ—ถๅ‡็–ๅฑ‚ๆ•ฐใ€‚

  4. ็ฝ‘ๆ ผๆ€ปๆญขๆŸ๏ผš ไปทๆ ผ่ทŒ็ ด็ฝ‘ๆ ผไธ‹็•Œ 3% โ†’ ็ดงๆ€ฅๆธ…ไป“๏ผŒ้˜ฒๆญขๆŽฅ้ฃžๅˆ€ใ€‚

  5. ๅ•ๅ‘้ƒจ็ฝฒ๏ผš ไธ‹ๅ•ๅ‰ๆฃ€ๆŸฅๅฎž้™…ไฝ™้ขใ€‚ๆฒก DOGE ไธๆŒ‚ๅ–ๅ•๏ผŒๆฒก USDT ไธๆŒ‚ไนฐๅ•ใ€‚ๆถˆ็ญ "insufficient balance" ้”™่ฏฏๆดชๆตใ€‚

็ญ–็•ฅ B๏ผš่ถ‹ๅŠฟ่ทŸ้š๏ผˆไผบๆœบ่€ŒๅŠจ๏ผ‰

ๆฏ tick ็‹ฌ็ซ‹่ฏ„ไผฐใ€‚ๅชๅœจ็œŸๆญฃ็š„ๅ…ฅๅœบ/็ฆปๅœบไฟกๅทๆ—ถๅ‡บๆ‰‹โ€”โ€”็ปไธๅŽ‹ๅˆถ็ฝ‘ๆ ผใ€‚

ไฟกๅท ๆกไปถ
ๅšๅคš EMA12 ไธŠ็ฉฟ EMA26 + MACDๆŸฑ>0 + ้žๆจช็›˜
ๅš็ฉบ EMA12 ไธ‹็ฉฟ EMA26 + MACDๆŸฑ<0 + ้žๆจช็›˜
ๆญขๆŸ ๅ…ฅไปท ยฑ 2ร—ATR
็งปๅŠจๆญข็›ˆ ๆœ‰ๅˆฉๆ–นๅ‘ 3ร—ATR ่ฟฝ่ธช๏ผˆๅช่ฟ›ไธ้€€๏ผ‰
ไป“ไฝ Kelly้ฃŽๆ ผ๏ผšๆฏ็ฌ”ๅ†’ 1% ๆœฌ้‡‘้ฃŽ้™ฉ
ๅ†ทๅดๆœŸ ๅฏๅŠจๅŽๅ‰ 30 tick(~2.5h)๏ผš่ถ‹ๅŠฟไธไบคๆ˜“

็Šถๆ€ๆฃ€ๆต‹ๅ™จ๏ผˆไฟกๆฏๅ‚่€ƒ๏ผ‰

ไบ”ๅ› ๅญ่ฏ„ๅˆ†ๆจกๅž‹ไปๅœจ่ฟ่กŒ๏ผŒไฝ†ไธๅ†ๅŽ‹ๅˆถ็ฝ‘ๆ ผใ€‚่พ“ๅ‡บ็”จไบŽ๏ผš

  • ่ฐƒๆ•ด็ฝ‘ๆ ผๅฏ†ๅบฆ๏ผˆ้œ‡่กๅธ‚ๅŠ ๅฏ†๏ผ‰
  • ๆŽงๅˆถ่ถ‹ๅŠฟๅ…ฅๅœบ้—จๆง›๏ผˆๆจก็ณŠๅธ‚ๆ้ซ˜่ฆๆฑ‚๏ผ‰
  • ๆไพ›่ฏŠๆ–ญๅ‚่€ƒ
ๅ› ๅญ ๆƒ้‡ ่กก้‡ๅ†…ๅฎน
่ถ‹ๅŠฟๅผบๅบฆ (ADX) 30% ๆ˜ฏๅฆๅญ˜ๅœจๆ˜Ž็กฎๆ–นๅ‘่ฟๅŠจ๏ผŸ
ๆณขๅŠจ็އ็Šถๆ€ 25% ๆณขๅŠจ็އๅœจๆ‰ฉๅผ ่ฟ˜ๆ˜ฏๆ”ถ็ผฉ๏ผŸ
ๅŠจ้‡ (MACD + EMA) 20% ็ŸญๆœŸๅ’Œ้•ฟๆœŸๅŠ›้‡ๆ˜ฏๅฆไธ€่‡ด๏ผŸ
ๆˆไบค้‡็”ปๅƒ 15% ๆˆไบค้‡ๆ˜ฏๅฆ็กฎ่ฎคไปทๆ ผ่ตฐๅŠฟ๏ผŸ
ๅธ‚ๅœบๅพฎ่ง‚็ป“ๆž„ 10% K็บฟๅฎžไฝ“/ๅฝฑ็บฟๆฏ”ๆ˜ฏๅฆๆžœๆ–ญ๏ผŸ

่ฟŸๆปž้—จ๏ผšscore > 0.70 โ†’ ่ถ‹ๅŠฟ๏ผ›score < 0.30 โ†’ ้œ‡่ก๏ผ›ไธญ้—ด โ†’ ็ปดๆŒใ€‚


ไบคๆ˜“็”Ÿๅ‘ฝๅ‘จๆœŸ๏ผšไปŽไฟกๅทๅˆฐ็ป“็ฎ—

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ็ฌฌ1ๆญฅ๏ผš็ฝ‘ๆ ผ้ƒจ็ฝฒ                                    โ”‚
โ”‚  _process_symbol_tick (ๆฏ 5 ๅˆ†้’Ÿ)                   โ”‚
โ”‚  โ†’ compute_grid(ๅ‚่€ƒไปท=ๆ”ถ็›˜ไปท)                      โ”‚
โ”‚  โ†’ BUY LIMIT 20 DOGE @ 0.0792 โ†’ ๆŒ‚ๅœจๅธๅฎ‰           โ”‚
โ”‚  โ†’ ่ดฆๆˆท USDT ่ขซ้”ๅฎš                                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ”‚
                         โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ็ฌฌ2ๆญฅ๏ผšๅธๅฎ‰ๆˆไบค                                    โ”‚
โ”‚  ไปทๆ ผ่ทŒๅˆฐ 0.0792 โ†’ ๆ’ฎๅˆๆˆไบค                         โ”‚
โ”‚  โ†’ ่ดฆๆˆทๅคšไบ† 19.98 DOGE๏ผˆๆ‰ฃ 0.1% ๆ‰‹็ปญ่ดน๏ผ‰             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ”‚
                         โ–ผ  (ๆœ€ๅคš 30 ็ง’)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ็ฌฌ3ๆญฅ๏ผšๅฏน่ดฆๅ‘็Žฐๆˆไบค                                 โ”‚
โ”‚  _reconciliation_loop (ๆฏ 30 ็ง’)                   โ”‚
โ”‚  โ†’ GET /myTrades โ†’ ๅ‘็Žฐๆ–ฐๆˆไบค                       โ”‚
โ”‚  โ†’ ๆ—ฅๅฟ—: "Fill: DOGEUSDT BUY 20 @ $0.0792"       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ”‚
                         โ–ผ  (ๅŒไธ€่ฝฎๅฏน่ดฆ)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ็ฌฌ4ๆญฅ๏ผš่‡ชๅŠจๆŒ‚ๆญข็›ˆ                                  โ”‚
โ”‚  โ†’ ๆญข็›ˆไปท = 0.0792 ร— 1.003 = 0.07944              โ”‚
โ”‚  โ†’ ๆŸฅ DOGE ๅฎž้™…ไฝ™้ข: 19.98 โ†’ ๅ–ๆ•ด: 19 DOGE         โ”‚
โ”‚  โ†’ ๅŽป้‡ๆฃ€ๆŸฅ: ๆญคๆˆไบคIDๆ˜ฏๅฆๅทฒๅค„็†๏ผŸโ†’ ๅฆ                โ”‚
โ”‚  โ†’ SELL LIMIT 19 DOGE @ 0.07944 โ†’ ๆŒ‚ๅœจๅธๅฎ‰         โ”‚
โ”‚  โ†’ ่ฎฐๅ…ฅ _tp_attempted (็ปไธๅค้‡)                    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ”‚
                         โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ็ฌฌ5ๆญฅ๏ผšๆญข็›ˆๆˆไบค                                    โ”‚
โ”‚  ไปทๆ ผๆถจๅˆฐ 0.07944 โ†’ ๆ’ฎๅˆๆˆไบค                        โ”‚
โ”‚  โ†’ ๅ–ๅ‡บ 19 DOGE โ†’ ๆ‹ฟๅ›ž USDT                        โ”‚
โ”‚  โ†’ ๅ‡€่ตš: ~0.3% โˆ’ 0.2% ๆ‰‹็ปญ่ดน                       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ”‚
                         โ–ผ  (ๆœ€ๅคš 30 ็ง’)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ็ฌฌ6ๆญฅ๏ผšๅฏน่ดฆ็กฎ่ฎค                                    โ”‚
โ”‚  โ†’ ๅ‘็Žฐ SELL ๆˆไบค๏ผŒ่ฎฐๅฝ•ๅˆฐ่ดฆๆœฌ                        โ”‚
โ”‚  โ†’ ๆ— ๆ–ฐๅŠจไฝœ๏ผˆๅ–ๅฎŒๅณๆญข๏ผ‰                             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ”‚
                         โ–ผ  (ไธ‹ๆฌก tick)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ็ฌฌ7ๆญฅ๏ผš็ฝ‘ๆ ผ็ปง็ปญ่ฟ่ฝฌ                                 โ”‚
โ”‚  _process_symbol_tick (ๆฏ 5 ๅˆ†้’Ÿ)                   โ”‚
โ”‚  โ†’ ๆฃ€ๆŸฅไปทๆ ผๅ็ฆป >1%๏ผŸโ†’ ๅฆ๏ผšไป€ไนˆ้ƒฝไธๅš                โ”‚
โ”‚  โ†’ ๆ˜ฏ๏ผšๅ–ๆถˆๆ—งๅ•๏ผŒๅ›ด็ป•ๆ–ฐไปทๆ ผ้‡ๅปบ็ฝ‘ๆ ผ                   โ”‚
โ”‚  โ†’ USDT ๅคŸ โ†’ ๆ–ฐไนฐๅ•่‡ชๅŠจ่กฅไธŠ                         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅ…ณ้”ฎๆ—ถ้—ด๏ผš

  • ๆˆไบค โ†’ ็ณป็ปŸๆ„Ÿ็Ÿฅ๏ผš0~30 ็ง’๏ผˆๅฏน่ดฆ่ฝฎ่ฏข้—ด้š”๏ผ‰
  • ๆˆไบค โ†’ ๆญข็›ˆๆŒ‚ไธŠ๏ผš0~30 ็ง’๏ผˆๅŒไธ€่ฝฎๅฏน่ดฆๅฎŒๆˆ๏ผ‰
  • ็ณป็ปŸๆ˜ฏ่ฝฎ่ฏขๅˆถ๏ผŒ้žไบ‹ไปถ้ฉฑๅŠจใ€‚ๅฏน่ดฆๆ˜ฏๆ„Ÿ็Ÿฅๆˆไบค็š„ๅ”ฏไธ€้€”ๅพ„ใ€‚

ๅฎ‰ๅ…จ้˜ฒ็บฟ

ๅฑ‚็บง ่Œ่ดฃ
็ญ–็•ฅๅฑ‚ ๅช่ฎก็ฎ—ไฟกๅท โ€” ็ปไธๆŽฅ่งฆ API ๆˆ–ๆ•ฐๆฎๅบ“
้ฃŽ้™ฉๅฎˆๅซ 6 ้กนๆ‰ง่กŒๅ‰ๆฃ€ๆŸฅ๏ผšๅ›žๆ’คใ€ๆ—ฅๅ†…ไบๆŸใ€ๅคดๅฏธ่ง„ๆจกใ€ๆ•žๅฃใ€็ฒ‰ๅฐ˜่ฎขๅ•ใ€็†”ๆ–ญ
็ฝ‘ๆ ผๆญขๆŸ ไปทๆ ผ่ทŒ็ ด็ฝ‘ๆ ผไธ‹็•Œ 3% โ†’ ็ดงๆ€ฅๅ…จๅนณ
่‡ชๅŠจๅฏนๆ—ถ ๅฏๅŠจๆ—ถไธŽๅธๅฎ‰ๆœๅŠกๅ™จๅŒๆญฅๆ—ถ้’Ÿ๏ผ›recvWindow ้”™่ฏฏ่‡ชๅŠจ็บ ๆญฃ
็œ‹้—จ็‹— ็‹ฌ็ซ‹ๅผ‚ๆญฅไปปๅŠก๏ผšไธปๅพช็Žฏๅœๆปž่ถ… 2 ไธช tick ้—ด้š” โ†’ ๆŠฅ่ญฆ
้€ tick ่ถ…ๆ—ถ ๆฏไธช tick ็กฌ้™ 30 ็ง’๏ผŒ่ถ…ๆ—ถ่ทณ่ฟ‡ไธ้˜ปๅกž

ๅคๅผ่ฎฐ่ดฆ (PostgreSQL)

  • ็บฟ็จ‹ๅฎ‰ๅ…จ่ฟžๆŽฅๆฑ ๏ผˆpsycopg2๏ผŒ2~10 ่ฟžๆŽฅ๏ผ‰
  • SERIALIZABLE ้š”็ฆป็บงๅˆซ๏ผŒACID ๅˆ่ง„
  • ๆฏ็ฌ”ไบคๆ˜“่‡ณๅฐ‘ไธคๆกๅˆ†ๅฝ•๏ผˆไธ€ๅ€Ÿไธ€่ดท๏ผ‰
  • ไธๅฏๅ˜ๅฎก่ฎก่ฟฝๆบฏ๏ผˆไฟฎๆญฃ้€š่ฟ‡ๅ†ฒ้”€ๅˆ†ๅฝ•๏ผŒ็ปไธ UPDATE๏ผ‰
  • NUMERIC(20,8) โ€” ๆœ็ปๆตฎ็‚น่ˆๅ…ฅ่ฏฏๅทฎ

ๆŠ€ๆœฏๆ ˆ

  • ่ฏญ่จ€๏ผš Python 3.10+
  • ๆ•ฐๆฎๅค„็†๏ผš pandas, numpy, pandas-ta
  • ๆ•ฐๆฎๅบ“๏ผš PostgreSQL 16 (Docker ๆˆ–ๅŽŸ็”Ÿ)
  • ไบคๆ˜“ๆ‰€๏ผš Binance REST API & WebSocket (aiohttp)
  • ๆต‹่ฏ•๏ผš pytest (100+ ้กน)
  • ็œ‹ๆฟ๏ผš HTTP ๆœๅŠก๏ผŒ็ซฏๅฃ 8080

ๅฟซ้€Ÿๅผ€ๅง‹

# ๅ…‹้š†
git clone https://github.com/Joe-Xuu/openquant.git
cd openquant

# ่™šๆ‹Ÿ็Žฏๅขƒ
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate

# ๅฎ‰่ฃ…ไพ่ต–
pip install -r requirements.txt

# ๆ•ฐๆฎๅบ“ (Docker)
docker-compose up -d   # ๅฏๅŠจ PostgreSQL 16

# ้…็ฝฎ
cp .env.example .env
# ็ผ–่พ‘ .env ๅกซๅ…ฅๅธๅฎ‰ API ๅฏ†้’ฅ

# ๆต‹่ฏ•
python -m pytest tests/ -v

# ๅฏๅŠจ
python main.py

ๅฎž็›˜ไบคๆ˜“

# 1. .env ไธญ่ฎพ็ฝฎ BINANCE_TESTNET=false
# 2. ๅกซๅ…ฅ BINANCE_API_KEY ๅ’Œ BINANCE_API_SECRET
# 3. ๅŽปๅธๅฎ‰ API ็ฎก็†้กต้ขๆŠŠ IP ๅŠ ๅ…ฅ็™ฝๅๅ•

python main.py

็œ‹ๆฟ

python dashboard.py   # http://localhost:8080

ๅ›žๆต‹

python backtest.py --symbol DOGEUSDT --capital 12

ๅฏ่ง†ๅŒ–

python visualize.py   # K็บฟๅ›พไฟๅญ˜ๅˆฐ charts/ ็›ฎๅฝ•

๐Ÿ“ License

MIT โ€” see LICENSE file for details.

โš ๏ธ Disclaimer

This software is for educational and research purposes only. Trading cryptocurrencies involves substantial risk of loss and is not suitable for all investors. Past performance is not indicative of future results. The authors assume no responsibility for any financial losses incurred through the use of this software.

ๆœฌ่ฝฏไปถไป…ไพ›ๅญฆไน ๅ’Œ็ ”็ฉถไฝฟ็”จใ€‚ๅŠ ๅฏ†่ดงๅธไบคๆ˜“ๅญ˜ๅœจ้‡ๅคงไบๆŸ้ฃŽ้™ฉ๏ผŒๅนถไธ้€‚ๅˆๆ‰€ๆœ‰ๆŠ•่ต„่€…ใ€‚ๅކๅฒ่กจ็Žฐไธไปฃ่กจๆœชๆฅ็ป“ๆžœใ€‚ไฝœ่€…ๅฏนไฝฟ็”จๆœฌ่ฝฏไปถไบง็”Ÿ็š„ไปปไฝ•่ดขๅŠกๆŸๅคฑไธๆ‰ฟๆ‹…่ดฃไปปใ€‚

About

a modular algorithmic trading system

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages