Upgrade from Eikon -> Workspace. Learn about programming differences.

For a deeper look into our Eikon Data API, look into:

Overview |  Quickstart |  Documentation |  Downloads |  Tutorials |  Articles

question

Upvotes
Accepted
1 2 1 1

python api streaming price can't work on pycharm?

Hello there,

I use sample code your tutorial provide to run python eikon api streaming prices function. It works well on jupyter as I separate my code in different cells for streaming_prices.open() & streaming_prices.close() function. It keeps receiving newly updated data during the time I run these two cells.

But, if I run same code in the same script in pycharm, it doesn't work that well. It can only runs for the first refresh function and then the program go into end. I tried some different approach such as adding time.sleep or systems.("pause") while still remains the problem. Do you have any advice on this? thanks!

import eikon as ek
import os
ek.set_app_key('key')

def display_fields_refresh(streaming_prices, instrument_name, fields):
    print("Fields refresh received for", instrument_name, ":", fields)
    print(streaming_prices)

def display_fields_update(streaming_prices, instrument_name, fields):
    print("Fields updated received for", instrument_name, ":", fields)

if __name__ == '__main__':
    streaming_prices = ek.StreamingPrices(
        instruments=['CNH='],
        fields=['SALTIM', 'CF_BID', 'CF_ASK', 'OPEN_PRC', 'CF_HIGH', 'CF_LOW', 'CF_CLOSE', 'VALUE_TS1'],
        on_refresh_refresh=lambda streaming_prices, instrument_name, fields:
        display_fields(streaming_prices, instrument_name, fields),
        on_update=lambda streaming_prices, instrument_name, fields:
        display_fields_update(streaming_prices, instrument_name, fields)
    )
    print("start streaming.......")
    streaming_prices.open()
    #time.sleep(5)
    #os.system('pause')
    #streaming_prices.close()
    print("stop streaming.......")
eikoneikon-data-apipythonrefinitiv-dataplatform-eikonworkspaceworkspace-data-apistreaming-prices
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.

Hello @lawrence.chiang,

Thank you for your participation in the forum. Is the reply below satisfactory in resolving your query? If yes, please click the 'Accept' text next to the reply. This will guide all community members who have a similar question. Otherwise please post again offering further insight into your question.

Thanks,

AHS

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
25.3k 87 12 25

Hi @lawrence.chiang

Can you please try replacing your time.sleep() / adding the following after the streaming_prices open()

streaming_prices.open() 
asyncio.get_event_loop().run_until_complete(asyncio.sleep(120))

OR something like

streaming_prices.open()
asyncio.get_event_loop().run_forever()

You will need to import asyncio off course


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
1 2 1 1

sorry, correct some code and provide you with the running result as below. thanks

def display_fields_refresh(streaming_prices, instrument_name, fields):
    print("Fields refresh received for", instrument_name, ":", fields)
    print(streaming_prices)


def display_fields_update(streaming_prices, instrument_name, fields):
    print("Fields updated received for", instrument_name, ":", fields)


if __name__ == '__main__':
    streaming_prices = ek.StreamingPrices(
        instruments=['CNH='],
        fields=['SALTIM', 'CF_BID', 'CF_ASK', 'OPEN_PRC', 'CF_HIGH', 'CF_LOW', 'CF_CLOSE', 'VALUE_TS1'],
        on_refresh=lambda streaming_prices, instrument_name, fields:
        display_fields_refresh(streaming_prices, instrument_name, fields),
        on_update=lambda streaming_prices, instrument_name, fields:
        display_fields_update(streaming_prices, instrument_name, fields)
    )
    print("start streaming.......")
    streaming_prices.open()
    # time.sleep(5)
    # os.system('pause')
    # streaming_prices.close()
    print("stop streaming.......")


start streaming.......

Fields refresh received for CNH= : {'CF_BID': 6.5174, 'CF_ASK': 6.518, 'OPEN_PRC': 6.516, 'CF_HIGH': 6.5327, 'CF_LOW': 6.5116, 'CF_CLOSE': 6.5165, 'VALUE_TS1': '11:05:25'}

<eikon.streaming_session.streamingprices.StreamingPrices object at 0x0000015B722631C8>

stop streaming.......


Process finished with exit code 0

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.

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.