Files
nofx/docs/market-regime-classification-en.md
T
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

12 KiB
Raw Blame History

Market Regime Classification Framework

A comprehensive market state identification system for quantitative trading strategy matching


1. Classification Dimensions Overview

Market state identification requires analysis across multiple dimensions:

Dimension Sub-dimensions Description
Trend Direction, Strength Determine market movement direction and momentum
Volatility Amplitude, Frequency Measure price fluctuation characteristics
Structure Pattern, Phase Identify market structure and cycle position

2. Primary Classification (5 Categories)

2.1 Classification Overview

Code Name Key Characteristics Suitable Strategies
TREND_UP Uptrend Higher highs & higher lows Trend following, Breakout
TREND_DOWN Downtrend Lower highs & lower lows Trend following, Short selling
RANGE Range-bound Price oscillates within bounds Grid trading, Mean reversion
TRANSITION Transition Uncertain directional period Wait & watch, Small positions
BREAKOUT Breakout Price breaks key levels Breakout trading

2.2 Identification Indicators

  • ADX (Average Directional Index): Measures trend strength
    • ADX > 25: Clear trend exists
    • ADX < 20: Range-bound market
  • EMA Alignment: Determines trend direction
    • EMA20 > EMA50 > EMA200: Bullish alignment
    • EMA20 < EMA50 < EMA200: Bearish alignment

3. Secondary Classification (18 Sub-categories)

3.1 Uptrend Sub-categories (5 Types)

Code Name Technical Features Quantitative Indicators
TU_STRONG_LOW_VOL Strong Uptrend · Low Vol Steady rise, shallow pullbacks ADX>40, ATR%<2%, Pullback<38.2%
TU_STRONG_HIGH_VOL Strong Uptrend · High Vol Rapid surge, high volatility ADX>40, ATR%>4%, MACD histogram expanding
TU_WEAK_CHOPPY Weak Uptrend · Choppy Two steps forward, one back ADX 20-30, RSI oscillating 50-70
TU_PARABOLIC Parabolic Acceleration Exponential price increase Price far from MA, RSI>80, Volume surge
TU_EXHAUSTION Uptrend Exhaustion New highs but weakening momentum Price new high + MACD/RSI divergence

Strategy Matching:

  • Strong Low Vol: Heavy trend following, pyramid adding
  • Strong High Vol: Medium position, trailing stops
  • Weak Choppy: Light swing trading
  • Parabolic: Cautious, prepare to exit
  • Exhaustion: Reduce positions, prepare for reversal

3.2 Downtrend Sub-categories (5 Types)

Code Name Technical Features Quantitative Indicators
TD_STRONG_LOW_VOL Strong Downtrend · Low Vol Steady decline, weak bounces ADX>40, ATR%<2%, Bounce<38.2%
TD_STRONG_HIGH_VOL Strong Downtrend · High Vol Panic selling, wild swings ADX>40, ATR%>5%, VIX spike
TD_WEAK_CHOPPY Weak Downtrend · Choppy Grinding lower with bounces ADX 20-30, RSI oscillating 30-50
TD_CAPITULATION Capitulation High volume crash, extreme fear RSI<20, Volume>3x average
TD_EXHAUSTION Downtrend Exhaustion New lows but selling pressure fading Price new low + MACD/RSI divergence

Strategy Matching:

  • Strong Low Vol: Short trend following
  • Strong High Vol: Stay flat or light hedge
  • Weak Choppy: Wait for stabilization
  • Capitulation: Light bottom fishing possible
  • Exhaustion: Gradually build long positions

3.3 Range Sub-categories (4 Types)

Code Name Technical Features Quantitative Indicators
RG_TIGHT_LOW_VOL Tight Range · Low Vol Extreme contraction, coiling BB Width<2%, ATR at new lows
RG_TIGHT_HIGH_VOL Tight Range · High Vol Violent swings within range BB Width<3%, ATR%>3%
RG_WIDE_LOW_VOL Wide Range · Low Vol Large range, slow movement BB Width>5%, ATR%<2%
RG_WIDE_HIGH_VOL Wide Range · High Vol Large range, fast movement BB Width>5%, ATR%>3%

Strategy Matching:

  • Tight Low Vol: Dense grid, wait for breakout
  • Tight High Vol: Fast grid, small frequent profits
  • Wide Low Vol: Sparse grid, patient holding
  • Wide High Vol: Swing trading, high profit targets

3.4 Transition (2 Types)

Code Name Technical Features Quantitative Indicators
TR_BOTTOM_FORMING Bottom Forming Decline slowing, testing support Price stabilizing + Volume drying up + RSI divergence
TR_TOP_FORMING Top Forming Rally slowing, testing resistance Price stalling + Volume drying up + RSI divergence

3.5 Breakout (2 Types)

Code Name Technical Features Quantitative Indicators
BK_UPWARD Upward Breakout Breaking resistance with volume Price>Previous high, Volume>2x, BB breakout
BK_DOWNWARD Downward Breakout Breaking support with volume Price<Previous low, Volume>2x, BB breakdown

4. Tertiary Classification (36 Ultra-fine Categories)

4.1 Trend Phase Classification

Uptrend lifecycle consists of 5 phases:

Phase Code Name Description Quantitative Criteria
TU_S1_INITIATION Uptrend Initiation First break above MA or previous high MACD bullish cross, Price>EMA20
TU_S2_ACCELERATION Uptrend Acceleration Momentum increasing, slope steepening MACD histogram expanding, ADX rising
TU_S3_MAIN_WAVE Main Wave Sustained rise, shallow pullbacks RSI 60-80, Pullbacks hold EMA20
TU_S4_EXHAUSTION Uptrend Exhaustion Slowing momentum, divergences appearing RSI divergence, MACD divergence
TU_S5_REVERSAL Trend Reversal Breakdown, trend ending Break below EMA50, MACD bearish cross

