financial time-series tools - quantmodfinancial time-series tools xts and chartseries jeffrey a....

178
Financial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented by Jeffrey Ryan at: Rmetrics: Computational Finance and Financial Engineering Workshop June 29 - July 3, 2008, Meielisalp, Lake Thune, Switzerland www.quantmod.com/Rmetrics2008

Upload: others

Post on 15-Mar-2020

29 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Financial Time-Series Toolsxts and chartSeries

Jeffrey A. Ryanjeffrey.ryan @ insightalgo.com

Joshua M. Ulrichjoshua.m.ulrich @ gmail.com

Presented by Jeffrey Ryan at:Rmetrics: Computational Finance and Financial Engineering Workshop

June 29 - July 3, 2008, Meielisalp, Lake Thune, Switzerland

www.quantmod.com/Rmetrics2008

Page 2: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Thanks

Diethelm WuertzThe Rmetrics Foundation

Peter CarlBrian PetersonJoshua Ulrich

Gabor GrothendieckDirk Eddelbuettel

Page 3: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

• The Idea Behind xts• User Benefits• Developer Benefits• Summary

Part I - xts

• Why quantmod• getSymbols• chartSeries• Summary

Part II - quantmod

matrix

xtszoo

ts timeSeries

itsirts

vector

data.frame

Page 4: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

matrix

xtszoo

ts timeSeries

itsirts

vector

data.frame

Jeffrey A. Ryan and Joshua M. Ulrich

Extensible Time-Series

http://xts.r-forge.r-project.org

Page 5: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

The Idea

(from the xts DESCRIPTION file)

Provide for uniform handling of R's different time-based data classes, maximizing native format information preservation and allowing for user level customization and extension, while simplifying cross-class interoperability.

Page 6: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Simplify time-series data!

The IdeaProvide for uniform handling of R's different time-based data classes, maximizing native format information preservation and allowing for user level customization and extension, while simplifying cross-class interoperability.

(from the xts DESCRIPTION file)

Page 7: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

What is xts?

Page 8: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

What is xts?1. An S3 class extending zoo

Page 9: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

What is xts?1. An S3 class extending zoo

2. Requires indexing based on a recognized time-based class

Any of POSIXct, Date, chron, timeDate, yearmon, or yearqtr

Page 10: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

What is xts?1. An S3 class extending zoo

2. Requires indexing based on a recognized time-based class

Any of POSIXct, Date, chron, timeDate, yearmon, or yearqtr

3. Allows arbitrary hidden attributes with xtsAttributes

Page 11: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

What is xts?1. An S3 class extending zoo

2. Requires indexing based on a recognized time-based class

Any of POSIXct, Date, chron, timeDate, yearmon, or yearqtr

3. Allows arbitrary hidden attributes with xtsAttributes

4. Tools for lossless conversion among classes

as.xts, try.xts, reclass, and Reclass

Page 12: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Why use xts?

Page 13: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Why use xts?1. A true time-based version of the popular and robust zoo class

Page 14: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Why use xts?1. A true time-based version of the popular and robust zoo class

2. New behavior that accounts for time - subsetting, etc.

Page 15: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Why use xts?1. A true time-based version of the popular and robust zoo class

2. New behavior that accounts for time - subsetting, etc.

3. Flexibility to augment with custom hidden attributes - metadata

Page 16: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Why use xts?1. A true time-based version of the popular and robust zoo class

2. New behavior that accounts for time - subsetting, etc.

3. Flexibility to augment with custom hidden attributes - metadata

4. Smart conversion tools - use xts functionality with other classes

Page 17: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Why use xts?1. A true time-based version of the popular and robust zoo class

2. New behavior that accounts for time - subsetting, etc.

3. Flexibility to augment with custom hidden attributes - metadata

4. Smart conversion tools - use xts functionality with other classes

5. Time-based tools like fast aggregation, periodic functions, etc.

Page 18: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Why develop with xts?

Page 19: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Why develop with xts?1. A true time-based version of the popular and robust zoo class

2. New behavior that accounts for time - subsetting, etc.

3. Flexibility to augment with custom hidden attributes - metadata

4. Smart conversion tools - use xts functionality with other classes

5. Time-based tools like fast aggregation, periodic functions, etc.

