[R-SIG-Finance] moving averages on specific interval and merge

Jim Green student.northwestern at gmail.com
Fri May 18 05:06:05 CEST 2012


Thanks Garret, it worked  correctly.

I found a similar question here at
http://r.789695.n4.nabble.com/Speed-optimization-on-minutes-distribution-calculation-td929537.html
and Jeff gave a very fast solution. Just for the reference.

Now I am attempting to write a custom indicator doing what you showed
to be used in quantstrat.

Jim.


On 12 May 2012 12:54, G See <gsee000 at gmail.com> wrote:
> Hi Jim,
>
> We prefer if you share with us what you tried and what you've done to
> attempt to solve the problem yourself.  Anyway here's one way to
> start.
>
> library(quantmod) # for the Vo function as well as xts and zoo
> load("~/Downloads/a.rda")
> CalcMinuteVolume <- function(x) {
>    # This function will calculate the average of the volume for a given minute
>    #of every day
>    mvolm <- aggregate(Vo(x), format(index(x), "%H:%M"), mean)
>    xts(coredata(mvolm), as.POSIXct(paste(as.Date(end(x)), index(mvolm)),
>        format="%Y-%m-%d %H:%M"))
> }
> dtemp <- to.daily(temp)
> index(dtemp) <- as.Date(index(dtemp)) # in case you have an old version of xts
> # make strings to use to subset the data by 10 day periods
> subsets <- rollapplyr(index(dtemp), 10, function(x)
>                        paste0(first(x), "/", last(x)))
> out <- lapply(subsets, function(ss) {
>    CalcMinuteVolume(temp[ss])
> })
> names(out) <- index(dtemp)[-c(1:9)] # days 1:9 were burned to calculate 1st mean
> # Now you have a list of days. e.g.
> out[["2012-02-15"]]
> # Now merge
> temp$Average.Volume.at.current.interval <- do.call(rbind, out)
> temp
> ########################################
>
> Things to consider:
> - You almost certainly want to throw a lag in there.
> - You have a different number of rows for different days.
>
> Also, see ?agrregate.zoo or ?tapply, ?rollapply, ?period.apply, and ?do.call
>
> HTH,
> Garrett
>
>
> On Thu, May 10, 2012 at 8:11 PM, Jim Green
> <student.northwestern at gmail.com> wrote:
>> Greetings!
>>
>> I am using quantstrat and xts to do some intraday work and come up
>> with this problem. the xts object temp in the following example is
>> attached as and rda file.
>>
>>> head(temp)
>>                    A.Open A.High  A.Low A.Close A.Volume
>> 2012-02-01 08:29:00  42.47  43.76 41.410   43.76     2071
>> 2012-02-01 09:30:00  43.38  43.38 42.970   43.15    40300
>> 2012-02-01 09:31:00  43.14  43.28 43.130   43.28    14990
>> 2012-02-01 09:32:00  43.27  43.37 43.270   43.37     3300
>> 2012-02-01 09:33:00  43.37  43.50 43.370   43.48     3056
>> 2012-02-01 09:34:00  43.49  43.50 43.396   43.44    10968
>>
>>> tail(temp)
>>                     A.Open  A.High   A.Low A.Close A.Volume
>> 2012-03-27 16:07:00 45.6650 45.6650 45.6650 45.6650      170
>> 2012-03-27 16:08:00 45.6710 45.6710 45.6710 45.6710      474
>> 2012-03-27 16:10:00 45.9131 45.9131 45.9131 45.9131     1800
>> 2012-03-27 16:13:00 45.6952 45.6952 45.6952 45.6952      300
>> 2012-03-27 16:15:00 45.9368 45.9368 45.9368 45.9368      791
>> 2012-03-27 16:21:00 45.7000 45.7000 45.7000 45.7000    22000
>>
>>
>> I would like to calculate moving averages of minute volume for
>> specific interval and merge with the original minute ohlc data.
>>
>> take 09:40:00 for example, calculate the average previous 10 days
>> volume between 09:39:00 to 09:40:00 and merge with exiting data.
>>
>> ultimately I want to get an xts object with columns
>>
>> Open   High   Low   Close   Volume   Average.Volume.at.current.interval
>> 2012-03-27 16:07:00 45.6650 45.6650 45.6650 45.6650      170   177
>> 2012-03-27 16:08:00 45.6710 45.6710 45.6710 45.6710      474  500
>> ...
>> ...
>> ..
>> 2012-03-27 16:21:00 45.7000 45.7000 45.7000 45.7000    22000 1000
>>
>> any pointers are appreciated!
>>
>> Jim.
>>
>> _______________________________________________
>> R-SIG-Finance at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>> -- Subscriber-posting only. If you want to post, subscribe first.
>> -- Also note that this is not the r-help list where general R questions should go.



More information about the R-SIG-Finance mailing list