0

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

1 回答 1

1

您的“1”的 conId 不正确。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
于 2018-01-13T01:44:41.493 回答