# CoreTechnicalStrategy 使用指南 ## 功能概述 CoreTechnicalStrategy 是一个集成了多种技术指标的交易策略类,用于生成做多、做空、买入和卖出信号。它整合了以下核心指标: - 三重 EMA 交叉系统 (9/21/55 周期) - 波动率自适应布林带 - MACD 能量柱分级策略 - RSI (相对强弱指标) - KDJ 指标 ## 所需参数 ### 1. 初始化参数 ```java CoreTechnicalStrategy strategy = new CoreTechnicalStrategy(); ``` ### 2. 初始化价格历史 在使用策略之前,需要先初始化价格历史数据: ```java List historicalPrices = Arrays.asList( new BigDecimal(30000), new BigDecimal(30100), new BigDecimal(30200), // 添加更多历史价格数据,建议至少包含 60 个数据点 ); strategy.init(historicalPrices); ``` ### 3. 获取交易信号参数 调用 `getSignal` 方法获取交易信号,需要传入以下参数: | 参数名 | 类型 | 描述 | 示例值 | |--------|------|------|--------| | accountName | String | 账户名称 | "main_account" | | markPx | String | 当前标记价格 | "30500.50" | | posSide | String | 当前持仓方向 | "long" 或 "short" 或 "net" | ### 4. 持仓方向说明 - `"long"`: 多头持仓 - `"short"`: 空头持仓 - `"net"`: 净持仓(无方向) ## 使用示例 ```java import com.xcong.excoin.modules.okxNewPrice.indicator.strategy.CoreTechnicalStrategy; import com.xcong.excoin.modules.okxNewPrice.okxWs.param.TradeRequestParam; import com.xcong.excoin.modules.okxNewPrice.okxWs.param.TradeSignal; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class CoreTechnicalStrategyExample { public static void main(String[] args) { // 1. 创建策略实例 CoreTechnicalStrategy strategy = new CoreTechnicalStrategy(); // 2. 准备历史价格数据 List historicalPrices = new ArrayList<>(); // 假设我们有过去 100 个价格数据 for (int i = 0; i < 100; i++) { historicalPrices.add(new BigDecimal(30000 + i * 10)); } // 3. 初始化策略 strategy.initialize(); // 4. 更新初始价格历史 strategy.updatePrices(historicalPrices); // 5. 定期更新价格(例如每分钟获取一次最新价格) // 这里的价格是指交易资产的当前市场价格,如加密货币的标记价格或股票的实时价格 BigDecimal newMarketPrice = new BigDecimal("31050.75"); List newPrices = Collections.singletonList(newMarketPrice); strategy.updatePrices(newPrices); // 6. 获取交易信号 String accountName = "trading_account"; String currentPrice = newMarketPrice.toString(); String currentPosition = "net"; // 当前无持仓 TradeRequestParam tradeParam = strategy.getSignal(accountName, currentPrice, currentPosition); // 7. 处理交易信号 if (tradeParam.getSignal() == TradeSignal.BUY) { System.out.println("执行买入操作"); // 调用交易API执行买入 } else if (tradeParam.getSignal() == TradeSignal.SELL) { System.out.println("执行卖出操作"); // 调用交易API执行卖出 } else { System.out.println("无交易信号"); } } } ## 返回值说明 `getSignal` 方法返回 `TradeRequestParam` 对象,包含以下主要属性: | 属性名 | 类型 | 描述 | |--------|------|------| | accountName | String | 账户名称 | | markPx | String | 当前标记价格 | | posSide | String | 持仓方向 | | signal | TradeSignal | 交易信号:BUY、SELL 或 NO_SIGNAL | | side | String | 交易方向:"buy" 或 "sell" | | tradeType | String | 交易类型:"open"(开仓)或 "close"(平仓) | ## 核心指标逻辑说明 ### 1. 三重 EMA 交叉系统 - **多头排列**:9EMA > 21EMA > 55EMA - **空头排列**:9EMA < 21EMA < 55EMA - **震荡过滤**:当三线粘合度 < 2% 时暂停交易 ### 2. 波动率自适应布林带 - **动态标准差倍数**:根据 ATR(平均真实范围)自动调整 - ATR < 0.5% 时,使用 2 倍标准差 - 0.5% ≤ ATR < 1% 时,使用 2.5 倍标准差 - ATR ≥ 1% 时,使用 3 倍标准差 - **做空信号**:价格突破上轨 + 成交量放大 - **做多信号**:价格触及下轨 + 正资金费率 ### 3. MACD 能量柱分级策略 - **多头入场**:当前能量柱 > 0 且面积增速 > 前周期 20% - **空头反转**:能量柱顶背离 + RSI > 70 区域死叉 ## 注意事项 1. **数据充足性**:确保提供足够的历史价格数据(至少 60 个数据点),以便所有指标能准确计算 2. **价格更新**:策略不会自动更新价格历史,需要外部定期调用 `updatePrices` 方法添加新价格。这里的价格是指交易资产的市场价格(如加密货币的当前标记价格、股票的实时价格等),用于计算技术指标。 3. **参数调整**:可以根据市场情况调整指标参数,如 EMA 周期、布林带参数等 4. **风险控制**:本策略仅提供交易信号,实际交易时应结合风险控制措施 ## 错误处理 - 如果策略未初始化或价格历史为空,将返回 NO_SIGNAL - 如果计算过程中发生异常,将返回 NO_SIGNAL 并记录错误日志 ## 依赖关系 - Java 8 或更高版本 - Lombok 库(用于自动生成 getter/setter 方法) - Apache Commons Math 库(用于数学计算)