Предполагается, что приведенный ниже код вернет и напечатает список исторических рыночных данных, таких как объем открытия, закрытия, максимума, минимума. Соединение с 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...");
}