CoreTechnicalStrategy 是一个集成了多种技术指标的交易策略类,用于生成做多、做空、买入和卖出信号。它整合了以下核心指标:
- 三重 EMA 交叉系统 (9/21/55 周期)
- 波动率自适应布林带
- MACD 能量柱分级策略
- RSI (相对强弱指标)
- KDJ 指标
CoreTechnicalStrategy strategy = new CoreTechnicalStrategy();
在使用策略之前,需要先初始化价格历史数据:java List<BigDecimal> historicalPrices = Arrays.asList( new BigDecimal(30000), new BigDecimal(30100), new BigDecimal(30200), // 添加更多历史价格数据,建议至少包含 60 个数据点 ); strategy.init(historicalPrices);
调用 getSignal 方法获取交易信号,需要传入以下参数:
| 参数名 | 类型 | 描述 | 示例值 |
|---|---|---|---|
| accountName | String | 账户名称 | "main_account" |
| markPx | String | 当前标记价格 | "30500.50" |
| posSide | String | 当前持仓方向 | "long" 或 "short" 或 "net" |
"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"(平仓) |
数据充足性:确保提供足够的历史价格数据(至少 60 个数据点),以便所有指标能准确计算
价格更新:策略不会自动更新价格历史,需要外部定期调用 updatePrices 方法添加新价格。这里的价格是指交易资产的市场价格(如加密货币的当前标记价格、股票的实时价格等),用于计算技术指标。
参数调整:可以根据市场情况调整指标参数,如 EMA 周期、布林带参数等
风险控制:本策略仅提供交易信号,实际交易时应结合风险控制措施