question

Upvotes
Accepted
1 0 1 2

ERROR #360f - AdxRtList

When requesting many tickers (2000+)over the API I get the following: An exception of type 'System.Runtime.InteropServices.COMException' occurred in eikonGetData.exe but was not handled in user code Additional information: ERROR #360f - AdxRtList : invalid item How can I find out which tickers are invalid/ how can I go about handling this?

eikoneikon-com-api
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Code is as follows:

static string[] tickers = { "ORCL.N",   "ORLY.OQ",  "OSIS.OQ",  .......}

static string[] type = { "BID", "ASK", "TRDPRC_1",........}

string requestingTickers = string.Join(",", tickers);

string requestingtype = string.Join(",", type);

AdxRtList.RegisterItems(requestingTickers, requestingtype); //ERROR


Edit:
After more testing it seems that I can not send more then 340 tickers though. Is there a cap in the API?

Hi @amine.elkaouachi

Thank you for your participation in the forum.

Is the reply below satisfactory in resolving your query?

If so please can you click the 'Accept' text next to the appropriate reply. This will guide all community members who have a similar question.

Thanks

@amine.elkaouachi

Please be informed that a reply has been verified as correct in answering the question, and has been marked as such.

Thanks,

AHS

Upvotes
Accepted
39.4k 77 11 27

Hi @amine.elkaouachi

There's no cap on the number of RICs you can use in a single instance of AdxRtList class imposed by the API. You can also create as many instances of AdxRtList class as you need. There's an overall limit on the number of RICs used to subscribe to real-time data updates. For Hosted Eikon accounts the limit is set to 2,500 RICs. If required it can be increased to 5K upon request. This limit is shared by all applications. E.g. if you concurrently retrieve real-time data for 150 RICs in Eikon application and for 850 RICs in Excel, your application will not be able to subscribe to more than 1,500 RICs. Snapshot requests, requests for fundamental and reference data do not count towards the 2,5K RICs limit. Only outstanding subscriptions to real-time data count. When you reach the limit and attempt to add subscription to another RIC, you will receive an error message saying "aggregate item limit exceeded".

When you receive an error "invalid item" this normally indicates that you used an invalid RIC, rather than that you've exhausted your subscriptions limit. You most likely get this error message when trying to extract data for an invalid RIC from AdxRtList object using Value or ListFields methods in the OnUpdate event handler. To prevent this use a_itemStatus parameter returned into OnUpdate event handler. Or check the validity of the RIC using ItemStatus property before executing Value or ListFields methods.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
4.6k 26 7 22

There are a few things that you can change about this:

  1. You will not be able to subscribe to more than 1500 instruments, so you will have to execute it using more than one request;
  2. AdxRtList takes an object[] for tickers and fields, so you can do it like that:
 var instruments = new[] {...};
 var fields = new[] {...};

ThomsonReuters.Interop.RTX.AdxRtList list = <instance of your api>.CreateAdxRtList();

list.OnImage += list_OnImage;
list.OnStatusChange += list_OnStatusChange;
list.Source = "IDN";
list.RegisterItems(instruments, fields);
list.StartUpdates(RT_RunMode.RT_MODE_IMAGE);

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
646 21 33 41

@Alex Putkov. @Zhenya Kovalyov

There must be some other logic behind RegisterItems( ) function. Sometimes I get that error trying to register instruments/fields.At that moment Eikon does not know if it's going to be a subscription for an updates or snapshot/image.

A few observations:

1. This is probably not related to bad ticker because when I try to split the ticker list to smaller batches and run multiply requests, it runs fine.

2. One day I found that if I split the tickers so (ticker number * field number) < 2000, it works fine. If I request more tickers at a time, it fails.

3. Today I ran the same (almost) logic and found that it does not work with 2000 but works with 1500..

Again, it fails on m_RtMgr->RegisterItems(_variant_t(a_Instrument), _variant_t(a_FieldList)); step. So no request is sent yet.

Is it possible to find out the reasons when this function throws?

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

You're right that the validation of items is not performed at the time RegisterItems method is called. The error indicates that the method had a problem ingesting the input. The only troubleshooting that can be done here is to try reproducing and isolating the issue to specific conditions and inputs. If you're unable to isolate the problem and yet you reproduce it with any frequency, try registering all items one by one in a loop instead of registering multiple items in a single RegisterItems call.

I tried to troubleshoot it as you described, but the problem is gone if I split them..

I have 360 tickers. If I register them all as 1 string with 9 fields - it fails.

if I split them to the groups with 100 ticker in each, it works.

If I split them by 250, it fails on first group and register second fine.

If I split them by 222, it works.

I don't have time to test it more at this moment, but behavior is strange, because the input is the same. Only the difference is how many tickers is in the instruments string.

I will try to come back to this later.

Upvotes
646 21 33 41

@Alex Putkov.. I did some investigation. There is something that I cannot explain.

I'm trying to register the following instruments for the snapshot only:

