Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 778 | blopes | 1 | package br.com.robo.sim; |
| 2 | |||
| 3 | import br.com.robo.model.Candle; |
||
| 4 | |||
| 5 | import java.time.LocalDateTime; |
||
| 6 | import java.util.ArrayList; |
||
| 7 | import java.util.List; |
||
| 8 | import java.util.Random; |
||
| 9 | |||
| 10 | public class CandleGenerator { |
||
| 11 | |||
| 12 | public static List<Candle> gerarSerieSimulada(int quantidade, double precoInicial) { |
||
| 13 | List<Candle> candles = new ArrayList<>(); |
||
| 14 | Random random = new Random(); |
||
| 15 | LocalDateTime time = LocalDateTime.now().minusMinutes(quantidade); |
||
| 16 | |||
| 17 | double lastClose = precoInicial; |
||
| 18 | |||
| 19 | for (int i = 0; i < quantidade; i++) { |
||
| 20 | // tendĂȘncia leve de alta + ruĂdo |
||
| 21 | double drift = 0.01; |
||
| 22 | double ruido = (random.nextDouble() - 0.5) * 0.5; // -0.25 a +0.25 |
||
| 23 | double close = Math.max(1.0, lastClose + drift + ruido); |
||
| 24 | |||
| 25 | double open = lastClose; |
||
| 26 | double high = Math.max(open, close) + random.nextDouble(); |
||
| 27 | double low = Math.min(open, close) - random.nextDouble(); |
||
| 28 | double volume = 100 + random.nextInt(900); // 100 a 1000 |
||
| 29 | |||
| 30 | candles.add(new Candle(time, open, high, low, close, volume)); |
||
| 31 | |||
| 32 | lastClose = close; |
||
| 33 | time = time.plusMinutes(1); |
||
| 34 | } |
||
| 35 | |||
| 36 | return candles; |
||
| 37 | } |
||
| 38 | } |