real-time portfolio/market monitoring...

36
Signal Spotting Demo Package Real-Time Portfolio/Market Monitoring with R A Lightning Talk for R/Finance 2012 R. Michael Weylandt Princeton University GSOC 2012 [email protected] May 11, 2012 Michael Weylandt [email protected] Real-Time Portfolio/Market Monitoring with R

Upload: others

Post on 09-Aug-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Real-Time Portfolio/Market Monitoring with R

A Lightning Talk for R/Finance 2012

R. Michael Weylandt

Princeton UniversityGSOC 2012

[email protected]

May 11, 2012

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 2: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

So you’ve made the greatest strategy ever. . .

I Your Sharpe is 14+

I Your out-of-sample backtest is better than your training set

I Your only meaningful correlation is to the daily volume ofR-SIG-Finance You do subscribe, don’t you?

I Can R run your portfolio for you?

Probably

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 3: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

So you’ve made the greatest strategy ever. . .

I Your Sharpe is 14+

I Your out-of-sample backtest is better than your training set

I Your only meaningful correlation is to the daily volume ofR-SIG-Finance

You do subscribe, don’t you?

I Can R run your portfolio for you?

Probably

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 4: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

So you’ve made the greatest strategy ever. . .

I Your Sharpe is 14+

I Your out-of-sample backtest is better than your training set

I Your only meaningful correlation is to the daily volume ofR-SIG-Finance

You do subscribe, don’t you?

I Can R run your portfolio for you?

Probably

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 5: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

So you’ve made the greatest strategy ever. . .

I Your Sharpe is 14+

I Your out-of-sample backtest is better than your training set

I Your only meaningful correlation is to the daily volume ofR-SIG-Finance

You do subscribe, don’t you?

I Can R run your portfolio for you?

Probably

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 6: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

So you’ve made the greatest strategy ever. . .

I Your Sharpe is 14+

I Your out-of-sample backtest is better than your training set

I Your only meaningful correlation is to the daily volume ofR-SIG-Finance You do subscribe, don’t you?

I Can R run your portfolio for you?

Probably

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 7: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

So you’ve made the greatest strategy ever. . .

I Your Sharpe is 14+

I Your out-of-sample backtest is better than your training set

I Your only meaningful correlation is to the daily volume ofR-SIG-Finance You do subscribe, don’t you?

I Can R run your portfolio for you?

Probably

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 8: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

So you’ve made the greatest strategy ever. . .

I Your Sharpe is 14+

I Your out-of-sample backtest is better than your training set

I Your only meaningful correlation is to the daily volume ofR-SIG-Finance You do subscribe, don’t you?

I Can R run your portfolio for you?

Probably

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 9: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

After all. . .R> library(fortunes); fortune("pizza")

Roger D. Peng: I don’t think anyone actually believes that R is designed

to make *everyone* happy. For me, R does about 99% of the things I need

to do but sadly, when I need to order a pizza,

I still have to pick up the telephone.

Douglas Bates: There are several chains of pizzerias in the U.S. that

provide for Internet-based ordering (e.g. www.papajohnsonline.com) so,

with the Internet modules in R, it’s only a matter of time before you

will have a pizza-ordering function available.

Brian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface

under R for Windows, but Guido forgot to include it) provides one

for use in Sydney, Australia.

-- Roger D. Peng, Douglas Bates, and Brian D. Ripley

R-help (June 2004)

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 10: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

After all. . .R> library(fortunes); fortune("pizza")

Roger D. Peng: I don’t think anyone actually believes that R is designed

to make *everyone* happy. For me, R does about 99% of the things I need

to do but sadly, when I need to order a pizza,

I still have to pick up the telephone.

Douglas Bates: There are several chains of pizzerias in the U.S. that

provide for Internet-based ordering (e.g. www.papajohnsonline.com) so,

with the Internet modules in R, it’s only a matter of time before you

will have a pizza-ordering function available.

Brian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface

under R for Windows, but Guido forgot to include it) provides one

for use in Sydney, Australia.

-- Roger D. Peng, Douglas Bates, and Brian D. Ripley

R-help (June 2004)

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 11: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Signal Spotting

I quantmod::getQuote and quantmod::yahooQF

I quantstrat::add.signal

