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