refinitiv data api via Python cannot retrieve some RICS

Hi

I am not able to retrieve these data from EIKON (None values)

IR =[


'EURSWFSR','EUR1MFSR','EUR2MFSR','EUR3MFSR','EUR6MFSR','EUR1YFSR','EURLIBOR',

'JPYSWFSR','JPY1MFSR','JPY2MFSR','JPY3MFSR','JPY6MFSR','JPY1YFSR',

'CHFSWFSR','CHF1MFSR','CHF2MFSR','CHF3MFSR','CHF6MFSR','CHF1YFSR','USDSOFR',

'USDSWFSR','USD1MFSR','USD2MFSR','USD3MFSR','USD6MFSR','USD1YFSR',

'GBPSWFSR','GBP1MFSR','GBP2MFSR','GBP3MFSR','GBP6MFSR','GBP1YFSR',

'EONIA','EURIBORSWD', 'EURIBOR1MD', 'EURIBOR2MD',

]




streaming_prices_ir = rdp.StreamingPrices(

universe =[c+'=' for c in IR] ,

fields = ['PRIMACT_1'],

on_complete = lambda streaming_prices :

create_dataframe(streaming_prices),

on_update = lambda streaming_prices, instrument_name, fields :

update_dataframe_ir(streaming_prices, instrument_name, fields)

)

Best Answer

  • Hi @gmtm.projectoffice

    Thanks for the confirmation- so as per my earlier posts, you are not licenced for the streaming data you are trying to request.

    You would use the same RIC code but need the appropriate licence. I will raise a ticket on your behalf with the My.Refintiv helpdesk.

    You can also contact your Refinitiv Account team as I recommended earlier.