Page 20: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Why develop with xts?1. A true time-based version of the popular and robust zoo class

2. New behavior that accounts for time - subsetting, etc.

3. Flexibility to augment with custom hidden attributes - metadata

4. Smart conversion tools - use xts functionality with other classes

5. Time-based tools like fast aggregation, periodic functions, etc.

6. Accept any time-based class in all your functions - without methods

Page 21: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Why develop with xts?1. A true time-based version of the popular and robust zoo class

2. New behavior that accounts for time - subsetting, etc.

3. Flexibility to augment with custom hidden attributes - metadata

4. Smart conversion tools - use xts functionality with other classes

5. Time-based tools like fast aggregation, periodic functions, etc.

6. Accept any time-based class in all your functions - without methods

7. Provide a seamless user experience - his choice of class instead of yours

Page 22: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Why develop with xts?1. A true time-based version of the popular and robust zoo class

2. New behavior that accounts for time - subsetting, etc.

3. Flexibility to augment with custom hidden attributes - metadata

4. Smart conversion tools - use xts functionality with other classes

5. Time-based tools like fast aggregation, periodic functions, etc.

6. Accept any time-based class in all your functions - without methods

7. Provide a seamless user experience - his choice of class instead of yours

8. Less data-specific coding and testing means more time to develop

Page 23: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Why develop with xts?1. A true time-based version of the popular and robust zoo class

2. New behavior that accounts for time - subsetting, etc.

3. Flexibility to augment with custom hidden attributes - metadata

4. Smart conversion tools - use xts functionality with other classes

5. Time-based tools like fast aggregation, periodic functions, etc.

6. Accept any time-based class in all your functions - without methods

7. Provide a seamless user experience - his choice of class instead of yours

8. Less data-specific coding and testing means more time to develop

Let’s start by looking at using xts...

Page 24: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Using xts

• as.xts()

