import eikon as ek def check_eikon_data_download(error): if error is not None: ValueError('Could not download Eikon data! Something went wrong in Request!') def get_eikon_data_for_index(universe, dt, eikon_key=None, ric_codes=None, fund_flds=None, fperiod=None, isin=False, xl_name=None): if sum(x is None for x in [fund_flds, fperiod]) == 1: ValueError('Fundamental fields and list must both be defined!') if eikon_key is None: eikon_key = 'Need to set own key here...' ek.set_app_key(eikon_key) if ric_codes is None: static_flds = ['TR.IndexConstituentRIC', 'TR.IndexConstituentName'] inst_list, err_const = ek.get_data(instruments=universe, fields=static_flds, parameters={'SDate': dt, 'EDate': dt}) else: inst_list = ric_codes # get the list of stocks within the STOXX 600 universe... if isin: isin_list, err_isin = ek.get_data(instruments=inst_list.loc[:, 'Constituent RIC'].tolist(), fields=['TR.ISINCode', 'TR.SEDOL']) inst_list[isin_list.columns[1:]] = isin_list.iloc[:, 1:] if fperiod is not None: fund_data, err_fund = ek.get_data(instruments=inst_list.loc[:, 'Constituent RIC'].tolist(), fields=fund_flds, parameters={'SDate': dt, 'Period': fperiod}) else: fund_data, err_fund = ek.get_data(instruments=inst_list.loc[:, 'Constituent RIC'].tolist(), fields=fund_flds, parameters={'SDate': dt}) inst_list[fund_data.columns[1:]] = fund_data.iloc[:, 1:] # write this over into a spreadsheet if xl_name is not None: inst_list.to_excel(xl_name) return inst_list if __name__== '__main__': date = '2017-01-15' univ = ['.STOXX'] # get some fundamentals here... fund_fields = ['TR.EPSMean', 'TR.OperatingMarginPercent'] f_per = 'FY0' fund_data = get_eikon_data_for_index(univ, date, fund_flds=fund_fields, fperiod=f_per, isin=True) # get dividend yield data... div_yld = ['TR.DPSMeanYield'] f_per = 'FY1' div_yld = get_eikon_data_for_index(univ, date, ric_codes=fund_data.loc[:, ['Constituent RIC']], fund_flds=div_yld, fperiod=f_per, isin=False) # get Net Debt/EBITDA data... n_d_to_ebitda = ['TR.NetDebtToEBITDA'] net_debt_to_ebitda = get_eikon_data_for_index(univ, date, ric_codes=fund_data.loc[:, ['Constituent RIC']], fund_flds=n_d_to_ebitda, isin=False) #combine data... fund_data[div_yld.columns[1:]] = div_yld.iloc[:, 1:] fund_data[net_debt_to_ebitda.columns[1:]] = net_debt_to_ebitda.iloc[:, 1:] # write to excel... fund_data.to_excel('test_point-in-time.xlsx')