Downtrend phases follow same pattern: TD_S1 through TD_S5

4.2 Range Position Classification

Position Code Name Description Strategy Suggestion
RG_UPPER Upper Range Price near resistance Bias toward short
RG_MIDDLE Mid Range Price near middle band Neutral grid trading
RG_LOWER Lower Range Price near support Bias toward long
RG_SQUEEZE Squeeze Pattern Highs and lows converging Wait for direction
RG_EXPAND Expanding Pattern Highs and lows diverging Boundary reversal

4.3 Volatility Grades

Code Name ATR% BB Width Strategy Suggestion
VOL_EXTREME_LOW Extreme Low Vol <1% <1.5% Option selling
VOL_LOW Low Volatility 1-2% 1.5-2.5% Grid / Mean reversion
VOL_NORMAL Normal Volatility 2-3% 2.5-4% Trend following
VOL_HIGH High Volatility 3-5% 4-6% Momentum / Breakout
VOL_EXTREME_HIGH Extreme High Vol >5% >6% Reduce exposure / Hedge

5. Complete State Encoding Rules

5.1 Encoding Format

{Primary}_{Volatility}_{Phase}_{Position}

5.2 Encoding Examples

Full Code Interpretation
TU_LV_S3_M Uptrend_LowVol_MainWave_Middle
TD_HV_S2_L Downtrend_HighVol_Acceleration_Lower
RG_NV_SQ_U Range_NormalVol_Squeeze_Upper
BK_HV_UP_M Breakout_HighVol_Upward_Middle

6. Core Identification Indicators

6.1 Trend Indicators

Indicator Calculation Criteria
ADX 14-period Average Directional Index >40 Strong, 25-40 Medium, <25 Weak/Range
Trend Score Composite EMA/MACD/Price structure -100 to +100, Positive=Bullish, Negative=Bearish
EMA Alignment Relative position of EMA20/50/200 Bullish/Bearish/Mixed alignment

6.2 Volatility Indicators

Indicator Calculation Purpose
ATR Percent ATR(14) / Current Price × 100% Measure relative volatility
BB Width (Upper - Lower) / Middle × 100% Measure price range
Volatility Rank Current vol percentile in history Determine vol level

6.3 Momentum Indicators

Indicator Calculation Criteria
RSI 14-period Relative Strength Index >70 Overbought, <30 Oversold, 50 Neutral
MACD Histogram MACD - Signal Positive=Bullish momentum, Negative=Bearish
Momentum Score Composite RSI/MACD/Volume Measure current momentum

6.4 Structure Indicators

Indicator Description Purpose
Swing Structure HH/HL/LH/LL sequence Determine trend structure
Support/Resistance Key price levels Define trading range
Volume Profile Volume-price relationship Validate price action

7. Strategy Matching Matrix

7.1 Regime-Strategy Mapping

Regime Type Recommended Strategy Position Size Stop Loss
Strong Uptrend · Low Vol Trend following + Pyramid 60-80% ATR×2
Strong Uptrend · High Vol Momentum + Quick profit 40-60% ATR×1.5
Uptrend Exhaustion Reduce + Reversal short 20-30% Previous high
Panic Decline Wait or light bottom fish 10-20% Wide stop
Low Vol Range Grid trading 50-70% Range boundary
High Vol Range Swing trading 30-50% ATR×2
Squeeze Pattern Wait for breakout 10-20% -
Upward Breakout Chase + Add on pullback 50-70% Breakout level
Bottom Formation Scale in gradually 20-40% New low

7.2 Grid Strategy Parameter Matching

Range Type Grid Levels Grid Spacing Other Parameters
Tight Low Vol 30-50 levels Small spacing Enable Maker Only
Tight High Vol 15-25 levels Small spacing Fast execution mode
Wide Low Vol 10-20 levels Large spacing Patient execution
Wide High Vol 15-25 levels Large spacing High profit targets
Squeeze Pattern Pause grid - Wait for breakout signal
Upper Range Short bias Medium Increase sell weight
Lower Range Long bias Medium Increase buy weight

8. Real-time Monitoring Guidelines

8.1 State Transition Triggers

Current State Trigger Condition Transitions To
Range Price breakout + Volume + ADX rising Breakout
Uptrend RSI divergence + Volume decline Exhaustion
Downtrend RSI divergence + Volume decline Exhaustion
Breakout Failed breakout, price returns Range
Exhaustion Confirmed reversal breakout Opposite trend

8.2 Risk Control Rules

Regime State Max Position Risk Per Trade Special Rules
Strong Trend 80% 2% Adding allowed
Weak Trend 50% 1.5% No adding
Range 60% 1% Diversified holding
Transition 30% 1% Reduce activity
High Volatility 40% 0.5% Wide stops

9. Appendix

9.1 Abbreviation Reference

Abbrev Full Form Description
TU Trend Up Upward trend
TD Trend Down Downward trend
RG Range Range-bound market
TR Transition Trend transition
BK Breakout Breakout pattern
LV Low Volatility Low volatility regime
HV High Volatility High volatility regime
NV Normal Volatility Normal volatility regime
XLV Extreme Low Vol Extremely low volatility
XHV Extreme High Vol Extremely high volatility

9.2 Document Information

  • Version: v1.0
  • Created: January 2026
  • Applicable: Cryptocurrency, Forex, Stocks, and other financial markets

This document is designed for market state identification and strategy matching in quantitative trading systems