• Time-based toolsfirst(), last(), [.xts, to.period(), and period.apply()

• reclass()

Page 25: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Create an object

• Convert automatically with as.xts():ts, data.frame, matrix, zoo, timeSeries, its, irts, and xts.

• Add additional meta-data with ... arg at construction, or with xtsAttributes

• xts() constructor also available

Page 26: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Create an object

• Convert automatically with as.xts():ts, data.frame, matrix, zoo, timeSeries, its, irts, and xts.

• Add additional meta-data with ... arg at construction, or with xtsAttributes

• xts() constructor also available

You now have a time-based object!

Page 27: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Time-based object means ...

Page 28: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Time-based object means ...

... time-aware tools!

Page 29: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

first and last

• Provide a time-based equivalent of head() and tail()

• Allow for natural-language subsetting

find the first or last ‘3 weeks’ or ‘5 months’ of a dataset, regardless of underlying periodicity. e.g. last(MSFT, ‘3 weeks’) works as well on minute data as it does on daily.

• Positive and negative indexing

‘-3 weeks’ returns all data except the first or last 3 weeks.

Page 30: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

[.xtsExtends the ISO 8601-style of range specification to the standard R-style

single-bracket subsetting mechanism using [from/to] or [from::to]

Page 31: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

[.xtsExtends the ISO 8601-style of range specification to the standard R-style

single-bracket subsetting mechanism using [from/to] or [from::to]

This works on any periodicity or index class!

Page 32: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

fast periodicity conversion

to.period allows for fast changes to the periodicity of univariate

and OHLC data.

Convert from one periodicity to another - e.g. daily to monthly,

or hourly to daily with one function.

Page 33: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

indexAt allows control of resultant index class and style. Possible option include startof,

firstof, lastof, endof, yearmon, and yearqtr

fast periodicity conversion

to.period allows for fast changes to the periodicity of univariate

and OHLC data.

Convert from one periodicity to another - e.g. daily to monthly,

or hourly to daily with one function.

Page 34: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

indexAt allows control of resultant index class and style. Possible option include startof,

firstof, lastof, endof, yearmon, and yearqtr

fast periodicity conversion

to.period allows for fast changes to the periodicity of univariate

and OHLC data.

Convert from one periodicity to another - e.g. daily to monthly,

or hourly to daily with one function.

Additional Wrappers:to.minutesto.hourlyto.daily

to.weeklyto.monthlyto.quarterly

to.yearly

Page 35: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Aggregate by period period.apply

Apply any function on specified periods.

apply.monthly(MSFT, function(x) mean(Hi(x)))returns the monthly average Hi for MSFT

Page 36: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Aggregate by period period.apply

Apply any function on specified periods.

apply.monthly(MSFT, function(x) mean(Hi(x)))returns the monthly average Hi for MSFT

Additional Wrappers: apply.daily, apply.weekly, apply.monthly, apply.quarterly, apply.yearly

Page 37: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

reclass and Reclass

Return data converted to xts with as.xts back to its original

class.

Page 38: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

reclass and Reclass

Return data converted to xts with as.xts back to its original

class.

Start with a timeSeries

Page 39: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

reclass and Reclass

Return data converted to xts with as.xts back to its original

class.

Start with a timeSeries

Convert to xts

Page 40: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

reclass and Reclass

Return data converted to xts with as.xts back to its original

class.

Start with a timeSeries

Convert to xts

xtsAttributes store meta-data

Page 41: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Convert back without losing information using reclass

converting back to timeSeries from xts maintains the original attributes, e.g. @title and

@documentation

Page 42: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

as.xts and reclass example

> getSymbols("SBUX",return='timeSeries')[1] "SBUX">

> is.timeSeries(SBUX)[1] TRUE>

download a timeSeries of SBUX

Page 43: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

as.xts and reclass example

> SBUX['2008-06']Error in `[.timeSeries`(SBUX, "2008-06") : subscript out of bounds

attempting to subset xts-style results in an error

Page 44: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

as.xts and reclass example

> x <- as.xts(SBUX)['2008-06']> x SBUX.Open SBUX.High SBUX.Low SBUX.Close SBUX.Volume SBUX.Adjusted2008-06-02 18.17 18.17 17.63 17.93 10877200 17.932008-06-03 17.93 18.13 17.40 17.75 13076200 17.752008-06-04 17.72 18.34 17.72 18.12 15915400 18.122008-06-05 18.15 18.52 18.01 18.52 13662400 18.522008-06-06 18.35 18.35 17.64 17.67 12236500 17.672008-06-09 17.71 18.20 17.37 17.52 16788400 17.522008-06-10 17.33 17.93 17.25 17.84 9761300 17.842008-06-11 17.94 17.94 17.55 17.57 11351100 17.572008-06-12 17.76 18.06 17.66 17.82 8571900 17.822008-06-13 17.95 18.20 17.83 18.17 10910400 18.172008-06-16 18.01 18.56 17.89 18.35 8295000 18.352008-06-17 18.37 18.47 18.07 18.12 6369500 18.122008-06-18 18.00 18.09 17.66 17.77 8452600 17.772008-06-19 17.73 18.06 17.38 17.99 9215800 17.992008-06-20 17.77 17.82 17.18 17.23 13066200 17.232008-06-23 17.26 17.49 16.27 16.30 19602100 16.302008-06-24 16.36 16.92 16.25 16.57 12763800 16.57

the solution?

first convert with as.xts

Page 45: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

as.xts and reclass example

> is.timeSeries(x)[1] FALSE> x <- reclass(x)> is.timeSeries(x)[1] TRUE> x SBUX.Open SBUX.High SBUX.Low SBUX.Close SBUX.Volume SBUX.Adjusted2008-06-02 18.17 18.17 17.63 17.93 10877200 17.932008-06-03 17.93 18.13 17.40 17.75 13076200 17.752008-06-04 17.72 18.34 17.72 18.12 15915400 18.122008-06-05 18.15 18.52 18.01 18.52 13662400 18.522008-06-06 18.35 18.35 17.64 17.67 12236500 17.672008-06-09 17.71 18.20 17.37 17.52 16788400 17.522008-06-10 17.33 17.93 17.25 17.84 9761300 17.842008-06-11 17.94 17.94 17.55 17.57 11351100 17.572008-06-12 17.76 18.06 17.66 17.82 8571900 17.822008-06-13 17.95 18.20 17.83 18.17 10910400 18.172008-06-16 18.01 18.56 17.89 18.35 8295000 18.352008-06-17 18.37 18.47 18.07 18.12 6369500 18.122008-06-18 18.00 18.09 17.66 17.77 8452600 17.772008-06-19 17.73 18.06 17.38 17.99 9215800 17.992008-06-20 17.77 17.82 17.18 17.23 13066200 17.232008-06-23 17.26 17.49 16.27 16.30 19602100 16.302008-06-24 16.36 16.92 16.25 16.57 12763800 16.57

then reclass back to timeSeries

Page 46: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

as.xts and reclass example

> is.timeSeries(x)[1] FALSE> x <- reclass(x)> is.timeSeries(x)[1] TRUE> x SBUX.Open SBUX.High SBUX.Low SBUX.Close SBUX.Volume SBUX.Adjusted2008-06-02 18.17 18.17 17.63 17.93 10877200 17.932008-06-03 17.93 18.13 17.40 17.75 13076200 17.752008-06-04 17.72 18.34 17.72 18.12 15915400 18.122008-06-05 18.15 18.52 18.01 18.52 13662400 18.522008-06-06 18.35 18.35 17.64 17.67 12236500 17.672008-06-09 17.71 18.20 17.37 17.52 16788400 17.522008-06-10 17.33 17.93 17.25 17.84 9761300 17.842008-06-11 17.94 17.94 17.55 17.57 11351100 17.572008-06-12 17.76 18.06 17.66 17.82 8571900 17.822008-06-13 17.95 18.20 17.83 18.17 10910400 18.172008-06-16 18.01 18.56 17.89 18.35 8295000 18.352008-06-17 18.37 18.47 18.07 18.12 6369500 18.122008-06-18 18.00 18.09 17.66 17.77 8452600 17.772008-06-19 17.73 18.06 17.38 17.99 9215800 17.992008-06-20 17.77 17.82 17.18 17.23 13066200 17.232008-06-23 17.26 17.49 16.27 16.30 19602100 16.302008-06-24 16.36 16.92 16.25 16.57 12763800 16.57

then reclass back to timeSeries

xts-style subsetting on a

timeSeries object!

Page 47: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

What is Reclass for?

Page 48: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

What is Reclass for?

Reclass attempts to take any function call and force it to return an object that matches the

class of the object you passed in.

Page 49: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

What is Reclass for?EMA from TTR returns a vector

Page 50: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

What is Reclass for?EMA from TTR returns a vector

Wrapped in Reclass, and the result is the original xts class

Page 51: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Developing with xts

Using xts internally to manage time-based data in your own

functions and packages.

Page 52: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Developing with xtsFour (4) options for handling R’s time-based classes in functions:

1) Write methods for all possible inputs

Page 53: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Developing with xtsFour (4) options for handling R’s time-based classes in functions:

1) Write methods for all possible inputs (9 classes!)

Data Classes:matrix,

data.frame, ts, zoo, its, irts,

timeSeries, xts, vectors

Time Classes:POSIXct,

POSIXlt, chron,Date, timeDate,

yearmon, yearqtr

Page 54: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Developing with xtsFour (4) options for handling R’s time-based classes in functions:

1) Write methods for all possible inputs

