API Interactive Broker Java ничего не возвращает от исторических данных - PullRequest
0 голосов
/ 04 мая 2020

Предполагается, что приведенный ниже код вернет и напечатает список исторических рыночных данных, таких как объем открытия, закрытия, максимума, минимума. Соединение с Interactive Broker API должно быть в порядке. Но в консоли Java он не печатал рыночные данные из обратных вызовов. Похоже, это не go через функцию historyData. Как активировать эту функцию и сохранить рыночные данные в объекте?

id 1
-1 2104 Market data farm connection is OK:usfarm.nj
-1 2104 Market data farm connection is OK:cashfarm
-1 2104 Market data farm connection is OK:usfarm
-1 2106 HMDS data farm connection is OK:cashhmds
-1 2106 HMDS data farm connection is OK:hkhmds
-1 2106 HMDS data farm connection is OK:ushmds
-1 2158 Sec-def data farm connection is OK:secdefil
...

Пример кода:

    void run() {
        m_client.eConnect("localhost", 7497, 123);
        final EReader reader = new EReader(m_client, m_signal);
        reader.start();
        new Thread() {
            @Override
            public void run() {
                while (m_client.isConnected()) {
                    m_signal.waitForSignal();
                    try {
                        reader.processMsgs();
                    } catch (Exception e) {
                        System.out.println("Exception: " + e.getMessage());
                    }
                }
            }
        }.start();

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void nextValidId(int orderId) {
        System.out.println("id "+orderId);
        nextOrderID = orderId;
        //Contract c = new StkContract("AAPL");
        Contract c = new Contract();
        c.symbol("EUR");
        c.exchange("IDEALPRO");
        c.secType("CASH");
        c.currency("USD");

        m_client.reqHistoricalData(1, c, 
                LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE)+ " 16:00:00",
                "1 D", "1 min", "MIDPOINT", 1, 1, false, null);
        m_client.reqMktData(1, c, "", false, false, null);
    }

    @Override
    public void error(int id, int errorCode, String errorMsg) {
        System.out.println(id + " " + errorCode + " " + errorMsg);
    }

    @Override
    public void historicalData(int reqId, String date, double open, double high, double low, double close, int volume, int count, double WAP, boolean hasGaps) {
        //if being run on the next calendar day, this works
        if (LocalDate.now().minusDays(1).format(DateTimeFormatter.BASIC_ISO_DATE).equals(date)){
            this.date = date;
            this.high = high;
            this.low = low;
            this.open = open;
            this.close = close;
            System.out.println(date + " h: " + high + " l: " +low);
        }
        System.out.println("Requesting Data...");
        System.out.println(EWrapperMsgGenerator.historicalData(reqId, date, open, high, low, close, volume, count, WAP));
        System.out.println("Data Input Ended...");
    }
...