Subversion Repositories Integrator Subversion

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
797 blopes 1
package br.com.kronus.ibkr.robos;
2
 
3
import com.ib.client.*;
4
 
5
import br.com.kronus.ibkr.api.IbkrMapper;
6
 
7
import java.time.*;
8
import java.time.format.DateTimeFormatter;
9
 
10
public class TesteMktDataSimples extends DefaultEWrapper {
11
 
12
    private final EJavaSignal signal = new EJavaSignal();
13
    private final EClientSocket client = new EClientSocket(this, signal);
14
    private EReader reader;
15
    private final int reqId = 1001;
16
 
17
    public static void main(String[] args) {
18
        new TesteMktDataSimples().iniciar();
19
    }
20
 
21
    public void iniciar() {
22
 
23
        System.out.println("Conectando ao TWS...");
24
 
25
        // MESMOS PARAMETROS QUE FUNCIONARAM NO TesteConexaoSimples
26
        client.eConnect("127.0.0.1", 7497, 2);
27
 
28
        try { Thread.sleep(2000); } catch (Exception ignored) {}
29
 
30
        System.out.println("isConnected = " + client.isConnected());
31
        if (!client.isConnected()) {
32
            System.err.println("Ainda não conectado ao TWS. Saindo.");
33
            return;
34
        }
35
 
36
        // 1 = realtime (se assinado), 3 = delayed
37
        client.reqMarketDataType(3);
38
 
39
        // EReader para processar mensagens
40
        reader = new EReader(client, signal);
41
        reader.start();
42
 
43
        new Thread(() -> {
44
            while (client.isConnected()) {
45
                try {
46
                    signal.waitForSignal();
47
                    reader.processMsgs();
48
                } catch (Exception e) {
49
                    e.printStackTrace();
50
                    break;
51
                }
52
            }
53
        }, "IBKR-Reader-Thread").start();
54
 
55
        // --------- CONTRATO PARA TESTE: AAPL ----------
56
//        Contract c = IbkrMapper.contratoForex();
57
        Contract c = IbkrMapper.contratoAcaoBrasil("PETR4");
58
        /*
59
        Contract c = new Contract();
60
        c.symbol("AAPL");
61
        c.secType("STK");
62
        c.currency("USD");
63
        c.exchange("SMART");
64
        */
65
//        c.primaryExch("NASDAQ");
66
 
67
        // ---------------------------------------------
68
 
69
        System.out.println("Solicitando market data (reqMktData)...");
70
        client.reqMktData(reqId, c, "", false, false, null);
71
    }
72
 
73
    // ===========================================
74
    // CALLBACKS DE PREÇO
75
    // ===========================================
76
 
77
    @Override
78
    public void tickPrice(int tickerId, int field, double price, TickAttrib attrib) {
79
        if (price <= 0) return;
80
 
81
        String campo;
82
        switch (field) {
83
            case 1:  campo = "BID"; break;
84
            case 2:  campo = "ASK"; break;
85
            case 4:  campo = "LAST"; break;
86
            default: campo = "FIELD_" + field;
87
        }
88
 
89
        String hora = LocalTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss"));
90
 
91
        System.out.println("[TICK] " + campo + " = " + price + " | " + hora);
92
    }
93
 
94
    @Override
95
    public void tickSize(int tickerId, int field, Decimal size) {
96
        // Se quiser ver tamanhos:
97
        // System.out.println("[SIZE] field=" + field + " size=" + size);
98
    }
99
 
100
    // ===========================================
101
    // ERROS
102
    // ===========================================
103
    @Override
104
    public void error(int id, long code, int arg2, String arg3, String msg) {
105
        System.err.println("IBKR ERROR: id=" + id + " code=" + arg2 + " msg=" + arg3);
106
    }
107
}