2) Choose one class to accept

Data Classes:matrix,

data.frame, ts, zoo, its, irts,

timeSeries, xts, vectors

Time Classes:POSIXct,

POSIXlt, chron,Date, timeDate,

yearmon, yearqtr

Page 55: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Developing with xtsFour (4) options for handling R’s time-based classes in functions:

1) Write methods for all possible inputs

2) Choose one class to accept3) Convert internally to ... (matrix?)

Data Classes:matrix,

data.frame, ts, zoo, its, irts,

timeSeries, xts, vectors

Time Classes:POSIXct,

POSIXlt, chron,Date, timeDate,

yearmon, yearqtr

Page 56: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Developing with xtsFour (4) options for handling R’s time-based classes in functions:

1) Write methods for all possible inputs

2) Choose one class to accept3) Convert internally to ... (matrix?)4) Use xts functions to manage the

process

Data Classes:matrix,

data.frame, ts, zoo, its, irts,

timeSeries, xts, vectors

Time Classes:POSIXct,

POSIXlt, chron,Date, timeDate,

yearmon, yearqtr

Page 57: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

try.xts and reclass

• Accept all common time-series in R• Manage one type of object internally• Return original class to the user

Two simple functions let you...

Page 58: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

try.xts and reclassTwo simple functions let you...

