Using the Java API (and I guess this goes for any other TWS Interactive Brokers client API) I get an error "No security definition has been found for the request" The FAQ and other resources were resoundingly unhelpful.
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);
The key here is that the contractId field should be left blank. Submitting with a contractId causes a security error.
It was solved for me by setting the exchange to "SMART".
My use case was getting all the contracts I am currently holding and sending a MOC order. I got the contract using the reqPositions method, but the Contracts in those return values still gave this error.
Setting exchange to SMART on these contracts solved the issue for me.
In some cases the exchange needs to be left blank. I had some luck using this lookup:
https://pennies.interactivebrokers.com/cstools/contract_info/v3.9/index.php
For instance, for CL:
con.connect()
contract = Contract()
contract.m_symbol = "CL"
contract.m_exchange = ""
contract.m_currency = "USD"
contract.m_secType = "FUT"
con.reqContractDetails(1, contract)
time.sleep(2)
con.disconnect()
Other possible reasons for this error may include:
-The ConId should be set to 0.
-The TradingClass should be left blank.
-Issues with the LocalSymbol or GlobalSymbol.
-Other Contract variables were incorrectly set.
-The specific contract requested doesn't currently exist on the market.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With