Rev 796 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
package br.com.kronus.ibkr.history;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import com.ib.client.Bar;
import com.ib.client.Contract;
import com.ib.client.TagValue;
import br.com.kronus.ibkr.api.IbkrClient;
public class IbkrHistoricalDataService
{
private final IbkrClient ibkr
;
public IbkrHistoricalDataService
(IbkrClient ibkr
) {
this.
ibkr = ibkr
;
}
/**
* Solicita histórico para IBKR e grava tudo em CSV.
*
* @param contract contrato IBKR
* @param endDateTime "" para agora ou "yyyyMMdd HH:mm:ss"
* @param durationStr "2 D", "5 D", "1 W", "1 M", etc.
* @param barSizeSetting "1 min", "5 mins", "15 mins", "1 day", etc.
* @param whatToShow "TRADES", "MIDPOINT", etc.
*/
public void baixarHistoricoParaCsv
(
int reqId,
Contract contract,
String endDateTime,
String durationStr,
String barSizeSetting,
String whatToShow,
Path arquivoCsv
) throws Exception {
if (!Files.
exists(arquivoCsv.
getParent())) {
Files.
createDirectories(arquivoCsv.
getParent());
}
try (BufferedWriter writer = Files.
newBufferedWriter(arquivoCsv,
java.
nio.
file.
StandardOpenOption.
CREATE,
java.
nio.
file.
StandardOpenOption.
TRUNCATE_EXISTING)) {
writer.
write("data;hora;open;high;low;close;volume;wap;count");
writer.
newLine();
CompletableFuture
<List<Bar
>> fut = ibkr.
prepararFutureHistorico(reqId
);
ibkr.
getClient().
reqHistoricalData(
reqId,
contract,
endDateTime,
durationStr,
barSizeSetting,
whatToShow,
1,
2,
false,
(List<TagValue
>) null
);
List<Bar
> bars = fut.
get(60,
TimeUnit.
SECONDS);
for (Bar b : bars
) {
String timeStr = b.
time(); // ex: 20250125 10:05:00
String dataStr = timeStr.
substring(0,
8);
String horaStr = timeStr.
substring(9);
String yyyy = dataStr.
substring(0,
4);
String mm = dataStr.
substring(4,
6);
String dd = dataStr.
substring(6,
8);
String dataFormatada = yyyy +
"-" + mm +
"-" + dd
;
String linha =
String.
join(";",
dataFormatada,
horaStr,
String.
valueOf(b.
open()),
String.
valueOf(b.
high()),
String.
valueOf(b.
low()),
String.
valueOf(b.
close()),
String.
valueOf(b.
volume()),
String.
valueOf(b.
wap()),
String.
valueOf(b.
count())
);
writer.
write(linha
);
writer.
newLine();
}
writer.
flush();
}
}
}