AFIRPLUBE.MX,AFIRPLUCE.MX,AFIRVISB1.MX,AFIRVISB2.MX,AFIRVISB3.MX,AFIRVISBM.MX,AFIRVISBE.MX,AFIRVISCE.MX,AFIRVISCM.MX,AFIRVISDM.MX,ALPHA7B8M1.MX,ALPHA7B8E1.MX,ALPHA7B8F1.MX,ALPHA7B8F2.MX,AKTMXMSBFF.MX,AKTMXMPBFF.MX,AKTUCOBBFF.MX,AKTUSMOBFF.MX,AKTDEMPBFF.MX,AKTMXCPBFF.MX,AKTMXLQBFF.MX,AKTMXTABFF.MX,AKTUSAGBFF.MX,AXAIM3ABM4.MX,AXAIM3ABFE.MX,AXAIM53BE4.MX,AXAIM65BFE.MX,AXAIM3ABM3.MX,AXAIM3ABE2.MX,AXAIM3ABM2.MX,AXAIM53BE3.MX,AXAIM3ABE0.MX,AXAIM53BE0.MX,AXAIM65BE1.MX,AXAIM3ABE4.MX,AXAIM53BE1.MX,AXAIM65BE0.MX,AXAIM65BE4.MX,AXAIM53BE2.MX,AXAIM3ABM1.MX,AXAIM65BE2.MX,AXAIM3ABE3.MX,AXAIM53BFE.MX,AXAIM65BE3.MX,AXAIM3ABE1.MX,AXAIM29BE3.MX,AXAIM29BE0.MX,AXAIM29BE4.MX,AXAIM29BE1.MX,AXAIM29BFE.MX,AXAIM29BE2.MX,AXAIM41BFE.MX,AXAIM41BE1.MX,AXAIM41BE0.MX,AXAIM41BE3.MX,AXAIM41BE4.MX,AXAIM41BE2.MX,APIBONOAPIF.MX,APIBONOAPIM.MX,APIBONOAPIE.MX,AKTUCOBBNC81.MX,AKTMXCPBF83.MX,AKTMXMPBNC82.MX,AKTMXLQBNC82.MX,AKTDEMPBNC82.MX,AKTUCOBBM83.MX,AKTMXLQBF84.MX,AKTMXTABF84.MX,AKTMXCPBF84.MX,AKTMXLQBM82.MX,AKTUSAGBF83.MX,AKTUCOBBF81.MX,AKTDEMPBF83.MX,AKTUSMOBF81.MX,AKTDEMPBF84.MX,AKTMXMSBF82.MX,AKTUSAGBF82.MX,AKTMXMSBF81.MX,AKTMXMPBF82.MX,AKTMXMPBF81.MX,AKTMXMPBNC81.MX,AKTUSAGBF84.MX,AKTMXLQBNC81.MX,AKTUCOBBNC82.MX,AKTUCOBBF84.MX,AKTUCOBBF82.MX,AKTUSMOBF84.MX,AKTUSMOBF82.MX,AKTDEMPBNC81.MX,AKTMXMSBF84.MX,AKTMXMPBF84.MX,AKTMXLQBF83.MX,AKTDEMPBF82.MX,AKTUSAGBF81.MX,AKTMXTABF83.MX,AKTMXMSBF83.MX,AKTMXCPBF82.MX,AKTMXLQBF81.MX,AKTMXMPBF83.MX,AKTUCOBBM82.MX,AKTUSMOBNC82.MX,AKTMXTABF81.MX,AKTUSAGBNC81.MX,AKTDEMPBF81.MX,AKTMXCPBNC82.MX,AKTMXMSBNC82.MX,AKTMXLQBM83.MX,AKTMXTABNC82.MX,AKTUSAGBNC82.MX,AKTMXCPBNC81.MX,AKTMXMSBNC81.MX,AKTUCOBBF83.MX,AKTUSMOBF83.MX,AKTMXTABNC81.MX,AKTMXCPBF81.MX,AKTMXLQBF82.MX,AKTUSMOBNC81.MX,AKTMXTABF82.MX,BIL.MX,BSV.MX,BOTZ.MX,BAB.MX,BRZU.MX,BIV.MX,BND.MX,BNDX.MX,BLV.MX,BKF.MX,BRF.MX,B7GFF.MX,B7CRF.MX,B7PCC.MX,B7PCF.MX,B7RFE.MX,B7RVTM.MX,B7RV2C.MX,B7RAVC.MX,B7RAVP.MX,B7MRFE.MX,B7RV2F.MX,B7RV2E.MX,B7PCGB.MX,B7PCPV.MX,B7RAVF.MX,B7TOPE.MX,B7RFTM.MX,BPZOFS.MX,B7RFFS.MX,B7CRNC.MX,B7GFNC.MX

With these fields:

CF_DATE,CF_VOLUME,OPEN_PRC,CF_CLOSE,CF_HIGH,CF_LOW,CF_CURR,VWAP,OPN_AUCVOL 

with this function:

l_hr = m_RtMgr->RegisterItems(_variant_t(a_Instrument), _variant_t(a_FieldList)); 

And it leads to : ERROR #360f - AdxRtList : invalid item

If I remove any ticker from the list, the problem is gone.

If I replace any one ticker with AAPL.O , the problem stays.

There are about 150 tickers and it's too far from 2500 limit. Any idea what can be a reason of this error?

Thanks,

Igor

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
646 21 33 41

Problem's solved

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

@igorg
Would you mind sharing how you solved the problem?

Instruments string cannot exceed 2000 characters.

I believe the error should be more informative. It would save a lot of time.

It's best to use an array of strings for instrument list rather than a single string of comma separated RICs.

Show more comments

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.