Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
760 blopes 1
package br.com.robo.strategy;
2
 
3
import br.com.robo.model.Candle;
4
 
5
import java.util.List;
6
 
7
public class MovingAverageCrossoverStrategy implements Strategy {
8
 
9
    private int fastPeriod;
10
    private int slowPeriod;
11
 
12
    public MovingAverageCrossoverStrategy(int fastPeriod, int slowPeriod) {
13
        this.fastPeriod = fastPeriod;
14
        this.slowPeriod = slowPeriod;
15
    }
16
 
17
    private double mediaMovel(List<Candle> candles, int index, int period) {
18
        if (index + 1 < period) {
19
            return Double.NaN; // ainda não tem dados suficientes
20
        }
21
 
22
        double sum = 0.0;
23
        for (int i = index; i > index - period; i--) {
24
            sum += candles.get(i).getClose();
25
        }
26
        return sum / period;
27
    }
28
 
29
    @Override
30
    public Signal decide(int index, List<Candle> candles, boolean hasPosition) {
31
        if (index == 0) {
32
            return Signal.HOLD;
33
        }
34
 
35
        double fast = mediaMovel(candles, index, fastPeriod);
36
        double slow = mediaMovel(candles, index, slowPeriod);
37
 
38
        if (Double.isNaN(fast) || Double.isNaN(slow)) {
39
            return Signal.HOLD;
40
        }
41
 
42
        double fastPrev = mediaMovel(candles, index - 1, fastPeriod);
43
        double slowPrev = mediaMovel(candles, index - 1, slowPeriod);
44
 
45
        if (!hasPosition && fastPrev <= slowPrev && fast > slow) {
46
            return Signal.BUY;
47
        }
48
 
49
        if (hasPosition && fastPrev >= slowPrev && fast < slow) {
50
            return Signal.SELL;
51
        }
52
 
53
        return Signal.HOLD;
54
    }
55
}