which translates to...

• Less code to write and maintain• Increased reliability and flexibility• Freedom to focus on core development tasks

• Accept all common time-series in R• Manage one type of object internally• Return original class to the user

Page 59: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

try.xts

Use is.xts to test and branch if desiredConvert, if possible, an incoming object to xts

Page 60: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

try.xtsConvert, if possible, an incoming object to xts

Use is.xts to test and branch if desired

reclassConvert, if possible, back to the original class

... an example?

Page 61: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

period.apply using try.xts & reclass

period.apply <-function (x, INDEX, FUN, ...) { x <- try.xts(x, error = FALSE) FUN <- match.fun(FUN) xx <- sapply(1:(length(INDEX) - 1), function(y) { FUN(x[(INDEX[y] + 1):INDEX[y + 1]], ...) }) reclass(xx, x[INDEX])}

Page 62: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

period.apply <-function (x, INDEX, FUN, ...) { x <- try.xts(x, error = FALSE) FUN <- match.fun(FUN) xx <- sapply(1:(length(INDEX) - 1), function(y) { FUN(x[(INDEX[y] + 1):INDEX[y + 1]], ...) }) reclass(xx, x[INDEX])}

period.apply using try.xts & reclass

Two simple additions allows the period.apply functionto accept, and ultimately return, any class of time-seriesobject. By setting error=FALSE, it is even possibleto accept non-xts coercible args. Truly universal dataacceptance.

Page 63: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Using try.xts

try.xts(x, ..., error = FALSE)

incoming data

using the incoming data, attempt to convert

Page 64: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Using try.xts

try.xts(x, ..., error = FALSE)

passed to xts()

add any additional args to xts constructor

Page 65: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Using try.xts

try.xts(x, ..., error = FALSE)

failure OK?

FALSE means success isn’t required

Page 66: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Using reclass

the result before converting

first argument - result of internal calculations

reclass(xx, match.to=x)

Page 67: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Using reclass

reclass(xx, match.to=x)

second argument - the original object (more or less)

the original result from try.xts

Page 68: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Using reclass

reclass(xx, match.to=x)

second argument - the original object (more or less)

the original result from try.xts

the match.to argument is the template for re-indexing as an xts object.

Page 69: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

period.apply <-function (x, INDEX, FUN, ...) { x <- try.xts(x, error = FALSE) FUN <- match.fun(FUN) xx <- sapply(1:(length(INDEX) - 1), function(y) { FUN(x[(INDEX[y] + 1):INDEX[y + 1]], ...) }) reclass(xx, x[INDEX])}

Put it all together

Using try.xts and reclass

Page 70: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

period.apply <-function (x, INDEX, FUN, ...) { x <- try.xts(x, error = FALSE) FUN <- match.fun(FUN) xx <- sapply(1:(length(INDEX) - 1), function(y) { FUN(x[(INDEX[y] + 1):INDEX[y + 1]], ...) }) reclass(xx, x[INDEX])}

Put it all together

try.xts

Attempt to convert to xts, if not possible - continue on. In this case, it isn’t necessary that we have an xts object, it is only to provide the user with a seemless experience

Page 71: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

period.apply <-function (x, INDEX, FUN, ...) { x <- try.xts(x, error = FALSE) FUN <- match.fun(FUN) xx <- sapply(1:(length(INDEX) - 1), function(y) { FUN(x[(INDEX[y] + 1):INDEX[y + 1]], ...) }) reclass(xx, x[INDEX])}

Put it all together

main calculations

Proceed with function work. It is important to keep the original x variable untouched, otherwise the data may be lost or corrupted by non-xts aware functions

Page 72: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

period.apply <-function (x, INDEX, FUN, ...) { x <- try.xts(x, error = FALSE) FUN <- match.fun(FUN) xx <- sapply(1:(length(INDEX) - 1), function(y) { FUN(x[(INDEX[y] + 1):INDEX[y + 1]], ...) }) reclass(xx, x[INDEX])}

Put it all together

