使用Java API(我猜这适用于任何其他TWS Interactive Brokers客户端API),我得到一个错误“No security definition has been found for the request”常见问题解答和其他资源完全没有帮助。
Contract contract = new Contract();
int id = incId;
System.out.println("Oder Id " + id );
// use UTC seconds as transaction id
// This is the problem you need to have a blank contractId
contract.m_conId = 12345;
contract.m_symbol = signal.symbol;
contract.m_secType = "STK";
contract.m_expiry = "";
contract.m_strike = 0;
contract.m_exchange = "SMART";
contract.m_primaryExch = "ISLAND";
contract.m_currency = "USD";
//etc
Order order = new Order();
// set order fields
order.m_account = "XXXXXX";
order.m_orderId = id;
//etc
GetInstance().wrapper.m_client.placeOrder(id, contract, order);
7条答案
按热度按时间j7dteeu81#
这里的关键是contractId字段应该保留为空。使用contractId提交会导致安全错误。
laik7k3q2#
通过将交换设置为“智能”,为我解决了这个问题。
我的用例是获取我当前持有的所有合同并发送MOC订单。我使用reqPositions方法获取了合同,但这些返回值中的合同仍然出现此错误。
在这些合同上将Exchange设置为SMART为我解决了这个问题。
slhcrj9b3#
在某些情况下,交换需要留空。我在使用此查找时遇到了一些运气:
https://pennies.interactivebrokers.com/cstools/contract_info/v3.9/index.php
例如,对于CL:
qmelpv7a4#
此错误的其他可能原因包括:
nc1teljy5#
我遇到过同样的问题,但这是因为我没有填充SecIdType和SecId的值。
下面是一个成功的订单和请求的示例:
ego6inou6#
也要确保为你的合同选择正确的lastTradeDateOrContractMonth。我在试图在不合法的到期日出售期权时也遇到了同样的错误。
qvsjd97n7#
使用ISLAND代替SMART进入交换。