In Elektron Connect (RFA library), we subscribe to chain RICs and then to all child RICs of the chain.
When RICs roll over and expire, I believe we get a "Stream Closed" event for the expired RICs.
We are trying to work out if there is there a way to identify when a RIC expires? Is there a response message or a response code that we can use to identify when this happens?
The Elektron team have confirmed there is no specific Status text message used for Drop RICs
They have also expanded on my above comment that the application code should be able to determine if a RIC has been closed due to Expiry. Various fields such as EXPIR_DATE, MATUR_DATE, LSTTRDDATE (depending on the type of RIC) - may assist in determining the expiry date.
You can also ask on the existing Content ticket if they are able to advise which if any field best indicates the Expiry - for your particular set of RICs.
The Status-Code property of the OmmState object received as part of the StatusMsg provides a reason for the particular stream state.
The list of StatusCodes can be found by referencing the RFA documentation for
enum rfa::common::RespStatus::StatusCode (C++) or com.reuters.rfa.omm.OMMState.Code (Java).
You would need to check with the Helpdesk to determine which Status Code value may be used by the Real-Time feed to indicate an expired RIC due to 'rollover'.
Thanks for the update although I am a bit confused why I need to raise a helpdesk issue for this question. This is a pure dev question. If I raise this on helpdesk I am sure they will redirect me to the developer portal.
Below is the Enum I found in the code. None of them seem to be what I am after.
public sealed class StatusCodeEnum
public const byte None = 0;
public const byte DacsMaxLoginsReached = 31;
public const byte UserUnknownToPermSys = 30;
public const byte DacsDown = 29;
public const byte Error = 28;
public const byte ExceededMaxMountsPerUser = 27;
public const byte NoBatchViewSupportInReq = 26;
public const byte UnableToRequestAsBatch = 23;
public const byte FullViewProvided = 22;
public const byte InvalidView = 21;
public const byte UnsupportedViewType = 20;
public const byte NonUpdatingItem = 19;
public const byte NotOpen = 16;
public const byte SourceUnknown = 15;
public const byte AlreadyOpen = 14;
public const byte TooManyItems = 13;
public const byte NoResources = 12;
public const byte GapDetected = 11;
public const byte FailoverCompleted = 10;
public const byte FailoverStarted = 9;
public const byte TickByTickResumed = 8;
public const byte JustInTimeFilteringStarted = 7;
public const byte Preempted = 6;
public const byte UsageError = 5;
public const byte InvalidArgument = 4;
public const byte NotAuthorized = 3;
public const byte Timeout = 2;
public const byte NotFound = 1;
public const byte DacsUserAccessToAppDenied = 32;
public const byte GapFill = 34;
The reason for asking the Content Helpdesk is that they would best be able to advise if a particular status code is used when a RIC expires due to rollover.
Our streaming APIs such as RFA, RT-SDK are content-neutral - they just pass on the data they receive from the server/data source - they don't implement any business or content related logic.
I looked at the above list and could not see any obvious choice for a rollover expiration and therefore recommended the Content helpdesk.
I have raised a content ticket on your behalf and someone should contact you soon.
Here is the response from helpdesk. As you can see I am being diverted back to this portal.
Thanks for contacting Refinitiv Helpdesk, I am Kaye and I received your query. When you say " When RICs roll over and expire" is this referring to a specific Asset/Instrument Class that rolls over and expires? For example, an Expired Future RIC.
Once a future has expired, the focus generally moves to the next active contract. When using a rolling contract RIC such as LCOc1, the contract will roll automatically. To go back and look at the historical data, you must follow a specific RIC structure.
S: RIC Root Code for Soybeans
U: Month Code (SEP)
4: Last digit of the contract year
^: Carat symbol
1: Decade of the expiry of the contract
SU4^1 - Expired Futures RIC - September 2014 contract (searchable in the main search box, chart, and Excel only).
Note: RIC construction rules for expired Futures can be found on Quote page RULES9.
On the other hand, if this has something to do with how to identify when a RIC expires within your API environment, as we have limited knowledge on developing APIs or on any programming language, I need to refer you back to Developers Community Portal: https://developers.refinitiv.com/en
Any updates on this as I am being bounced back to raise a dev portal question by the helpdesk?
The Elektron development team advised you can reach out to the developer's community directly to see if any such message is possible. Here is the link:
Let me know if need any further assistance.
Trade Workflow Specialist
Preferred Pronouns She/Her/Hers
An LSEG Business lseg.com
I have reached out to Veena to explain the situation.
Having thought about this last night(!), given the nature of the query and given the list of status codes above, it may well be that there is no conclusive way of identifying if a RIC is closed due to expiry using Status Code. Even if a particular Status Code is used, it may not be exclusive to expired RICs.
I suspect the only solution could be for the application developer to implement some business logic to determine when a RIC expires. You are subscribed to an instrument which by its very nature is expected to expire at a given date.
Therefore, when an instrument stream is closed, your application could confirm if it was expected to expire at that time or not.
I will also reach out to the Elektron team to see if I can get any further advice from them.
The rule around the Status text has always been that it should not be used for determining program flow/action - as it is subject to change. However, I will ask the Elektron team if there is anything unique about the text for an expired RIC.
The Elektron team have advised, there is no specific StatusCode used for an expired RIC.
For example, when an expired CME future was dropped this weekend, the status code was None (0).
I have asked if a particular Status Text was used - however, please note my earlier comment.