Answers

  • Hi @gmtm.projectoffice

    Please add the following debug output code and rerun your code - ideally just requesting 1 or two of the above RICs (to reduce debug output)

    import logging
    logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.DEBUG)
    import refinitiv.dataplatform as rdp

    Look out for the response you get back after the RIC is requested e.g.

    2021-01-20 14:22:25,145 - session - DEBUG - Send request: {'ID': 1, 'Domain': 'MarketPrice', 'Key': {'Name': 'EURSWFSR='}, 'Streaming': True, 'View': ['BID', 'PRIMACT_1']}

    2021-01-20 14:22:25,204 - Session session - Thread 8928 | WebSocket 0 OMMStreamConnection._process_response_message(message={'ID': 1, 'State': {'Code': 'ConnectionError', 'Data': 'Suspect', 'Stream': 'Closed', 'Text': 'Access Denied: User req to PE(3420)'}, 'Type': 'Status'})

    2021-01-20 14:22:25,204 - session - DEBUG - OMMStreamConnection._process_response_message(message={'ID': 1, 'State': {'Code': 'ConnectionError', 'Data': 'Suspect', 'Stream': 'Closed', 'Text': 'Access Denied: User req to PE(3420)'}, 'Type': 'Status'})

    The above is what I see with my default credentials.

    If you are seeing the same status message, this means that your credentials are not licenced for the RICS you are trying to consume. Please speak to your Refinitiv Account team to discuss changing your licence to include the required instruments.

    If the status/error message after the Send Request differs from the above, please post it here inline or as a .txt attachment. Please don't include the full output, which will contain your private AppKey.


  • Hi


    it does show anything. I think the debug is not activated. Can you give the steps to to add to debug properly ?

    and also the tested lined in python?

    thanks


  • Hi @gmtm.projectoffice

    I am not sure why you are not seeing debug output - could be a local environmental issue?

    Are you opening a Desktop Session and then also calling streaming_prices_ir.open(), after you create streaming_prices_ir in your code snippet above?

    Also, you mention Eikon and using the RDP library - so I assume you are using a local instance of Eikon and connecting via an RDP Library Desktop Session - is this correct?

    I have attached an alternative example which outputs any data to the console, as well as any Status messages received - which is what we were looking for in the debug above.


    import refinitiv.dataplatform as rdp
    import datetime

    rdp.open_desktop_session("your app key")

    def display_refreshed_fields(streaming_price, instrument_name, fields):
        current_time = datetime.datetime.now().time()
        print(current_time, "- Refresh received for", instrument_name, ":", fields)    
        
    def display_updated_fields(streaming_price, instrument_name, fields):
        current_time = datetime.datetime.now().time()
        print(current_time, "- Update received for", instrument_name, ":", fields)    
        
    def display_status(streaming_price, instrument_name, status):
        current_time = datetime.datetime.now().time()
        print(current_time, "- Status received for", instrument_name, ":", status)    
        
    def display_complete_snapshot(streaming_prices):
        current_time = datetime.datetime.now().time()
        print(current_time, "- StreamingPrice is complete. Full snapshot:")
        display(streaming_prices.get_snapshot())
        

    streaming_prices = rdp.StreamingPrices(
        universe = ['EURSWFSR=', 'EUR1MFSR=', 'EUR2MFSR=', 'EUR3MFSR='], 
        fields   = ['BID', 'ASK', 'PRIMACT_1'],
        on_refresh = lambda streaming_price, instrument_name, fields : 
            display_refreshed_fields(streaming_price, instrument_name, fields),
        on_update = lambda streaming_price, instrument_name, fields : 
            display_updated_fields(streaming_price, instrument_name, fields),
        on_status = lambda streaming_price, instrument_name, status : 
            display_status(streaming_price, instrument_name, status),
        on_complete = lambda streaming_price : 
            display_complete_snapshot(streaming_price)
    )

    streaming_prices.open()
    streaming_prices.close()

    Please try the above and check the output. When I run it with my credentials I see:

    09:09:23.349871 - Status received for EURSWFSR= : {'status': <StreamState.Closed: 1>, 'code': 'ConnectionError', 'message': 'Access Denied: User req to PE(3420)'} 09:09:23.402871 - Status received for EUR1MFSR= : {'status': <StreamState.Closed: 1>, 'code': 'ConnectionError', 'message': 'Access Denied: User req to PE(3420)'} 09:09:23.403871 - Status received for EUR3MFSR= : {'status': <StreamState.Closed: 1>, 'code': 'ConnectionError', 'message': 'Access Denied: User req to PE(3420)'} 09:09:23.403871 - Status received for EUR2MFSR= : {'status': <StreamState.Closed: 1>, 'code': 'ConnectionError', 'message': 'Access Denied: User req to PE(3420)'}


    The RDP library version I am using is

    rdp.__version__
    '1.0.0a7.post1'

    If you are on an older version, you can get the latest version on PyPi at refinitiv-dataplatform · PyPI


  •   File "<ipython-input-13-0b637dfbc790>", line 28
    streaming_prices = rdp.StreamingPrices( ^
    SyntaxError: invalid syntax
  • Hi @gmtm.projectoffice

    You will probably need to remove unnecessary spaces / separators after you copy and paste the code. Python is particularly sensitive to indentation / spaces etc and formatting of the code before it will run.

    I just tried to copy and paste the above into NotePad++ and save the file as .py file and it runs OK.

    Alternatively, try downloading and rename the file below to a .py file and try running it.

    RDPStreamingEvents.txt


  • 11:16:01.244188 - Status received for EURSWFSR= : {'status': <StreamState.Closed: 1>, 'code': 'ConnectionError', 'message': 'Access Denied: User req to PE(3420)'} 11:16:01.429209 - Status received for EUR1MFSR= : {'status': <StreamState.Closed: 1>, 'code': 'ConnectionError', 'message': 'Access Denied: User req to PE(3420)'} 11:16:01.472186 - Status received for EUR2MFSR= : {'status': <StreamState.Closed: 1>, 'code': 'ConnectionError', 'message': 'Access Denied: User req to PE(3420)'} 11:16:01.473055 - Status received for EUR3MFSR= : {'status': <StreamState.Closed: 1>, 'code': 'ConnectionError', 'message': 'Access Denied: User req to PE(3420)'} 11:16:01.473221 - StreamingPrice is complete. Full snapshot:



    InstrumentBIDASKPRIMACT_10EURSWFSR=NoneNoneNone1EUR1MFSR=NoneNoneNone2EUR2MFSR=NoneNoneNone3EUR3MFSR=NoneNoneNone

    [1]:

    <StreamState.Closed: 1>
  • Can I know the equivalent code to get the latest data not real time data ?

    Because in excel I use this formula: =RtGet("IDN","EURIBOR1MD=","PRIMACT_1") and I get the latest (delayed data).


    Regards.

  • and what about the delayed data? Normally we have access to these ones.

  • hi @gmtm.projectoffice

    You can still use the Eikon API to call get_data as required for non-streaming data e.g.


    import refinitiv.dataplatform.legacy as ek

    ek.set_app_key('your app key')

    df, err = ek.get_data(['EUR1MFSR=','EURIBOR1MD=', 'EUR1MFSR='], [ 'BID','PRIMACT_1'])

    print(df)
     Instrument      BID  PRIMACT_1
    0    EUR1MFSR= -0.58743   -0.58743
    1  EURIBOR1MD= -0.55900   -0.55900
    2    EUR1MFSR= -0.58743   -0.58743
  • @gmtm.projectoffice

    You can read more about the Eikon API on the Developer Portal - e.g. the Quick Start section includes various examples including get_data.

    Note that the Eikon API has been incorporated into the RDP Library as noted in my example above:

     import refinitiv.dataplatform.legacy as ek

    so you don't need to explicitly import eikon library when using RDP library.

  • thanks.

    Is there a way to get the real time stream ?

  • Yes - as mentioned, in my previous replies you need to discuss getting the appropriate licences for streaming data with your Refinitiv Account.

  • @gmtm.projectoffice

    To subscribe to streaming delayed data, put "/" in front of the real-time RIC. E.g. instead of "EURIBOR1MD=" use "/EURIBOR1MD=". In your original code sample it would be very easy to achieve by modifying just one line of code:

    from

    universe =[c+'=' for c in IR]

    to

    universe =['/'+c+'=' for c in IR]