JAVA Interactive brokers api

时间:2016-12-01 06:19:07

标签: java api interactive-brokers

我调用交互式代理reqHistoricalData()方法,我在IBGateaway上看到我发现我收到错误

  

200 |找不到请求的安全定义

我尝试将sec类型更改为不同的类型,但总是返回相同的结果,这是我的代码:

 public class IBrokersApi implements EWrapper {

private EClientSocket clientSocket = new EClientSocket(this);
public Contract contract = new Contract();

public void connect(){
    if(!clientSocket.isConnected()){
        clientSocket.eConnect("", 4002, 0);
    }
}

public void disconnect(){
    if(clientSocket.isConnected()){
        clientSocket.eDisconnect();
    }
}
public void getHistData(){
    contract.m_conId = 1;
    contract.m_symbol = "APPL"; // "ESJ13-FUT-GLOBEX";
    contract.m_secType = "STK";
    contract.m_exchange = "SMART";
    clientSocket.reqHistoricalData(0, contract,"20161120 00:00:00", "1 D", "1 day", "TRADES", 0, 2, null);
}

1 个答案:

答案 0 :(得分:1)

您对" 1"的看法是不正确的。 AAPL股票恰好具有265598的conId,您可以使用API​​中的ContractDetails机制进行查询。

对于IB API中的大多数情况,您通常可以选择发送conId和交换,或者在类似示例的简单情况下,您可以指定各种"人类可读"而是改为。在您的情况下,只需不设置conId并设置货币(默认情况下可能设置)。因此,对于创建合同,您的代码应如下所示:

    Contract c = new Contract();

    c.symbol("AAPL");
    c.secType(SecType.STK);
    c.exchange("SMART");
    c.currency("USD");

或期权合约:

    Contract c = new Contract();

    c.symbol("AAPL");
    c.secType(SecType.OPT);
    c.exchange("SMART");
    c.currency("USD");      
    c.multiplier("100");                        // 1 option is for 100 stock shares
    c.lastTradeDateOrContractMonth("20180119"); // yyyyMMdd
    c.strike(175.00);
    c.right(Right.Put);                         // CALL or PUT