package com.xcong.excoin.modules.okxNewPrice.indicator; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; /** * 15分钟交易策略使用示例 * 展示如何使用FifteenMinuteTradingStrategy处理100个15分钟价格数据点 */ public class FifteenMinuteStrategyExample { public static void main(String[] args) { // 1. 创建策略实例 FifteenMinuteTradingStrategy strategy = new FifteenMinuteTradingStrategy(); // 2. 准备100个15分钟价格数据(这里使用模拟数据,用户可以替换为真实数据) List prices = generateSampleFifteenMinuteData(); System.out.println("已加载 " + prices.size() + " 个15分钟价格数据点"); // 3. 获取当前价格 BigDecimal currentPrice = prices.get(prices.size() - 1); System.out.println("当前价格: " + currentPrice); // 4. 示例1:获取多空方向 System.out.println("\n=== 多空方向分析 ==="); FifteenMinuteTradingStrategy.Direction direction = strategy.getDirection(prices); System.out.println("当前市场方向: " + direction); // 5. 示例2:获取开仓平仓信号(假设当前没有持仓) System.out.println("\n=== 开仓平仓信号分析(无持仓)==="); FifteenMinuteTradingStrategy.PositionSignal signal1 = strategy.getPositionSignal(prices, false, false); System.out.println("无持仓时的信号: " + signal1); // 6. 示例3:获取开仓平仓信号(假设当前持有多仓) System.out.println("\n=== 开仓平仓信号分析(持有多仓)==="); FifteenMinuteTradingStrategy.PositionSignal signal2 = strategy.getPositionSignal(prices, true, false); System.out.println("持有多仓时的信号: " + signal2); // 7. 示例4:获取开仓平仓信号(假设当前持有空仓) System.out.println("\n=== 开仓平仓信号分析(持有空仓)==="); FifteenMinuteTradingStrategy.PositionSignal signal3 = strategy.getPositionSignal(prices, false, true); System.out.println("持有空仓时的信号: " + signal3); // 8. 示例5:获取完整交易结果 System.out.println("\n=== 完整交易结果分析 ==="); FifteenMinuteTradingStrategy.TradingResult result = strategy.getTradingResult(prices, false, false); System.out.println("市场方向: " + result.getDirection()); System.out.println("交易信号: " + result.getSignal()); System.out.println("\n指标状态详情:"); System.out.println(result.getIndicatorStatus()); } /** * 生成模拟的15分钟价格数据(100个数据点) * 用户可以替换为真实的价格数据 * @return 15分钟价格数据列表 */ private static List generateSampleFifteenMinuteData() { List prices = new ArrayList<>(); // 模拟ETH价格数据(从2400开始,有一定波动) BigDecimal basePrice = new BigDecimal(2400); for (int i = 0; i < 100; i++) { // 添加一些随机波动,但保持整体上升趋势 double random = (Math.random() - 0.48) * 10; // -5 到 5 的随机波动,略微偏向上行 BigDecimal price = basePrice.add(new BigDecimal(random)); prices.add(price.setScale(2, BigDecimal.ROUND_HALF_UP)); // 整体缓慢上升 basePrice = basePrice.add(new BigDecimal(0.2)); } return prices; } }