Blame |
Last modification |
View Log
| Download
| RSS feed
package br.com.kronus.ibkr.futures;
import java.math.BigDecimal;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import com.ib.client.Contract;
import br.com.kronus.core.trade.ServicoMercadoFuturos;
import br.com.kronus.ibkr.api.IbkrClient;
import br.com.kronus.ibkr.api.IbkrMapper;
/**
* Implementação de mercado usando IBKR, reutilizando a assinatura do serviço da Binance.
*/
public class ServicoMercadoFuturosIbkr
implements ServicoMercadoFuturos
{
private final IbkrClient ibkr
;
private final AtomicInteger nextTickerId =
new AtomicInteger(1);
public ServicoMercadoFuturosIbkr
(IbkrClient ibkr
) {
this.
ibkr = ibkr
;
}
/**
* Obtém o último preço do símbolo usando market data da IBKR.
*/
@
Override
public BigDecimal obterUltimoPreco
(String symbol
) throws Exception {
Contract contract = IbkrMapper.
contratoFuturoIndice(symbol
);
int tickerId = nextTickerId.
getAndIncrement();
CompletableFuture
<BigDecimal> future = ibkr.
registrarFuturePreco(tickerId
);
ibkr.
getClient().
reqMktData(tickerId, contract,
"",
false,
false,
null);
BigDecimal preco = future.
get(5,
TimeUnit.
SECONDS);
ibkr.
getClient().
cancelMktData(tickerId
);
return preco
;
}
}