reclass

xx is the result of the function call, before attempting the reclass. In this case the data is shorter than the original, and must be modified for reclass to work correctly.

Page 73: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

xts Summary

Page 74: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

xts Summary

• zoo modified for time

Page 75: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

xts Summary

• zoo modified for time

• new time-aware tools

Page 76: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

xts Summary

• zoo modified for time

• new time-aware tools

• increased developer productivity

Page 77: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

xts Summary

• zoo modified for time

• new time-aware tools

• increased developer productivity

Now on to quantmod and charts!

Page 78: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

quantmodJeffrey A. Ryan

www.quantmod.com

quantmod.r-forge.r-project.org

Page 79: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

PurposeProvide a single, unified R-based workflow.

Page 80: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

PurposeProvide a single, unified R-based workflow.

Data (getSymbols)

Page 81: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

PurposeProvide a single, unified R-based workflow.

Data (getSymbols)

Visuals (chartSeries)

Page 82: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

PurposeProvide a single, unified R-based workflow.

Data (getSymbols)

Visuals (chartSeries)

Model (buildModel)

Page 83: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

PurposeProvide a single, unified R-based workflow.

Data (getSymbols)

Visuals (chartSeries)

Model (buildModel)

Test (tradeModel)

Page 84: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

PurposeProvide a single, unified R-based workflow.

Data (getSymbols)

Visuals (chartSeries)

Model (buildModel)

Test (tradeModel)

Today’s presentation

Page 85: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Single Data InterfacegetSymbols

• One wrapper function for all data sources

• Extensible by simple naming convention

• auto.assign into specified environment

• Settable return class

Page 86: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

getSymbols

oandaFRED

(Federal Reserve Bank of St. Louis)

RData/rda

Yahoo! Finance Google Finance MySQL

SQLite csv IBrokers

Page 87: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

getSymbols

getSymbols.yahoo

getSymbols(“SBUX”, src = ‘yahoo’)

Page 88: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

getSymbols

getSymbols(“SBUX”, src = ‘yahoo’)

getSymbols.yahoo

Simple to extend to other data sources

Page 89: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Example 1Download data from Yahoo!

Specify src = “yahoo” to getSymbols call

Page 90: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Example 1Download data from Yahoo!

showSymbols returns information on what has been loaded

Specify src = “yahoo” to getSymbols call

Page 91: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Example 1IDownload from FRED and Google in one call

Use setSymbolLookup to change default source for certain symbols

Page 92: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Example 1IDownload from FRED and Google in one call

Use setSymbolLookup to change default source for certain symbols

JPY/USD YHOO

from Federal Reserve Bankof St. Louis FRED

from Google Finance

loads...

Page 93: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Additional Data Tools

Page 94: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Additional Data Tools

• getQuoteget highly configurable quotes from Yahoo! and others

Page 95: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Additional Data Tools

• getQuoteget highly configurable quotes from Yahoo! and others

• getFinancialsretrieve fundamental data from Google/Reuters

Page 96: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Additional Data Tools

• getQuoteget highly configurable quotes from Yahoo! and others

• getFinancialsretrieve fundamental data from Google/Reuters

• getFX & getMetalsGet currency and metal prices from Oanda.com

Page 97: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Additional Data Tools

• getQuoteget highly configurable quotes from Yahoo! and others

• getFinancialsretrieve fundamental data from Google/Reuters

• getFX & getMetalsGet currency and metal prices from Oanda.com

• getDividendsGet dividend data from Yahoo!

Page 98: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Additional Data Tools

• getQuoteget highly configurable quotes from Yahoo! and others

• getFinancialsretrieve fundamental data from Google/Reuters

• getFX & getMetalsGet currency and metal prices from Oanda.com

Now, on to the charts...

Page 99: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

VisualizationchartSeries

Page 100: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Charting in R

Page 101: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Charting in RMost time-series plotting in R is derived

from standard line charts

Page 102: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Charting in RMost time-series plotting in R is derived

from standard line charts

from stats

Page 103: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Charting in RMost time-series plotting in R is derived

from standard line charts

from zoo

Page 104: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Charting in RMost time-series plotting in R is derived

from standard line charts

from tseries and fTrading

