How do you pass on a date as an argument to get the list of s&p companies?

I have this code:

ek.get_data("0#.SPX(2017-05-05)", ["TR.CompanyName","TR.PriceClose(2017-05-05)"])

It returns the list the of the s&p500 companies on a given date with their close prices. However, I would like to pass on the dates like this instead:

date='2017-05-05'

ek.get_data("0#.SPX(date)", ["TR.CompanyName","TR.PriceClose(date)"])

But it returns:

HTTPError: 400 Bad Request

Also how can I add the date as a column?

Any suggestion would be much appreciated.

Best Answer

  • You made a general programming syntax error. The variable named date is not evaluated in your expression

    ek.get_data("0#.SPX(date)", ["TR.CompanyName","TR.PriceClose(date)"]) 

    because it is enclosed in double quotes. "0#.SPX(date)" is a string and the substring "date" within it has no relation to your variable named "date". To get the date value from a variable named "date" use the following syntax

    ek.get_data("0#.SPX(" + date + ")", ["TR.CompanyName","TR.PriceClose(" + date + ")"])

Answers

  • Hi,

    You can try this :

    date="2017-05-05"
    indice="0#.SPX(" + date + ")"
    ek.get_data(indice, ["TR.CompanyName","TR.PriceClose"], {"SDate":date})
  • Thank you. Both answers worked for me. Accepted the first one because it has one less step.

    Any way I can add the date as another column in the code?

    @Alex Putkov. @pierre.faurel

  • Since you already have the date before you even retrieve the data you can easily append it to the dataframe of retrieved data as a new column:

    import eikon as ek
    import pandas as p
    date='2017-05-05'
    df, err = ek.get_data("0#.SPX(" + date + ")", ["TR.CompanyName","TR.PriceClose(" + date + ")"])
    df = df.assign(Date=p.Series(date, index=df.index).values)
    print(df)

    But if for whatever reason you'd like to get the date returned from the Web service providing the data, you can add TR.PriceClose.date to the list of fields:

    ek.get_data("0#.SPX(" + date + ")", ["TR.PriceClose(" + date + ").date", "TR.CompanyName","TR.PriceClose(" + date + ")"])