package br.com.robo.strategy;
import br.com.robo.model.Candle;
import java.util.List;
public class MovingAverageCrossoverStrategy
implements Strategy
{
private int fastPeriod
;
private int slowPeriod
;
public MovingAverageCrossoverStrategy
(int fastPeriod,
int slowPeriod
) {
this.
fastPeriod = fastPeriod
;
this.
slowPeriod = slowPeriod
;
}
private double mediaMovel
(List<Candle
> candles,
int index,
int period
) {
if (index +
1 < period
) {
return Double.
NaN; // ainda não tem dados suficientes
}
double sum =
0.0;
for (int i = index
; i
> index - period
; i--
) {
sum += candles.
get(i
).
getClose();
}
return sum / period
;
}
@
Override
public Signal decide
(int index,
List<Candle
> candles,
boolean hasPosition
) {
if (index ==
0) {
return Signal.
HOLD;
}
double fast = mediaMovel
(candles, index, fastPeriod
);
double slow = mediaMovel
(candles, index, slowPeriod
);
if (Double.
isNaN(fast
) ||
Double.
isNaN(slow
)) {
return Signal.
HOLD;
}
double fastPrev = mediaMovel
(candles, index -
1, fastPeriod
);
double slowPrev = mediaMovel
(candles, index -
1, slowPeriod
);
if (!hasPosition
&& fastPrev
<= slowPrev
&& fast
> slow
) {
return Signal.
BUY;
}
if (hasPosition
&& fastPrev
>= slowPrev
&& fast
< slow
) {
return Signal.
SELL;
}
return Signal.
HOLD;
}
}