Rev 795 | Rev 797 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 795 | Rev 796 | ||
|---|---|---|---|
| Line 2... | Line 2... | ||
| 2 | 2 | ||
| 3 | import java.io.BufferedWriter; |
3 | import java.io.BufferedWriter; |
| 4 | import java.io.IOException; |
- | |
| 5 | import java.nio.file.Files; |
4 | import java.nio.file.Files; |
| 6 | import java.nio.file.Path; |
5 | import java.nio.file.Path; |
| - | 6 | import java.time.Instant; |
|
| - | 7 | import java.time.ZoneId; |
|
| - | 8 | import java.time.ZonedDateTime; |
|
| - | 9 | import java.time.format.DateTimeFormatter; |
|
| 7 | import java.util.List; |
10 | import java.util.List; |
| 8 | import java.util.concurrent.CompletableFuture; |
11 | import java.util.concurrent.CompletableFuture; |
| 9 | import java.util.concurrent.TimeUnit; |
12 | import java.util.concurrent.TimeUnit; |
| 10 | 13 | ||
| 11 | import com.ib.client.Bar; |
14 | import com.ib.client.Bar; |
| Line 15... | Line 18... | ||
| 15 | import br.com.kronus.ibkr.api.IbkrClient; |
18 | import br.com.kronus.ibkr.api.IbkrClient; |
| 16 | 19 | ||
| 17 | public class IbkrHistoricalDataService { |
20 | public class IbkrHistoricalDataService { |
| 18 | 21 | ||
| 19 | private final IbkrClient ibkr; |
22 | private final IbkrClient ibkr; |
| - | 23 | ||
| - | 24 | private static final DateTimeFormatter DATA = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|
| - | 25 | private static final DateTimeFormatter HORA = DateTimeFormatter.ofPattern("HH:mm:ss"); |
|
| 20 | 26 | ||
| 21 | public IbkrHistoricalDataService(IbkrClient ibkr) { |
27 | public IbkrHistoricalDataService(IbkrClient ibkr) { |
| 22 | this.ibkr = ibkr; |
28 | this.ibkr = ibkr; |
| 23 | }
|
29 | }
|
| 24 | 30 | ||
| Line 66... | Line 72... | ||
| 66 | false,
|
72 | false,
|
| 67 | (List<TagValue>) null |
73 | (List<TagValue>) null |
| 68 | ); |
74 | ); |
| 69 | 75 | ||
| 70 | List<Bar> bars = fut.get(60, TimeUnit.SECONDS); |
76 | List<Bar> bars = fut.get(60, TimeUnit.SECONDS); |
| - | 77 | ||
| - | 78 | ZoneId zoneId = ZoneId.of("America/Maceio"); |
|
| - | 79 | DateTimeFormatter FMT_DATA = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
|
| - | 80 | DateTimeFormatter FMT_HORA = DateTimeFormatter.ofPattern("HH:mm:ss"); |
|
| 71 | 81 | ||
| 72 | for (Bar b : bars) { |
82 | for (Bar b : bars) { |
| 73 | String timeStr = b.time(); // ex: 20250125 10:05:00 |
- | |
| 74 | String dataStr = timeStr.substring(0, 8); |
- | |
| 75 | String horaStr = timeStr.substring(9); |
- | |
| - | 83 | ||
| - | 84 | long time = new Long(b.time()); // agora vem algo como 1764688966523 |
|
| 76 | 85 | ||
| 77 | String yyyy = dataStr.substring(0, 4); |
- | |
| 78 | String mm = dataStr.substring(4, 6); |
- | |
| 79 | String dd = dataStr.substring(6, 8); |
- | |
| 80 | String dataFormatada = yyyy + "-" + mm + "-" + dd; |
- | |
| - | 86 | // Detecta se é segundos (10 dígitos) ou milissegundos (13 dígitos)
|
|
| - | 87 | Instant inst;
|
|
| - | 88 | if (time > 9999999999L) { |
|
| - | 89 | inst = Instant.ofEpochMilli(time); // 13 dígitos = millis |
|
| - | 90 | } else { |
|
| - | 91 | inst = Instant.ofEpochSecond(time); // 10 dígitos = seconds |
|
| - | 92 | }
|
|
| - | 93 | ||
| - | 94 | ZoneId zdt = ZoneId.of("America/Maceio"); |
|
| - | 95 | String dataStr = DATA.format(inst.atZone(zoneId)); |
|
| - | 96 | String horaStr = HORA.format(inst.atZone(zoneId)); |
|
| 81 | 97 | ||
| 82 | String linha = String.join(";", |
98 | String linha = String.join(";", |
| 83 | dataFormatada, |
- | |
| - | 99 | dataStr, |
|
| 84 | horaStr, |
100 | horaStr, |
| 85 | String.valueOf(b.open()), |
101 | String.valueOf(b.open()), |
| 86 | String.valueOf(b.high()), |
102 | String.valueOf(b.high()), |
| 87 | String.valueOf(b.low()), |
103 | String.valueOf(b.low()), |
| 88 | String.valueOf(b.close()), |
104 | String.valueOf(b.close()), |
| 89 | String.valueOf(b.volume()), |
105 | String.valueOf(b.volume()), |
| 90 | String.valueOf(b.wap()), |
106 | String.valueOf(b.wap()), |
| 91 | String.valueOf(b.count()) |
107 | String.valueOf(b.count()) |
| 92 | ); |
108 | ); |
| - | 109 | ||
| 93 | writer.write(linha); |
110 | writer.write(linha); |
| 94 | writer.newLine(); |
111 | writer.newLine(); |
| 95 | }
|
112 | }
|
| - | 113 | ||
| 96 | writer.flush(); |
114 | writer.flush(); |
| 97 | }
|
115 | }
|
| 98 | }
|
116 | }
|
| - | 117 | ||
| 99 | }
|
118 | }
|