Download Price of more instruments with DSWS

Hi want download price from list of code. But the datframe Price is empty


CodiceDatastream

MSACWFELBEURSELBGOBL$LGBDGCEIT0004782758LU1694212348FR0010149120LU0452734238LU0764816798



import numpy as np

import pandas as pd

import DatastreamDSWS as DSWS

ds = DSWS.Datastream(username="xxxxxxxxxxxx", password= "xxxxxxxxxxxx")

Codici = pd.read_excel('AnagraficaCodici.xlsx')

Codici['DatastreamRICs'] = Codici['CodiceDataStream']

ds_rics_str = Codici['DatastreamRICs'].str.cat(sep=',')

Price = ds.get_data(ds_rics_str, fields=['X(P)~EUR'], start='-5Y', end='0D', freq='D')

Tagged:

Best Answer

  • Shadab Hussain
    Answer ✓

    Hi @andrea.negri,

    Hope Jirapongse answer was helpful, I'm adding code snippets for few of the RICs below assuming start and end day by my own using which you can read the RICs name from the file, and request for the data from DSWS API:

    # Installing Packages
    import DatastreamDSWS as DSWS
    import pandas as pd
    import numpy as np
    import datetime
    from IPython.display import display
    pd.set_option('display.max_columns', None)
    pd.set_option('display.max_rows', None)

    # Loading RICs name from file
    stock_list = list(pd.read_excel("Sample.xlsx")['CodiceDataStream'])

    # Declaring Variables
    ds = DSWS.Datastream(username ="******", password='******')
    fields = ['(X)~EUR']
    final_df = pd.DataFrame()
    frames = []
    year = 2018
    start_day = 1
    end_day = 20
    month = 10
    start_date = datetime.datetime(year, month, start_day).strftime('%Y-%m-%d')
    end_date = datetime.datetime(year, month, end_day).strftime('%Y-%m-%d')


    for stock in stock_list:
    df = ds.get_data(tickers=stock,fields=fields,start=start_date, end=end_date)[stock].reset_index().droplevel('Currency', axis=1)
    df['Instrument'] = stock
    frames.append(df)

    temp_df = pd.concat(frames)
    final_df = temp_df.pivot_table(index='Dates', columns='Instrument', values=fields)
    final_df.columns = final_df.columns.swaplevel(0, 1)
    final_df.sort_index(axis=1, level=0, inplace=True)

    final_df.head()

    Below is the output I got:

    1651062475372.png

    Please change the parameters like fields, and start/end day based on the data you need.

    Adding complete code for @Jirapongse answers as well, in case you need it:

    # Installing Packages
    import DatastreamDSWS as DSWS
    import pandas as pd
    import numpy as np
    import datetime
    from IPython.display import display
    pd.set_option('display.max_columns', None)
    pd.set_option('display.max_rows', None)

    # Loading RICs name from file
    stock_list = ",".join(pd.read_excel("Sample.xlsx")['CodiceDataStream'])

    # Declaring Variables and Session Initialization
    ds = DSWS.Datastream(username ="******", password='******')
    fields = ['(X)~EUR']

    # Load Data
    df = ds.get_data(",".join(stock_list), fields=['(X)~EUR'], start='-1Y', end='0D', freq='D').reset_index().droplevel('Currency', axis=1)

    # Top 5 rows data
    df.head()

Answers