Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
795 blopes 1
package br.com.kronus.ibkr.futures;
2
 
3
import java.math.BigDecimal;
4
import java.util.concurrent.CompletableFuture;
5
import java.util.concurrent.TimeUnit;
6
import java.util.concurrent.atomic.AtomicInteger;
7
 
8
import com.ib.client.Contract;
9
 
10
import br.com.kronus.core.trade.ServicoMercadoFuturos;
11
import br.com.kronus.ibkr.api.IbkrClient;
12
import br.com.kronus.ibkr.api.IbkrMapper;
13
 
14
/**
15
 * Implementação de mercado usando IBKR, reutilizando a assinatura do serviço da Binance.
16
 */
17
public class ServicoMercadoFuturosIbkr implements ServicoMercadoFuturos {
18
 
19
    private final IbkrClient ibkr;
20
    private final AtomicInteger nextTickerId = new AtomicInteger(1);
21
 
22
    public ServicoMercadoFuturosIbkr(IbkrClient ibkr) {
23
        this.ibkr = ibkr;
24
    }
25
 
26
    /**
27
     * Obtém o último preço do símbolo usando market data da IBKR.
28
     */
29
    @Override
30
    public BigDecimal obterUltimoPreco(String symbol) throws Exception {
31
        Contract contract = IbkrMapper.contratoFuturoIndice(symbol);
32
 
33
        int tickerId = nextTickerId.getAndIncrement();
34
        CompletableFuture<BigDecimal> future = ibkr.registrarFuturePreco(tickerId);
35
 
36
        ibkr.getClient().reqMktData(tickerId, contract, "", false, false, null);
37
 
38
        BigDecimal preco = future.get(5, TimeUnit.SECONDS);
39
 
40
        ibkr.getClient().cancelMktData(tickerId);
41
 
42
        return preco;
43
    }
44
}