# com.xcong.excoin.modules.okxNewPrice.indicator 包文档 ## 1. 包概述 该包实现了一套完整的技术指标分析系统,包含基础指标计算、高级指标策略以及信号生成功能。主要用于加密货币交易中的技术分析和策略决策,支持三重EMA交叉系统、波动率自适应布林带、MACD能量柱分级策略等高级分析方法。 ## 2. 类层次结构 ``` ├── IndicatorBase (抽象基类) │ ├── MA (简单移动平均线) │ ├── AdvancedMA (三重EMA交叉系统) │ ├── BOLL (波动率自适应布林带) │ ├── MACD (移动平均线收敛发散) │ ├── RSI (相对强弱指标) │ └── KDJ (随机指标) └── strategy/ ├── TechnicalIndicatorStrategy (策略接口) ├── AbstractTechnicalIndicatorStrategy (策略抽象基类) ├── CoreTechnicalStrategy (核心技术指标策略) ├── ComprehensiveTechnicalStrategy (综合技术指标策略) └── TradeSignal (交易信号枚举) ``` ## 3. 核心类详解 ### 3.1 IndicatorBase (指标基类) **功能**:提供所有技术指标的通用计算方法 **核心方法**: - `calculateMA(List prices, int period)` - 计算移动平均值 - `calculateEMA(List prices, int period, BigDecimal prevEMA)` - 计算指数移动平均值 - `calculateStdDev(List prices, int period)` - 计算标准差 - `getRecentPrices(List prices, int period)` - 获取最近N个价格数据 **使用场景**:作为所有指标类的父类,提供基础计算功能 ### 3.2 MA (移动平均线) **功能**:实现标准周期的移动平均线指标 **支持的周期**: - MA5/MA10/MA20/MA30/MA60 (简单移动平均线) - EMA5/EMA10/EMA20/EMA30/EMA60 (指数移动平均线) **核心方法**: - `calculate(List prices)` - 计算所有周期的移动平均线 - `isGoldenCross()` - 判断金叉信号 - `isDeathCross()` - 判断死叉信号 **使用场景**:用于基本趋势判断和交叉信号分析 ### 3.3 AdvancedMA (高级移动平均线) **功能**:实现三重EMA交叉系统,用于高级趋势分析 **支持的周期**:EMA9/EMA21/EMA55 (三重EMA交叉系统) **核心方法**: - `calculateTripleEMA(List prices)` - 计算三重EMA指标 - `isBullish()` - 判断多头排列 (9EMA > 21EMA > 55EMA) - `isBearish()` - 判断空头排列 (9EMA < 21EMA < 55EMA) - `calculatePercent()` - 计算三线粘合度 - `isUpAndDown()` - 判断震荡行情 (粘合度 < 2%) **使用场景**:用于判断市场趋势强度和过滤震荡行情 ### 3.4 BOLL (布林带) **功能**:实现波动率自适应布林带指标 **计算逻辑**: - 中轨(MB)= N日移动平均线 - 上轨(UP)= 中轨 + K倍标准差 - 下轨(DN)= 中轨 - K倍标准差 **核心方法**: - `calculate(List prices)` - 计算布林带指标 - `isBreakUpper()` - 判断价格突破上轨 - `isBreakLower()` - 判断价格跌破下轨 - `isReturnFromUpper()` - 判断价格回归上轨下方 - `isReturnFromLower()` - 判断价格回归下轨上方 - `calculateBandWidth()` - 计算布林带宽度 **使用场景**:用于判断价格波动范围和突破信号 ### 3.5 MACD (移动平均线收敛发散) **功能**:实现MACD指标,包括DIF、DEA和柱状图 **计算逻辑**: - DIF = EMA(12) - EMA(26) - DEA = EMA(DIF, 9) - MACD柱状图 = (DIF - DEA) * 2 **核心方法**: - `calculate(List prices)` - 计算MACD指标 - `isGoldenCross()` - 判断金叉信号(DIF上穿DEA) - `isDeathCross()` - 判断死叉信号(DIF下穿DEA) **使用场景**:用于判断价格动量和趋势强度 ### 3.6 RSI (相对强弱指标) **功能**:实现相对强弱指标,用于判断超买超卖 **计算逻辑**: - RSI = 100 - (100 / (1 + (平均上涨幅度 / 平均下跌幅度))) **核心方法**: - `calculate(List prices)` - 计算RSI指标 - `isOverbought()` - 判断超买 (RSI > 70) - `isOversold()` - 判断超卖 (RSI < 30) - `isExtremelyOverbought()` - 判断严重超买 (RSI > 80) - `isExtremelyOversold()` - 判断严重超卖 (RSI < 20) **使用场景**:用于判断市场情绪和价格反转点 ### 3.7 KDJ (随机指标) **功能**:实现KDJ指标,用于判断价格反转和超买超卖 **计算逻辑**: - RSV = (收盘价 - N日内最低价) / (N日内最高价 - N日内最低价) * 100 - K = 2/3 * 前一日K值 + 1/3 * 当日RSV - D = 2/3 * 前一日D值 + 1/3 * 当日K值 - J = 3*K - 2*D **核心方法**: - `calculate(List prices)` - 计算KDJ指标 - `isOverbought()` - 判断超买 (K > 80) - `isOversold()` - 判断超卖 (K < 20) - `isGoldenCross()` - 判断金叉信号(K线上穿D线) - `isDeathCross()` - 判断死叉信号(K线下穿D线) **使用场景**:用于判断价格短期反转和超买超卖 ## 4. 策略相关类 ### 4.1 TechnicalIndicatorStrategy (策略接口) **功能**:定义技术指标策略的基本方法 **核心方法**: - `initialize()` - 初始化策略 - `updatePrices(List prices)` - 更新价格数据 - `getSignal()` - 获取交易信号 - `getStrategyName()` - 获取策略名称 - `isValid()` - 判断策略是否有效 **使用场景**:作为所有技术指标策略的接口,定义统一的方法规范 ### 4.2 AbstractTechnicalIndicatorStrategy (策略抽象基类) **功能**:提供技术指标策略的通用功能 **核心功能**: - 价格历史管理(最多保存100条记录) - 策略初始化 - 价格更新 - 交易请求参数创建 **使用场景**:作为所有具体策略的父类,提供基础功能 ### 4.3 TradeSignal (交易信号枚举) **功能**:定义所有可能的交易信号类型 **信号类型**: - NO_SIGNAL (无信号) - BUY (买入) - SELL (卖出) - OPEN_LONG (开多) - CLOSE_LONG (平多) - OPEN_SHORT (开空) - CLOSE_SHORT (平空) - STOP_LOSS (止损) - TAKE_PROFIT (止盈) **使用场景**:用于策略生成和传递交易信号 ### 4.4 CoreTechnicalStrategy (核心技术指标策略) **功能**:整合三重EMA交叉系统、波动率自适应布林带、MACD能量柱分级策略等高级指标 **核心特点**: - 波动率自适应布林带(根据ATR动态调整标准差倍数) - MACD能量柱面积指标(累计过去5根柱体积分) - 多重指标综合分析(EMA、MACD、RSI、KDJ、BOLL) - 震荡行情过滤(三线粘合度 < 2%) **交易信号生成规则**: - 多头入场:当前柱体>0且面积增速>前周期20% - 空头入场:当前柱体<0且面积增速>前周期20% - 突破上轨+成交量放大3倍=做空信号 - 触及下轨+期货资金费率转正=做多信号 - 空头反转:柱体顶背离+RSI>70区域死叉 - 多头反转:柱体底背离+RSI<30区域金叉 **使用场景**:用于复杂的技术分析和交易决策 ### 4.5 ComprehensiveTechnicalStrategy (综合技术指标策略) **功能**:整合MACD、KDJ、RSI、BOLL等指标生成交易信号 **核心特点**: - 基于多空方向分别分析信号 - 结合超买超卖条件和指标交叉信号 - 简化的信号生成逻辑 **交易信号生成规则**: - 多头方向:RSI超卖+KDJ金叉或布林带下轨突破+MACD金叉=买入信号 - 多头方向:RSI超买+KDJ死叉或布林带上轨突破+MACD死叉=卖出信号 - 空头方向:RSI超买+KDJ死叉或布林带上轨突破+MACD死叉=卖出信号 - 空头方向:RSI超卖+KDJ金叉或布林带下轨突破+MACD金叉=买入信号 **使用场景**:用于较为简单的技术分析和交易决策 ## 5. 工作流程 ``` 1. 初始化策略(initialize()) 2. 更新价格数据(updatePrices()) 3. 计算技术指标(calculate()) 4. 分析交易信号(analyzeSignal()) 5. 生成交易请求参数(createTradeRequestParam()) 6. 执行交易操作 ``` ## 6. 如何使用 ### 6.1 基本使用示例 ```java // 创建策略实例 CoreTechnicalStrategy strategy = new CoreTechnicalStrategy(); // 初始化策略 strategy.initialize(); // 更新价格数据(需要外部定期调用) List prices = new ArrayList<>(); // 添加价格数据... strategy.updatePrices(prices); // 获取交易信号 TradeRequestParam param = strategy.getSignal("account1", "45000.0", "long"); // 处理交易信号 if (TradeSignal.BUY.equals(param.getSignal())) { // 执行买入操作 } else if (TradeSignal.SELL.equals(param.getSignal())) { // 执行卖出操作 } ``` ### 6.2 参数说明 - `accountName`:账户名称,用于标识交易账户 - `markPx`:当前标记价格,用于计算指标和生成信号 - `posSide`:仓位方向,取值为"long"(多头)或"short"(空头) ### 6.3 价格更新说明 策略不会自动更新价格历史,需要外部定期调用`updatePrices()`方法添加新价格。价格历史最多保存100条记录,超过时会自动移除最旧的价格记录。 ## 7. 代码优化建议 1. **性能优化**: - 考虑使用缓存机制存储已计算的指标值 - 对于高频更新的场景,可实现增量计算 2. **功能扩展**: - 添加更多技术指标(如ATR、OBV等) - 实现回测功能,支持历史数据验证 3. **鲁棒性提升**: - 增加异常处理和参数验证 - 实现策略监控和告警机制 4. **可维护性**: - 提取常量到配置文件 - 增强日志记录,便于调试和分析 ## 8. 总结 该包提供了一套完整的技术指标分析系统,支持从基础指标计算到高级策略分析的全流程。通过整合多种技术指标,实现了复杂的交易信号生成逻辑,可用于加密货币交易中的技术分析和策略决策。系统设计遵循面向对象原则,具有良好的可扩展性和可维护性。