我调用了交互式代理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);
}

最佳答案

您的conId“ 1”不正确。 AAPL股票的conId为265598,您可以使用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

关于java - JAVA Interactive Brokers API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40903839/

10-11 09:27