Page 105: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Charting in RMost time-series plotting in R is derived

from standard line charts

from xts

Page 106: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Charting in RMost time-series plotting in R is derived

from standard line charts

from xts

All useful, but not really financial charts

Page 107: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Charting in RMost time-series plotting in R is derived

from standard line charts

from xts

An example posted toaddictedtor.free.fr by

Dirk Eddelbuettel shows what is possible with some 200+

lines of code...

Page 108: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Charting in R

Page 109: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Charting in R

chartSeries makes it easier...

Page 110: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

chartSeries(IBM,TA='addBBands();addBBands(draw="p");addVo()',subset='2008')

Page 111: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

chartSeries(IBM,TA='addBBands();addBBands(draw="p");addVo()',subset='2008')

1 line of code

Page 112: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

chartSeries• Overview

Page 113: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

chartSeries• Overview

• Customizing the lookchartTheme and reChart

Page 114: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

chartSeries• Overview

• Customizing the lookchartTheme and reChart

• zoomChart and zooom

Page 115: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

chartSeries• Overview

• Customizing the lookchartTheme and reChart

• zoomChart and zooom

• Adding TA indicatorsBuilt-inad-hoc additions with addTAcustom indicators with newTA

Page 116: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Overview

Page 117: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Overview

• Works interactively or from scripts

Page 118: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Overview

• Works interactively or from scripts

• Built-in facility for bars, candles, and lines

Page 119: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Overview

• Works interactively or from scripts

• Built-in facility for bars, candles, and lines

• Manages layout dynamically

Page 120: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Overview

• Works interactively or from scripts

• Built-in facility for bars, candles, and lines

• Manages layout dynamically

• Add and remove elements at will

Page 121: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Overview

• Works interactively or from scripts

• Built-in facility for bars, candles, and lines

• Manages layout dynamically

• Add and remove elements at will

• Highly configurable

Page 122: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Overview

• Works interactively or from scripts

• Built-in facility for bars, candles, and lines

• Manages layout dynamically

• Add and remove elements at will

• Highly configurable

• Fully extensible

Page 123: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

chartSeries can draw 3 styles of charts

lineChart(IBM, subset='last 4 months',TA=NULL)

lines

Page 124: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

barChart(IBM, subset='last 4 months',TA=NULL)

chartSeries can draw 3 styles of charts

ohlc & hlc bars

Page 125: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

candleChart(IBM, subset='last 4 months',TA=NULL)

chartSeries can draw 3 styles of charts

candlesticks

Page 126: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

chartTheme

Charts use “themes” to coordinate colorsusing the theme argument to chartSeries

Page 127: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

theme = chartTheme(“white”)

Page 128: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

theme = chartTheme(“black”)

Page 129: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

theme = chartTheme(“white.mono”)

Page 130: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

theme = chartTheme(“black.mono”)

Page 131: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

theme = chartTheme(“beige”)

Page 132: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Easy to modify themes

Page 133: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

> # create a new theme> blackandred <- chartTheme(up.col='white',dn.col='red',+ area='#080808',bg.col='#000000')> > candleChart(IBM, theme=blackandred, subset='2008')

Page 134: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

> # create a new theme> blackandred <- chartTheme(up.col='white',dn.col='red',+ area='#080808',bg.col='#000000')> > candleChart(IBM, theme=blackandred, subset='2008')

Page 135: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Modify drawn charts with reChart

Page 136: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Modify drawn charts with reChart

> reChart(theme=‘white’, type=’bars’)

Page 137: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Modify drawn charts with reChart

> reChart(theme=‘white’, type=’bars’)

Works for most chartSeries args!

Page 138: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

zoomChart(and zooom)

Page 139: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

zoomChart(and zooom)

Functions to zoom-in and zoom-outof a chart

Page 140: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

all of 2007

zoomChart(and zooom)

Page 141: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

zoomChart(and zooom)

> zoomChart(‘2008’)

Page 142: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

now 2008!zoomChart

(and zooom)

Page 143: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

now 2008!zoomChart

(and zooom)

Works just like subsetting in xts

Page 144: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Chart AdditionsAdding data to charts is easy and fast

Page 145: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Chart AdditionsAdding data to charts is easy and fast

Using the TA argument to chartSeries