I ‘watch‘ <- function(tick, level, dir = c(">","<"))

ind <- match.fun(match.arg(dir))

if(ind(getQuote(tick, what = "l1")[[2]], level)){

print(if(ind == ‘>‘) "Sell" else "Buy", tick, "now!"))

return(TRUE)

}

return(FALSE)

}

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 12: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Signal Spotting

I quantmod::getQuote and quantmod::yahooQF

I quantstrat::add.signal

I ‘watch‘ <- function(tick, level, dir = c(">","<"))

ind <- match.fun(match.arg(dir))

if(ind(getQuote(tick, what = "l1")[[2]], level)){

print(if(ind == ‘>‘) "Sell" else "Buy", tick, "now!"))

return(TRUE)

}

return(FALSE)

}

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 13: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Signal Spotting

I quantmod::getQuote and quantmod::yahooQF

I quantstrat::add.signal

I ‘watch‘ <- function(tick, level, dir = c(">","<"))

ind <- match.fun(match.arg(dir))

if(ind(getQuote(tick, what = "l1")[[2]], level)){

print(if(ind == ‘>‘) "Sell" else "Buy", tick, "now!"))

return(TRUE)

}

return(FALSE)

}

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 14: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Signal Spotting

I quantmod::getQuote and quantmod::yahooQF

I quantstrat::add.signal

I ‘watch‘ <- function(tick, level, dir = c(">","<"))

ind <- match.fun(match.arg(dir))

if(ind(getQuote(tick, what = "l1")[[2]], level)){

print(if(ind == ‘>‘) "Sell" else "Buy", tick, "now!"))

return(TRUE)

}

return(FALSE)

}

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 15: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Signal Spotting: Background Sessions

I Use the OS to keep R looking for signals in the background(&)

I Printing to standard out will interrupt most terminal apps(including other R sessions)

I Rscript -e ’repeat{Sys.sleep(2); if(watch(tick, level, dir)){

print("There\’s gold in them thar\’ hills!"); break}}’ &

I More assertive: alert() or system(open Loud.mp3)

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 16: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Signal Spotting: Background Sessions

I Use the OS to keep R looking for signals in the background(&)

I Printing to standard out will interrupt most terminal apps(including other R sessions)

I Rscript -e ’repeat{Sys.sleep(2); if(watch(tick, level, dir)){

print("There\’s gold in them thar\’ hills!"); break}}’ &

I More assertive: alert() or system(open Loud.mp3)

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 17: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Signal Spotting: Background Sessions

I Use the OS to keep R looking for signals in the background(&)

I Printing to standard out will interrupt most terminal apps(including other R sessions)

I Rscript -e ’repeat{Sys.sleep(2); if(watch(tick, level, dir)){

print("There\’s gold in them thar\’ hills!"); break}}’ &

I More assertive: alert() or system(open Loud.mp3)

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 18: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Signal Spotting: Background Sessions

I Use the OS to keep R looking for signals in the background(&)

I Printing to standard out will interrupt most terminal apps(including other R sessions)

I Rscript -e ’repeat{Sys.sleep(2); if(watch(tick, level, dir)){

print("There\’s gold in them thar\’ hills!"); break}}’ &

I More assertive: alert() or system(open Loud.mp3)

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 19: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Signal Spotting: Background Sessions

I Use the OS to keep R looking for signals in the background(&)

I Printing to standard out will interrupt most terminal apps(including other R sessions)

I Rscript -e ’repeat{Sys.sleep(2); if(watch(tick, level, dir)){

print("There\’s gold in them thar\’ hills!"); break}}’ &

I More assertive: alert() or system(open Loud.mp3)

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 20: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Signal Spotting: Interactive Sessions

I Callback Mechanism

I Tricky to get a good balance between interactivity andreactivity

I I like to check every ≈ 20 callbacks:

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 21: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Signal Spotting: Interactive Sessions

I Callback Mechanism

I Tricky to get a good balance between interactivity andreactivity

I I like to check every ≈ 20 callbacks:

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 22: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Signal Spotting: Interactive Sessions

I Callback Mechanism

I Tricky to get a good balance between interactivity andreactivity

I I like to check every ≈ 20 callbacks:

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 23: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Signal Spotting: Interactive Sessions

I Callback Mechanism

