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

OHCL for customer interval through EIKON API in R

Is it possible to get OHCL data for customer intervals such as 45 days or 72 days instead of the standard daily, monthly, quarter, yearly etc.


rics <- list("BB.TO","AC.TO")
query_fields <- list("OPEN", "CLOSE", "HIGH", "LOW")

Want something like following in the interval parameters

mydata <- eikonapir::get_timeseries(  rics, fields = query_fields,  start_date = "2020-01-01T00:00:00",   end_date = "2020-11-01T00:00:00", interval = "42days"
eikoneikon-data-apirefinitiv-dataplatform-eikonworkspaceworkspace-data-apiinterval
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.

@azam.yahya123

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

Thanks,

-AHS

@azam.yahya123

Hi,

Please be informed that a reply has been verified as correct in answering the question, and marked as such.

Thanks,

AHS

Upvotes
Accepted
39.4k 77 11 27

@azam.yahya123

As requested, please find below the example

df = ek.get_timeseries('EUR=',['OPEN','HIGH','LOW','CLOSE'])
custom_int = '10D'
resampled_df = pd.DataFrame()
resampled_df['OPEN'] = df['OPEN'].resample(custom_int).ohlc()['open']
resampled_df['HIGH'] = df['HIGH'].resample(custom_int).max()
resampled_df['LOW'] = df['LOW'].resample(custom_int).min()
resampled_df['CLOSE'] = df['CLOSE'].resample(custom_int).ohlc()['close']
resampled_df
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
79.2k 251 52 74

@azam.yahya123

Refer to the Eikon Data APIs for Python - Reference Guide, the possible values for the interval are tick, minute, hour, daily, weekly, monthly, quarterly, yearly.

This also applies to Eikon Data API R.

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.

Upvote
39.4k 77 11 27

@azam.yahya123

To add to the response by @jirapongse.phuriphanvichai, to create OHLC timeseries with a custom frequency such as 45 days, you could resample daily timeseries. In Python pandas offers pandas.Series.resample method, which makes this task very easy. I'm not sure if R offers similar capability. If not, I'm sure it can be developed fairly easily. Or you could use reticulate to utilize pandas methods.

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.

Would be great if you can share reproducible example in Python for OHCL data with a custom interval.
Upvotes
79.2k 251 52 74

@azam.yahya123

Thank you @Alex Putkov. for sharing the code. I have tried to find the same function in R. The closest one is the to.period in XTS. However from my checking the date output looks strange.

Therefore, I have tried to implement the same function used to change the daily interval.

The function looks like:

ChangeDayIntervalMulRICs <- function(df, freq) {
  TIMESTAMP =  integer(0)
  class(TIMESTAMP) <- "Date"
  OPEN = c()
  HIGH = c()
  LOW = c()
  CLOSE = c()
  RIC = c()  
  for (p in unique(df$RIC)) {
      oneRIC = df[df$RIC == p,]
      firstDate = oneRIC[1,"TIMESTAMP"]
      lastDate = oneRIC[nrow(oneRIC),"TIMESTAMP"]
      intervalDate = firstDate + freq
        while(firstDate <= lastDate){
          temp = oneRIC[oneRIC$TIMESTAMP >= firstDate & oneRIC$TIMESTAMP < intervalDate,]
          TIMESTAMP = c(TIMESTAMP, firstDate)      
          OPEN = c(OPEN, temp[1,"OPEN"])     
          HIGH = c(HIGH, max(temp$HIGH))
          LOW = c(LOW, min(temp$LOW))
          CLOSE = c(CLOSE, temp[nrow(temp),"CLOSE"])
          RIC = c(RIC, p)
          firstDate = intervalDate
          intervalDate = intervalDate + freq
  }  
}       
  return(data.frame(TIMESTAMP,
                    OPEN,
                    HIGH,
                    LOW,
                    CLOSE,
                    RIC))
}

The code to use the function is:

rics <- list("BB.TO","AC.TO")
query_fields <- list("TIMESTAMP","OPEN","HIGH","LOW","CLOSE")
mydata <- eikonapir::get_timeseries(  rics, fields = query_fields,  
                                    start_date = "2020-01-01T00:00:00",   
                                    end_date = "2020-11-01T00:00:00",
                                    interval = "daily")
mydata$TIMESTAMP <- as.Date(mydata$TIMESTAMP,"%Y-%m-%d")
mydata$HIGH <- as.numeric(mydata$HIGH)
mydata$LOW <- as.numeric(mydata$LOW)
mydata$OPEN <- as.numeric(mydata$OPEN)
mydata$CLOSE <- as.numeric(mydata$CLOSE)
colnames(mydata)[[6]] <- "RIC"
mydata$RIC <- as.character(mydata$RIC)
ChangeDayIntervalMulRICs(mydata, 42)

1626662466721.png

This is the sample function so it is not fully tested. You need to verify the data before using it in the production.



1626662466721.png (35.4 KiB)
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.