edit | blame | history | raw

CoreTechnicalStrategy 使用指南

功能概述

CoreTechnicalStrategy 是一个集成了多种技术指标的交易策略类,用于生成做多、做空、买入和卖出信号。它整合了以下核心指标:
- 三重 EMA 交叉系统 (9/21/55 周期)
- 波动率自适应布林带
- MACD 能量柱分级策略
- RSI (相对强弱指标)
- KDJ 指标

所需参数

1. 初始化参数

CoreTechnicalStrategy strategy = new CoreTechnicalStrategy();

2. 初始化价格历史

在使用策略之前,需要先初始化价格历史数据:
java List<BigDecimal> 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<BigDecimal> 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<BigDecimal> 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 库(用于数学计算)