Page 146: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Chart AdditionsAdding data to charts is easy and fast

Using the TA argument to chartSeries

Interactively with addTA and friends

Page 147: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Adding with TA=TA stands for (T)echnical (A)analysis

Built-in TA functionality from quantmod and TTR

addADX addATR addBBands

addCCI addCMF addCMO

addDEMA addDPO addEMA

addEnvelope addEVWMA addExpiry

addMACD addMomentum addROC

addRSI addSAR addSMI

addTRIX addVo addWMA

addWPR addZLEMA more to come!!!!

Page 148: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Adding with TA=chartSeries(IBM, TA=NULL)

Page 149: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Adding with TA=chartSeries(IBM, TA=NULL)

By default TA=“addVo()”,setting to NULL causes just the price

series to be displayed

Page 150: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Adding with TA=chartSeries(IBM, TA = “addMACD();addBBands()”)

Page 151: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Adding with TA=chartSeries(IBM, TA = “addMACD();addBBands()”)

Page 152: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Adding with TA=chartSeries(IBM, TA = “addMACD();addBBands()”)

> zoomChart(‘2008’)

Page 153: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Adding with TA=chartSeries(IBM, TA = “addMACD();addBBands()”)

zooming works too!

Page 154: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Adding interactivelychartSeries(IBM, TA=NULL)

Page 155: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Adding interactivelychartSeries(IBM, TA=NULL)

> addBBands()

Page 156: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Adding interactivelyNow with Bollinger Bands under the series

Page 157: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Adding interactively

> addDPO()

Page 158: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Adding interactivelyWith a De-trended Price Oscillator

Page 159: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Custom TA

Page 160: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Custom TA

addTAadd data directly to a chart

Page 161: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Custom TA

addTAadd data directly to a chart

newTAcreate new TA functions easily

Page 162: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

addTA

Provide a mechanism to create TA additionson-demand, using only raw data

Page 163: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

addTAThe newest TTR package includes a volatility function

to calculate different measures of volatility

Page 164: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

addTA

e.g. volatility(OHLC(IBM), calc = ‘garman.klass’)

The newest TTR package includes a volatility functionto calculate different measures of volatility

Page 165: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

addTA

e.g. volatility(OHLC(IBM), calc = ‘garman.klass’)

returns the Garman-Klass volatility

The newest TTR package includes a volatility functionto calculate different measures of volatility

Page 166: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

addTATo add this to the IBM chart:

Page 167: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

addTATo add this to the IBM chart:

> addTA(volatility(OHLC(IBM),calc=‘garman.klass’),col=3)

Page 168: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

addTAThe result is displayed just like any built-in TA

Page 169: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

addTA

What if you want something simple &more flexible like addVolatility()?

The result is displayed just like any built-in TA

Page 170: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

newTA

Provide a mechanism to create functional TA additionsbased on user functions

Page 171: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

newTA

> addVolatility <- newTA(volatility, preFUN=OHLC, col=4,lwd=2)>> class(addVolatility)[1] “function”>

newTA automatically creates the code needed!

Page 172: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

newTAsimply call the new function

> addVolatility()

Page 173: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

newTAdone!

Page 174: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

quantmod Summary

Page 175: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

quantmod Summary

• single interface to data with getSymbols

Page 176: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

quantmod Summary

• single interface to data with getSymbols

• fast and flexible visualization in chartSeries

Page 177: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

quantmod Summary

• single interface to data with getSymbols

• fast and flexible visualization in chartSeries

• big plans for the future!

Page 178: Financial Time-Series Tools - quantmodFinancial Time-Series Tools xts and chartSeries Jeffrey A. Ryan jeffrey.ryan @ insightalgo.com Joshua M. Ulrich joshua.m.ulrich @ gmail.com Presented

Financial Time-Series Toolsxts and chartSeries

Jeffrey A. Ryanjeffrey.ryan @ insightalgo.com

Joshua M. Ulrichjoshua.m.ulrich @ gmail.com

Presented by Jeffrey Ryan at:Rmetrics: Computational Finance and Financial Engineering Workshop

June 29 - July 3, 2008, Meielisalp, Lake Thune, Switzerland

www.quantmod.com/Rmetrics2008