Administrator
2025-12-26 a9402bbb84f6a521822fc8beb32056d0b2d4201f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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<BigDecimal> 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<BigDecimal> generateSampleFifteenMinuteData() {
        List<BigDecimal> 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;
    }
}