I Tricky to get a good balance between interactivity andreactivity

I I like to check every ≈ 20 callbacks:

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 24: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Warning: black magic follows!

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 25: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Signal Spotting: Interactive SessionsaddWatch <- function(tick, level, dir = c(">","<"), skip = 20){

dir <- match.arg(dir)

name <- paste(tick, level, as.character(dir), skip, sep = "_")

dir <- match.fun(dir)

counter <- function(tick, level, dir, skip){

cnt <- 0

skip <- skip

watch <- function(tick = tick, level = level, dir = dir){

if(!(cnt %% skip)){

if(dir(getQuote(tick, what = "l1")[[2]],level)){

cat(if(identical(dir, ‘>‘)) "Sell" else "Buy", tick, "now!\n")

} else {

cat("No signal from",name,"\n")

}

}

}

function(expr, value, ok, visible){

cnt <<- cnt + 1

watch(tick, level, dir)

TRUE

}

}

addTaskCallback(counter(tick, level, dir, skip), name = name)

}

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 26: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Identifying Technical Indicators in Real-Time

Signal Spotting: Interactive Sessions

removeWatch <- function(){

cat("Select a Indicator Watch to remove: \n")

res <- menu(getTaskCallbackNames(), FALSE, NULL)

removeTaskCallback(res)

}

activeWatches <- function(){

getTaskCallbackNames()

}

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 27: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Demo

Demo

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 28: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Package Announcement

Forthcoming package

This functionality is at the core of a forthcoming package (alpharelease soon on R-Forge) designed to replicate the Bloombergterminal experience within R

Other tools include:

I an exe S3 class to replicate Bloomberg key commands

I support for compound indicators

I active portfolio monitoring tools

I attractive P&L reporting

I tight integration with quantstrat.

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 29: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Package Announcement

Forthcoming package

This functionality is at the core of a forthcoming package (alpharelease soon on R-Forge) designed to replicate the Bloombergterminal experience within R

Other tools include:

I an exe S3 class to replicate Bloomberg key commands

I support for compound indicators

I active portfolio monitoring tools

I attractive P&L reporting

I tight integration with quantstrat.

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 30: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Package Announcement

Forthcoming package

This functionality is at the core of a forthcoming package (alpharelease soon on R-Forge) designed to replicate the Bloombergterminal experience within R

Other tools include:

I an exe S3 class to replicate Bloomberg key commands

I support for compound indicators

I active portfolio monitoring tools

I attractive P&L reporting

I tight integration with quantstrat.

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 31: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Package Announcement

Forthcoming package

This functionality is at the core of a forthcoming package (alpharelease soon on R-Forge) designed to replicate the Bloombergterminal experience within R

Other tools include:

I an exe S3 class to replicate Bloomberg key commands

I support for compound indicators

I active portfolio monitoring tools

I attractive P&L reporting

I tight integration with quantstrat.

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 32: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Package Announcement

Forthcoming package

This functionality is at the core of a forthcoming package (alpharelease soon on R-Forge) designed to replicate the Bloombergterminal experience within R

Other tools include:

I an exe S3 class to replicate Bloomberg key commands

I support for compound indicators

I active portfolio monitoring tools

I attractive P&L reporting

I tight integration with quantstrat.

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 33: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Package Announcement

Forthcoming package

This functionality is at the core of a forthcoming package (alpharelease soon on R-Forge) designed to replicate the Bloombergterminal experience within R

Other tools include:

I an exe S3 class to replicate Bloomberg key commands

I support for compound indicators

I active portfolio monitoring tools

I attractive P&L reporting

I tight integration with quantstrat.

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 34: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Package Announcement

Thank you

Any questions?

I’m still looking for a witty name . . .

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 35: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Package Announcement

Thank you

Any questions?

I’m still looking for a witty name . . .

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R

Page 36: Real-Time Portfolio/Market Monitoring withpast.rinfinance.com/agenda/2012/talk/MichaelWeylandt.pdfBrian D. Ripley: Indeed, the GraphApp toolkit (used for the RGui interface under R

Signal Spotting Demo Package

Package Announcement

Thank you

Any questions?

I’m still looking for a witty name . . .

Michael Weylandt [email protected]

Real-Time Portfolio/Market Monitoring with R