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