mirror of
https://github.com/laoxong/nofx.git
synced 2026-06-04 01:48:22 +08:00
7e96c5d0f2
* 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
11 KiB
11 KiB
市场行情精细分类体系
用于量化交易策略匹配的市场状态识别框架
一、分类维度概览
市场状态识别需要从多个维度进行分析:
| 维度 | 子维度 | 说明 |
|---|---|---|
| 趋势维度 | 方向、强度 | 判断市场运动方向和力度 |
| 波动维度 | 幅度、频率 | 衡量价格波动特征 |
| 结构维度 | 形态、阶段 | 识别市场结构和所处周期 |
二、一级分类(5大类)
2.1 分类总览
| 代码 | 名称 | 核心特征 | 适合策略 |
|---|---|---|---|
TREND_UP |
上涨趋势 | 高点/低点持续抬升 | 趋势跟踪、突破追涨 |
TREND_DOWN |
下跌趋势 | 高点/低点持续降低 | 趋势跟踪、做空策略 |
RANGE |
震荡区间 | 价格在区间内波动 | 网格交易、均值回归 |
TRANSITION |
趋势转换 | 方向不明确的过渡期 | 观望、小仓位试探 |
BREAKOUT |
突破行情 | 价格突破关键位置 | 突破追踪策略 |
2.2 识别指标
- ADX(平均方向指数):衡量趋势强度
- ADX > 25:存在明确趋势
- ADX < 20:震荡市场
- EMA排列:判断趋势方向
- EMA20 > EMA50 > EMA200:多头排列
- EMA20 < EMA50 < EMA200:空头排列
三、二级分类(18细分类)
3.1 上涨趋势细分(5种)
| 代码 | 名称 | 技术特征 | 量化指标 |
|---|---|---|---|
TU_STRONG_LOW_VOL |
强势上涨·低波动 | 稳步上涨,回调幅度小 | ADX>40, ATR%<2%, 回调<38.2% |
TU_STRONG_HIGH_VOL |
强势上涨·高波动 | 快速拉升,波动剧烈 | ADX>40, ATR%>4%, MACD柱放大 |
TU_WEAK_CHOPPY |
弱势上涨·震荡 | 涨三退二,反复磨蹭 | ADX 20-30, RSI在50-70震荡 |
TU_PARABOLIC |
抛物线加速 | 指数级加速上涨 | 价格远离均线, RSI>80, 成交量放大 |
TU_EXHAUSTION |
上涨衰竭 | 创新高但动能减弱 | 价格新高 + MACD/RSI顶背离 |
策略匹配:
- 强势低波动:重仓趋势跟踪,金字塔加仓
- 强势高波动:中等仓位,设置移动止盈
- 弱势震荡:轻仓波段,高抛低吸
- 抛物线加速:谨慎追涨,准备离场
- 上涨衰竭:减仓观望,准备反转做空
3.2 下跌趋势细分(5种)
| 代码 | 名称 | 技术特征 | 量化指标 |
|---|---|---|---|
TD_STRONG_LOW_VOL |
强势下跌·低波动 | 稳步下跌,反弹无力 | ADX>40, ATR%<2%, 反弹<38.2% |
TD_STRONG_HIGH_VOL |
强势下跌·高波动 | 恐慌抛售,波动剧烈 | ADX>40, ATR%>5%, 恐慌指数飙升 |
TD_WEAK_CHOPPY |
弱势下跌·震荡 | 跌跌涨涨,磨底过程 | ADX 20-30, RSI在30-50震荡 |
TD_CAPITULATION |
恐慌投降 | 放量暴跌,情绪极端 | RSI<20, 成交量>3倍均量 |
TD_EXHAUSTION |
下跌衰竭 | 创新低但卖压减弱 | 价格新低 + MACD/RSI底背离 |
策略匹配:
- 强势低波动:空头趋势跟踪
- 强势高波动:观望或轻仓对冲
- 弱势震荡:等待企稳信号
- 恐慌投降:极端情况可轻仓抄底
- 下跌衰竭:逐步建立多头仓位
3.3 震荡区间细分(4种)
| 代码 | 名称 | 技术特征 | 量化指标 |
|---|---|---|---|
RG_TIGHT_LOW_VOL |
窄幅震荡·低波动 | 极度收敛,蓄势待发 | 布林带宽度<2%, ATR创新低 |
RG_TIGHT_HIGH_VOL |
窄幅震荡·高波动 | 区间内剧烈波动 | 布林带宽度<3%, ATR%>3% |
RG_WIDE_LOW_VOL |
宽幅震荡·低波动 | 大区间慢速波动 | 布林带宽度>5%, ATR%<2% |
RG_WIDE_HIGH_VOL |
宽幅震荡·高波动 | 大区间快速波动 | 布林带宽度>5%, ATR%>3% |
策略匹配:
- 窄幅低波动:密集网格,等待突破
- 窄幅高波动:快速网格,小利润多次
- 宽幅低波动:稀疏网格,耐心持有
- 宽幅高波动:波段交易,高利润目标
3.4 转换过渡(2种)
| 代码 | 名称 | 技术特征 | 量化指标 |
|---|---|---|---|
TR_BOTTOM_FORMING |
底部形成中 | 下跌放缓,试探支撑 | 价格止跌 + 成交量萎缩 + RSI底背离 |
TR_TOP_FORMING |
顶部形成中 | 上涨放缓,试探压力 | 价格滞涨 + 成交量萎缩 + RSI顶背离 |
3.5 突破行情(2种)
| 代码 | 名称 | 技术特征 | 量化指标 |
|---|---|---|---|
BK_UPWARD |
向上突破 | 突破阻力位并放量 | 价格>前高, 成交量>2倍, 布林带突破 |
BK_DOWNWARD |
向下突破 | 跌破支撑位并放量 | 价格<前低, 成交量>2倍, 布林带跌破 |
四、三级分类(36超细分类)
4.1 趋势阶段细分
上涨趋势生命周期分为5个阶段:
| 阶段代码 | 名称 | 特征描述 | 量化判断标准 |
|---|---|---|---|
TU_S1_INITIATION |
上涨启动期 | 首次突破均线或前高 | MACD金叉, 价格突破EMA20 |
TU_S2_ACCELERATION |
上涨加速期 | 动能增强,斜率加大 | MACD柱持续增大, ADX上升 |
TU_S3_MAIN_WAVE |
主升浪阶段 | 持续上涨,回调幅度浅 | RSI维持60-80, 回调不破EMA20 |
TU_S4_EXHAUSTION |
上涨衰竭期 | 涨速放缓,出现背离 | RSI顶背离, MACD顶背离 |
TU_S5_REVERSAL |
趋势反转期 | 破位下跌,趋势结束 | 跌破EMA50, MACD死叉 |
下跌趋势同理,代码为 TD_S1 至 TD_S5
4.2 震荡位置细分
| 位置代码 | 名称 | 特征描述 | 策略建议 |
|---|---|---|---|
RG_UPPER |
区间上沿震荡 | 价格接近阻力位 | 偏空操作为主 |
RG_MIDDLE |
区间中部震荡 | 价格在中轨附近 | 双向网格交易 |
RG_LOWER |
区间下沿震荡 | 价格接近支撑位 | 偏多操作为主 |
RG_SQUEEZE |
收敛三角震荡 | 高低点逐渐收窄 | 等待方向选择 |
RG_EXPAND |
扩散三角震荡 | 高低点逐渐扩张 | 边界反转操作 |
4.3 波动率等级
| 代码 | 名称 | ATR百分比 | 布林带宽度 | 策略建议 |
|---|---|---|---|---|
VOL_EXTREME_LOW |
极低波动 | <1% | <1.5% | 期权卖方策略 |
VOL_LOW |
低波动 | 1-2% | 1.5-2.5% | 网格/均值回归 |
VOL_NORMAL |
正常波动 | 2-3% | 2.5-4% | 趋势跟踪 |
VOL_HIGH |
高波动 | 3-5% | 4-6% | 动量/突破 |
VOL_EXTREME_HIGH |
极高波动 | >5% | >6% | 减仓/对冲 |
五、完整状态编码规则
5.1 编码格式
{一级分类}_{波动等级}_{阶段}_{位置}
5.2 编码示例
| 完整代码 | 含义解释 |
|---|---|
TU_LV_S3_M |
上涨趋势_低波动_主升浪_中部位置 |
TD_HV_S2_L |
下跌趋势_高波动_加速期_下部位置 |
RG_NV_SQ_U |
震荡区间_正常波动_收敛形态_上沿位置 |
BK_HV_UP_M |
突破行情_高波动_向上突破_中部位置 |
六、核心识别指标
6.1 趋势指标
| 指标 | 计算方法 | 判断标准 |
|---|---|---|
| ADX | 14周期平均方向指数 | >40强趋势, 25-40中等, <25弱/震荡 |
| 趋势评分 | 综合EMA/MACD/价格结构 | -100到+100, 正数多头,负数空头 |
| EMA排列 | EMA20/50/200相对位置 | 多头排列/空头排列/混乱 |
6.2 波动指标
| 指标 | 计算方法 | 用途 |
|---|---|---|
| ATR百分比 | ATR(14) / 当前价格 × 100% | 衡量相对波动幅度 |
| 布林带宽度 | (上轨-下轨) / 中轨 × 100% | 衡量价格波动区间 |
| 波动率排名 | 当前波动在历史中的分位 | 判断波动率高低 |
6.3 动量指标
| 指标 | 计算方法 | 判断标准 |
|---|---|---|
| RSI | 14周期相对强弱指数 | >70超买, <30超卖, 50中性 |
| MACD柱 | MACD - Signal | 正数多头动能,负数空头动能 |
| 动量评分 | 综合RSI/MACD/成交量 | 衡量当前动能强弱 |
6.4 结构指标
| 指标 | 说明 | 用途 |
|---|---|---|
| 高低点结构 | HH/HL/LH/LL序列 | 判断趋势结构 |
| 支撑阻力位 | 关键价格水平 | 确定交易区间 |
| 成交量形态 | 量价配合关系 | 验证价格走势 |
七、策略匹配矩阵
7.1 行情类型与策略对应
| 行情类型 | 推荐策略 | 建议仓位 | 止损设置 |
|---|---|---|---|
| 强势上涨·低波动 | 趋势跟踪+金字塔加仓 | 60-80% | ATR×2 |
| 强势上涨·高波动 | 动量突破+快速止盈 | 40-60% | ATR×1.5 |
| 上涨衰竭期 | 减仓+反转信号做空 | 20-30% | 前高 |
| 恐慌下跌 | 观望或轻仓抄底 | 10-20% | 宽止损 |
| 低波动震荡 | 网格交易 | 50-70% | 区间边界 |
| 高波动震荡 | 波段高抛低吸 | 30-50% | ATR×2 |
| 收敛等待 | 蓄势等突破 | 10-20% | - |
| 向上突破 | 追涨+回踩加仓 | 50-70% | 突破位 |
| 底部形成 | 分批建仓 | 20-40% | 新低 |
7.2 网格策略参数匹配
| 震荡类型 | 网格层数 | 网格间距 | 其他参数 |
|---|---|---|---|
| 窄幅低波动 | 30-50层 | 小间距 | 启用Maker Only |
| 窄幅高波动 | 15-25层 | 小间距 | 快速成交模式 |
| 宽幅低波动 | 10-20层 | 大间距 | 耐心等待成交 |
| 宽幅高波动 | 15-25层 | 大间距 | 高利润目标 |
| 收敛形态 | 暂停网格 | - | 等待突破信号 |
| 区间上沿 | 偏空配置 | 中等 | 卖单权重增加 |
| 区间下沿 | 偏多配置 | 中等 | 买单权重增加 |
八、实时监控建议
8.1 状态转换触发条件
| 当前状态 | 触发条件 | 转换到 |
|---|---|---|
| 震荡区间 | 价格突破+放量+ADX上升 | 突破行情 |
| 上涨趋势 | RSI顶背离+成交量萎缩 | 上涨衰竭 |
| 下跌趋势 | RSI底背离+成交量萎缩 | 下跌衰竭 |
| 突破行情 | 突破失败回落 | 震荡区间 |
| 趋势衰竭 | 反向突破确认 | 反向趋势 |
8.2 风险控制规则
| 行情状态 | 最大仓位 | 单笔风险 | 特殊规则 |
|---|---|---|---|
| 强趋势 | 80% | 2% | 可加仓 |
| 弱趋势 | 50% | 1.5% | 不加仓 |
| 震荡 | 60% | 1% | 分散持仓 |
| 转换期 | 30% | 1% | 减少操作 |
| 高波动 | 40% | 0.5% | 宽止损 |
九、附录
9.1 缩写对照表
| 缩写 | 英文全称 | 中文含义 |
|---|---|---|
| TU | Trend Up | 上涨趋势 |
| TD | Trend Down | 下跌趋势 |
| RG | Range | 震荡区间 |
| TR | Transition | 趋势转换 |
| BK | Breakout | 突破行情 |
| LV | Low Volatility | 低波动 |
| HV | High Volatility | 高波动 |
| NV | Normal Volatility | 正常波动 |
| XLV | Extreme Low Vol | 极低波动 |
| XHV | Extreme High Vol | 极高波动 |
9.2 版本信息
- 文档版本:v1.0
- 创建日期:2026年1月
- 适用范围:加密货币、外汇、股票等金融市场
本文档用于量化交易系统的市场状态识别和策略匹配