TWS Interactive Brokers API - How to fix "No security definition has been found for the request"?

18.6k views Asked by At

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);
7

There are 7 answers

6
FlavorScape On

The key here is that the contractId field should be left blank. Submitting with a contractId causes a security error.

0
Gregism On

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()
0
lonewolf On

Instead of SMART use ISLAND into exchange.

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 = "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);
0
Mate Hegedus On

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.

0
Alexander On

Also make sure to pick the correct lastTradeDateOrContractMonth for your contract. I got the same error when trying to sell an option at a maturity date that was not legit...

0
GGnore On

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.

0
Dragos Durlut On

I have had the same issue, but it was because I was not filling the values of SecIdType and SecId.

Here is an example of the order and request that worked:

IBApi.Order order = new IBApi.Order()
{
    Account = OrderCreationConfig.IndividualAccount
    , ClientId = OrderCreationConfig.OrderSlaveClientId //1
    , Action = orderNodeEntity.OrderAction //"BUY"
    , TotalQuantity = orderNodeEntity.NrOfStocks
    , OrderType = OrderCreationConfig.OrderTypeLMT //"LMT"
    , Tif = OrderCreationConfig.OrderTifGTC //"GTC"
    , OcaType = OrderCreationConfig.OcaTypeId //3
    , LmtPrice = price
    , AuxPrice = 0
    , TrailStopPrice = double.MaxValue
    , VolatilityType = 0
    , DeltaNeutralOrderType = "None"
};

IBApi.Contract contract = new IBApi.Contract()
{
      Symbol = orderNodeEntity.Symbol
     , SecType = OrderCreationConfig.ContractSecTypeSTK //"STK"
     , Strike = 0
     , Right = OrderCreationConfig.ContractRightQuestionMark //"?"
     , Exchange = OrderCreationConfig.ContractExchangeIsland //"ISLAND"
     , Currency = OrderCreationConfig.ContractCurrencyUSD //"USD"
     , LocalSymbol = orderNodeEntity.Symbol
     , TradingClass = null        
     , SecIdType = OrderCreationConfig.ContractSecIdTypeISIN //"ISIN"
     , SecId = this.GetISINCode(orderNodeEntity.Symbol) //"US0378331005" 
};