[Returnanalytics-commits] r3363 - pkg/PortfolioAnalytics/sandbox/RFinance2014

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Fri Apr 11 07:50:24 CEST 2014


Author: rossbennett34
Date: 2014-04-11 07:50:24 +0200 (Fri, 11 Apr 2014)
New Revision: 3363

Added:
   pkg/PortfolioAnalytics/sandbox/RFinance2014/makefile
   pkg/PortfolioAnalytics/sandbox/RFinance2014/optimization_analysis.R
Removed:
   pkg/PortfolioAnalytics/sandbox/RFinance2014/presentation.html
Log:
Adding makefile and data analysis script

Added: pkg/PortfolioAnalytics/sandbox/RFinance2014/makefile
===================================================================
--- pkg/PortfolioAnalytics/sandbox/RFinance2014/makefile	                        (rev 0)
+++ pkg/PortfolioAnalytics/sandbox/RFinance2014/makefile	2014-04-11 05:50:24 UTC (rev 3363)
@@ -0,0 +1,44 @@
+# http://robjhyndman.com/hyndsight/makefiles/
+# https://www.cs.umd.edu/class/fall2002/cmsc214/Tutorial/makefile.html
+
+# List out the R files used
+RFILES := data_analysis.R optimize.R optimization_analysis.R
+
+# Rout indicator files to show R file has run
+OUT_FILES:= $(RFILES:.R=.Rout)
+
+
+all: slidy_presentation.html presentation.Rmd $(OUT_FILES)
+
+# Generate slidy presentation from markdown file
+slidy_presentation.html: presentation.md
+	pandoc -t slidy -s presentation.md -o slidy_presentation.html
+
+# Generate markdown file from R markdown file
+presentation.md: presentation.Rmd
+	Rscript -e "library(knitr); knit('presentation.Rmd')"
+
+# Data analysis script
+data_analysis.Rout: data_analysis.R
+	R CMD BATCH data_analysis.R
+
+# Optimization analysis script to analyze results of optimization
+optimization_analysis.Rout: optimization_analysis.R optimize.R
+	R CMD BATCH optimization_analysis.R
+
+# Run optimizations
+optimize.Rout: optimize.R
+	R CMD BATCH optimize.R
+
+lwShrink.Rout: R/lwShrink.R
+	R CMD BATCH R/lwShrink.R
+
+# Use Rscript to run the necessary R files as an alternative to R CMD BATCH
+run:
+	Rscript data_analysis.R
+	Rscript optimize.R
+	Rscript optimization_analysis.R
+
+clean:
+	rm *.Rout
+	rm *.html
\ No newline at end of file

Added: pkg/PortfolioAnalytics/sandbox/RFinance2014/optimization_analysis.R
===================================================================
--- pkg/PortfolioAnalytics/sandbox/RFinance2014/optimization_analysis.R	                        (rev 0)
+++ pkg/PortfolioAnalytics/sandbox/RFinance2014/optimization_analysis.R	2014-04-11 05:50:24 UTC (rev 3363)
@@ -0,0 +1,170 @@
+library(PortfolioAnalytics)
+library(methods)
+
+# Set the directory where the optimization results are saved
+results.dir <- "optimization_results"
+figures.dir <- "optimization_figures"
+
+
+##### Example 1 #####
+load(paste(results.dir, "opt.minVarSample.rda", sep="/"))
+load(paste(results.dir, "opt.minVarLW.rda", sep="/"))
+
+# Chart the weights through time
+png(paste(figures.dir, "weights_minVarSample.png", sep="/"))
+chart.Weights(opt.minVarSample, main="minVarSample Weights", legend.loc=NULL)
+dev.off()
+
+png(paste(figures.dir, "weights_minVarLW.png", sep="/"))
+chart.Weights(opt.minVarLW, main="minVarLW Weights", legend.loc=NULL)
+dev.off()
+
+# Compute the returns and chart the performance summary
+ret.minVarSample <- summary(opt.minVarSample)$portfolio_returns
+ret.minVarRobust <- summary(opt.minVarLW)$portfolio_returns
+ret.minVar <- cbind(ret.minVarSample, ret.minVarRobust)
+colnames(ret.minVar) <- c("Sample", "LW")
+
+png(paste(figures.dir, "ret_minVar.png", sep="/"))
+charts.PerformanceSummary(ret.minVar)
+dev.off()
+
+##### Example 2 #####
+load(paste(results.dir, "opt.dn.rda", sep="/"))
+
+png(paste(figures.dir, "opt_dn.png", sep="/"))
+plot(opt.dn, main="Dollar Neutral Portfolio", risk.col="StdDev", neighbors=10)
+dev.off()
+
+
+# chart.RiskReward(opt, risk.col="StdDev", neighbors=25)
+# chart.Weights(opt, plot.type="bar", legend.loc=NULL)
+# wts <- extractWeights(opt)
+# t(wts) %*% betas
+# sum(abs(wts))
+# sum(wts[wts > 0])
+# sum(wts[wts < 0])
+# sum(wts != 0)
+
+##### Example 3 #####
+load(file=paste(results.dir, "opt.minES.rda", sep="/"))
+load(file=paste(results.dir, "bt.opt.minES.rda", sep="/"))
+
+# ES(R, portfolio_method="component", weights=extractWeights(opt.minES[[1]]))
+# extractObjectiveMeasures(opt.minES)
+
+# extract objective measures, out, and weights 
+xtract <- extractStats(opt.minES)
+
+# get the 'mean' and 'ES' columns from each element of the list
+xtract.mean <- unlist(lapply(xtract, function(x) x[,"mean"]))
+xtract.ES <- unlist(lapply(xtract, function(x) x[,"ES"]))
+
+
+png(paste(figures.dir, "opt_minES.png", sep="/"))
+# plot the feasible space
+par(mar=c(7,4,4,1)+0.1)
+plot(xtract.ES, xtract.mean, col="gray", 
+     xlab="ES", ylab="Mean",
+     ylim=c(0.005, 0.008),
+     xlim=c(0.015, 0.085))
+
+# min ES
+points(x=opt.minES[[1]]$objective_measures$ES$MES,
+       y=opt.minES[[1]]$objective_measures$mean,
+       pch=15, col="purple")
+text(x=opt.minES[[1]]$objective_measures$ES$MES,
+     y=opt.minES[[1]]$objective_measures$mean,
+     labels="Min ES", pos=1, col="purple", cex=0.8)
+
+# min ES with risk budget upper limit on component contribution to risk
+points(x=opt.minES[[2]]$objective_measures$ES$MES,
+       y=opt.minES[[2]]$objective_measures$mean,
+       pch=15, col="black")
+text(x=opt.minES[[2]]$objective_measures$ES$MES,
+     y=opt.minES[[2]]$objective_measures$mean,
+     labels="Min ES RB", pos=4, col="black", cex=0.8)
+
+# min ES with equal (i.e. min concentration) component contribution to risk
+points(x=opt.minES[[3]]$objective_measures$ES$MES,
+       y=opt.minES[[3]]$objective_measures$mean,
+       pch=15, col="darkgreen")
+text(x=opt.minES[[3]]$objective_measures$ES$MES,
+     y=opt.minES[[3]]$objective_measures$mean,
+     labels="Min ES EqRB", pos=4, col="darkgreen", cex=0.8)
+# par(mar=c(7,4,4,1)+0.1)
+dev.off()
+
+# Chart the risk contribution
+#chart.RiskBudget(opt.minES[[1]], risk.type="percentage", neighbors=10)
+png(paste(figures.dir, "rb_minES.png", sep="/"))
+chart.RiskBudget(opt.minES[[2]], main="Risk Budget Limit", 
+                 risk.type="percentage", neighbors=10)
+dev.off()
+
+png(paste(figures.dir, "eqrb_minES.png", sep="/"))
+chart.RiskBudget(opt.minES[[3]], main="Equal ES Component Contribution", 
+                 risk.type="percentage", neighbors=10)
+dev.off()
+
+# Plot the risk contribution through time
+png(paste(figures.dir, "risk_minES.png", sep="/"))
+chart.RiskBudget(bt.opt.minES[[1]], main="Min ES Risk Contribution", 
+                 risk.type="percentage")
+dev.off()
+
+png(paste(figures.dir, "risk_minESRB.png", sep="/"))
+chart.RiskBudget(bt.opt.minES[[2]], main="Min ES RB Risk Contribution",
+                 risk.type="percentage")
+dev.off()
+
+png(paste(figures.dir, "risk_minESEqRB.png", sep="/"))
+chart.RiskBudget(bt.opt.minES[[3]], main="Min ES EqRB Risk Contribution",
+                 risk.type="percentage")
+dev.off()
+
+# Extract the returns from each element and chart the performance summary
+ret.bt.opt <- do.call(cbind, lapply(bt.opt.minES, 
+                                    function(x) summary(x)$portfolio_returns))
+colnames(ret.bt.opt) <- c("min ES", "min ES RB", "min ES Eq RB")
+
+png(paste(figures.dir, "ret_minES.png", sep="/"))
+charts.PerformanceSummary(ret.bt.opt)
+dev.off()
+
+##### Example 4 #####
+load(file=paste(results.dir, "opt.crra.rda", sep="/"))
+load(file=paste(results.dir, "bt.opt.crra.rda", sep="/"))
+
+CRRA <- function(R, weights, lambda, sigma, m3, m4){
+  weights <- matrix(weights, ncol=1)
+  M2.w <- t(weights) %*% sigma %*% weights
+  M3.w <- t(weights) %*% m3 %*% (weights %x% weights)
+  M4.w <- t(weights) %*% m4 %*% (weights %x% weights %x% weights)
+  term1 <- 0.5 * lambda * M2.w
+  term2 <- (1 / 6) * lambda * (lambda + 1) * M3.w
+  term3 <- (1 / 24) * lambda * (lambda + 1) * (lambda + 2) * M4.w
+  out <- -term1 + term2 - term3
+  out
+}
+
+# Chart the optimization in Risk-Reward space
+png(paste(figures.dir, "crra_RR.png", sep="/"))
+par(mfrow=c(1,2))
+chart.RiskReward(opt.crra, risk.col="ES")
+# dev.off()
+
+# png(paste(figures.dir, "crra_minES.png", sep="/"))
+chart.RiskReward(opt.crra, risk.col="StdDev")
+par(mfrow=c(1,1))
+dev.off()
+
+# Compute the portfolio returns with rebalancing
+ret.crra <- summary(bt.opt.crra)$portfolio_returns
+colnames(ret.crra) <- "CRRA"
+
+# Plot the performance summary of the returns from example 3 and CRRA
+png(paste(figures.dir, "ret_crra.png", sep="/"))
+charts.PerformanceSummary(cbind(ret.bt.opt, ret.crra), main="Optimization Performance")
+dev.off()
+

Deleted: pkg/PortfolioAnalytics/sandbox/RFinance2014/presentation.html
===================================================================
--- pkg/PortfolioAnalytics/sandbox/RFinance2014/presentation.html	2014-04-11 01:50:02 UTC (rev 3362)
+++ pkg/PortfolioAnalytics/sandbox/RFinance2014/presentation.html	2014-04-11 05:50:24 UTC (rev 3363)
@@ -1,714 +0,0 @@
-<!DOCTYPE html>
-<!-- saved from url=(0014)about:internet -->
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<meta http-equiv="x-ua-compatible" content="IE=9" >
-
-<title>Portfolio Optimization</title>
-
-<style type="text/css">
-body, td {
-   font-family: sans-serif;
-   background-color: white;
-   font-size: 12px;
-   margin: 8px;
-}
-
-tt, code, pre {
-   font-family: 'DejaVu Sans Mono', 'Droid Sans Mono', 'Lucida Console', Consolas, Monaco, monospace;
-}
-
-h1 { 
-   font-size:2.2em; 
-}
-
-h2 { 
-   font-size:1.8em; 
-}
-
-h3 { 
-   font-size:1.4em; 
-}
-
-h4 { 
-   font-size:1.0em; 
-}
-
-h5 { 
-   font-size:0.9em; 
-}
-
-h6 { 
-   font-size:0.8em; 
-}
-
-a:visited {
-   color: rgb(50%, 0%, 50%);
-}
-
-pre {	
-   margin-top: 0;
-   max-width: 95%;
-   border: 1px solid #ccc;
-   white-space: pre-wrap;
-}
-
-pre code {
-   display: block; padding: 0.5em;
-}
-
-code.r, code.cpp {
-   background-color: #F8F8F8;
-}
-
-table, td, th {
-  border: none;
-}
-
-blockquote {
-   color:#666666;
-   margin:0;
-   padding-left: 1em;
-   border-left: 0.5em #EEE solid;
-}
-
-hr {
-   height: 0px;
-   border-bottom: none;
-   border-top-width: thin;
-   border-top-style: dotted;
-   border-top-color: #999999;
-}
-
- at media print {
-   * { 
-      background: transparent !important; 
-      color: black !important; 
-      filter:none !important; 
-      -ms-filter: none !important; 
-   }
-
-   body { 
-      font-size:12pt; 
-      max-width:100%; 
-   }
-       
-   a, a:visited { 
-      text-decoration: underline; 
-   }
-
-   hr { 
-      visibility: hidden;
-      page-break-before: always;
-   }
-
-   pre, blockquote { 
-      padding-right: 1em; 
-      page-break-inside: avoid; 
-   }
-
-   tr, img { 
-      page-break-inside: avoid; 
-   }
-
-   img { 
-      max-width: 100% !important; 
-   }
-
-   @page :left { 
-      margin: 15mm 20mm 15mm 10mm; 
-   }
-     
-   @page :right { 
-      margin: 15mm 10mm 15mm 20mm; 
-   }
-
-   p, h2, h3 { 
-      orphans: 3; widows: 3; 
-   }
-
-   h2, h3 { 
-      page-break-after: avoid; 
-   }
-}
-
-</style>
-
-<!-- Styles for R syntax highlighter -->
-<style type="text/css">
-   pre .operator,
-   pre .paren {
-     color: rgb(104, 118, 135)
-   }
-
-   pre .literal {
-     color: rgb(88, 72, 246)
-   }
-
-   pre .number {
-     color: rgb(0, 0, 205);
-   }
-
-   pre .comment {
-     color: rgb(76, 136, 107);
-   }
-
-   pre .keyword {
-     color: rgb(0, 0, 255);
-   }
-
-   pre .identifier {
-     color: rgb(0, 0, 0);
-   }
-
-   pre .string {
-     color: rgb(3, 106, 7);
-   }
-</style>
-
-<!-- R syntax highlighter -->
-<script type="text/javascript">
-var hljs=new function(){function m(p){return p.replace(/&/gm,"&").replace(/</gm,"<")}function f(r,q,p){return RegExp(q,"m"+(r.cI?"i":"")+(p?"g":""))}function b(r){for(var p=0;p<r.childNodes.length;p++){var q=r.childNodes[p];if(q.nodeName=="CODE"){return q}if(!(q.nodeType==3&&q.nodeValue.match(/\s+/))){break}}}function h(t,s){var p="";for(var r=0;r<t.childNodes.length;r++){if(t.childNodes[r].nodeType==3){var q=t.childNodes[r].nodeValue;if(s){q=q.replace(/\n/g,"")}p+=q}else{if(t.childNodes[r].nodeName=="BR"){p+="\n"}else{p+=h(t.childNodes[r])}}}if(/MSIE [678]/.test(navigator.userAgent)){p=p.replace(/\r/g,"\n")}return p}function a(s){var r=s.className.split(/\s+/);r=r.concat(s.parentNode.className.split(/\s+/));for(var q=0;q<r.length;q++){var p=r[q].replace(/^language-/,"");if(e[p]){return p}}}function c(q){var p=[];(function(s,t){for(var r=0;r<s.childNodes.length;r++){if(s.childNodes[r].nodeType==3){t+=s.childNodes[r].nodeValue.length}else{if(s.childNodes[r].nodeName=="BR"){t+=1}else{if(s.childNodes[r].nodeType==1){p.push({event:"start",offset:t,node:s.childNodes[r]});t=arguments.callee(s.childNodes[r],t);p.push({event:"stop",offset:t,node:s.childNodes[r]})}}}}return t})(q,0);return p}function k(y,w,x){var q=0;var z="";var s=[];function u(){if(y.length&&w.length){if(y[0].offset!=w[0].offset){return(y[0].offset<w[0].offset)?y:w}else{return w[0].event=="start"?y:w}}else{return y.length?y:w}}function t(D){var A="<"+D.nodeName.toLowerCase();for(var B=0;B<D.attributes.length;B++){var C=D.attributes[B];A+=" "+C.nodeName.toLowerCase();if(C.value!==undefined&&C.value!==false&&C.value!==null){A+='="'+m(C.value)+'"'}}return A+">"}while(y.length||w.length){var v=u().splice(0,1)[0];z+=m(x.substr(q,v.offset-q));q=v.offset;if(v.event=="start"){z+=t(v.node);s.push(v.node)}else{if(v.event=="stop"){var p,r=s.length;do{r--;p=s[r];z+=("</"+p.nodeName.toLowerCase()+">")}while(p!=v.node);s.splice(r,1);while(r<s.length){z+=t(s[r]);r++}}}}return z+m(x.substr(q))}function j(){function q(x,y,v){if(x.compiled){return}var u;var s=[];if(x.k){x.lR=f(y,x.l||hljs.IR,true);for(var w in x.k){if(!x.k.hasOwnProperty(w)){continue}if(x.k[w] instanceof Object){u=x.k[w]}else{u=x.k;w="keyword"}for(var r in u){if(!u.hasOwnProperty(r)){continue}x.k[r]=[w,u[r]];s.push(r)}}}if(!v){if(x.bWK){x.b="\\b("+s.join("|")+")\\s"}x.bR=f(y,x.b?x.b:"\\B|\\b");if(!x.e&&!x.eW){x.e="\\B|\\b"}if(x.e){x.eR=f(y,x.e)}}if(x.i){x.iR=f(y,x.i)}if(x.r===undefined){x.r=1}if(!x.c){x.c=[]}x.compiled=true;for(var t=0;t<x.c.length;t++){if(x.c[t]=="self"){x.c[t]=x}q(x.c[t],y,false)}if(x.starts){q(x.starts,y,false)}}for(var p in e){if(!e.hasOwnProperty(p)){continue}q(e[p].dM,e[p],true)}}function d(B,C){if(!j.called){j();j.called=true}function q(r,M){for(var L=0;L<M.c.length;L++){if((M.c[L].bR.exec(r)||[null])[0]==r){return M.c[L]}}}function v(L,r){if(D[L].e&&D[L].eR.test(r)){return 1}if(D[L].eW){var M=v(L-1,r);return M?M+1:0}return 0}function w(r,L){return L.i&&L.iR.test(r)}function K(N,O){var M=[];for(var L=0;L<N.c.length;L++){M.push(N.c[L].b)}var r=D.length-1;do{if(D[r].e){M.push(D[r].e)}r--}while(D[r+1].eW);if(N.i){M.push(N.i)}return f(O,M.join("|"),true)}function p(M,L){var N=D[D.length-1];if(!N.t){N.t=K(N,E)}N.t.lastIndex=L;var r=N.t.exec(M);return r?[M.substr(L,r.index-L),r[0],false]:[M.substr(L),"",true]}function z(N,r){var L=E.cI?r[0].toLowerCase():r[0];var M=N.k[L];if(M&&M instanceof Array){return M}return false}function F(L,P){L=m(L);if(!P.k){return L}var r="";var O=0;P.lR.lastIndex=0;var M=P.lR.exec(L);while(M){r+=L.substr(O,M.index-O);var N=z(P,M);if(N){x+=N[1];r+='<span class="'+N[0]+'">'+M[0]+"</span>"}else{r+=M[0]}O=P.lR.lastIndex;M=P.lR.exec(L)}return r+L.substr(O,L.length-O)}function J(L,M){if(M.sL&&e[M.sL]){var r=d(M.sL,L);x+=r.keyword_count;return r.value}else{return F(L,M)}}function I(M,r){var L=M.cN?'<span class="'+M.cN+'">':"";if(M.rB){y+=L;M.buffer=""}else{if(M.eB){y+=m(r)+L;M.buffer=""}else{y+=L;M.buffer=r}}D.push(M);A+=M.r}function G(N,M,Q){var R=D[D.length-1];if(Q){y+=J(R.buffer+N,R);return false}var P=q(M,R);if(P){y+=J(R.buffer+N,R);I(P,M);return P.rB}var L=v(D.length-1,M);if(L){var O=R.cN?"</span>":"";if(R.rE){y+=J(R.buffer+N,R)+O}else{if(R.eE){y+=J(R.buffer+N,R)+O+m(M)}else{y+=J(R.buffer+N+M,R)+O}}while(L>1){O=D[D.length-2].cN?"</span>":"";y+=O;L--;D.length--}var r=D[D.length-1];D.length--;D[D.length-1].buffer="";if(r.starts){I(r.starts,"")}return R.rE}if(w(M,R)){throw"Illegal"}}var E=e[B];var D=[E.dM];var A=0;var x=0;var y="";try{var s,u=0;E.dM.buffer="";do{s=p(C,u);var t=G(s[0],s[1],s[2]);u+=s[0].length;if(!t){u+=s[1].length}}while(!s[2]);if(D.length>1){throw"Illegal"}return{r:A,keyword_count:x,value:y}}catch(H){if(H=="Illegal"){return{r:0,keyword_count:0,value:m(C)}}else{throw H}}}function g(t){var p={keyword_count:0,r:0,value:m(t)};var r=p;for(var q in e){if(!e.hasOwnProperty(q)){continue}var s=d(q,t);s.language=q;if(s.keyword_count+s.r>r.keyword_count+r.r){r=s}if(s.keyword_count+s.r>p.keyword_count+p.r){r=p;p=s}}if(r.language){p.second_best=r}return p}function i(r,q,p){if(q){r=r.replace(/^((<[^>]+>|\t)+)/gm,function(t,w,v,u){return w.replace(/\t/g,q)})}if(p){r=r.replace(/\n/g,"<br>")}return r}function n(t,w,r){var x=h(t,r);var v=a(t);var y,s;if(v){y=d(v,x)}else{return}var q=c(t);if(q.length){s=document.createElement("pre");s.innerHTML=y.value;y.value=k(q,c(s),x)}y.value=i(y.value,w,r);var u=t.className;if(!u.match("(\\s|^)(language-)?"+v+"(\\s|$)")){u=u?(u+" "+v):v}if(/MSIE [678]/.test(navigator.userAgent)&&t.tagName=="CODE"&&t.parentNode.tagName=="PRE"){s=t.parentNode;var p=document.createElement("div");p.innerHTML="<pre><code>"+y.value+"</code></pre>";t=p.firstChild.firstChild;p.firstChild.cN=s.cN;s.parentNode.replaceChild(p.firstChild,s)}else{t.innerHTML=y.value}t.className=u;t.result={language:v,kw:y.keyword_count,re:y.r};if(y.second_best){t.second_best={language:y.second_best.language,kw:y.second_best.keyword_count,re:y.second_best.r}}}function o(){if(o.called){return}o.called=true;var r=document.getElementsByTagName("pre");for(var p=0;p<r.length;p++){var q=b(r[p]);if(q){n(q,hljs.tabReplace)}}}function l(){if(window.addEventListener){window.addEventListener("DOMContentLoaded",o,false);window.addEventListener("load",o,false)}else{if(window.attachEvent){window.attachEvent("onload",o)}else{window.onload=o}}}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=n;this.initHighlighting=o;this.initHighlightingOnLoad=l;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="\\b(0[xX][a-fA-F0-9]+|(\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.ER="(?![\\s\\S])";this.BE={b:"\\\\.",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.inherit=function(r,s){var p={};for(var q in r){p[q]=r[q]}if(s){for(var q in s){p[q]=s[q]}}return p}}();hljs.LANGUAGES.cpp=function(){var a={keyword:{"false":1,"int":1,"float":1,"while":1,"private":1,"char":1,"catch":1,"export":1,virtual:1,operator:2,sizeof:2,dynamic_cast:2,typedef:2,const_cast:2,"const":1,struct:1,"for":1,static_cast:2,union:1,namespace:1,unsigned:1,"long":1,"throw":1,"volatile":2,"static":1,"protected":1,bool:1,template:1,mutable:1,"if":1,"public":1,friend:2,"do":1,"return":1,"goto":1,auto:1,"void":2,"enum":1,"else":1,"break":1,"new":1,extern:1,using:1,"true":1,"class":1,asm:1,"case":1,typeid:1,"short":1,reinterpret_cast:2,"default":1,"double":1,register:1,explicit:1,signed:1,typename:1,"try":1,"this":1,"switch":1,"continue":1,wchar_t:1,inline:1,"delete":1,alignof:1,char16_t:1,char32_t:1,constexpr:1,decltype:1,noexcept:1,nullptr:1,static_assert:1,thread_local:1,restrict:1,_Bool:1,complex:1},built_in:{std:1,string:1,cin:1,cout:1,cerr:1,clog:1,stringstream:1,istringstream:1,ostringstream:1,auto_ptr:1,deque:1,list:1,queue:1,stack:1,vector:1,map:1,set:1,bitset:1,multiset:1,multimap:1,unordered_set:1,unordered_map:1,unordered_multiset:1,unordered_multimap:1,array:1,shared_ptr:1}};return{dM:{k:a,i:"</",c:[hljs.CLCM,hljs.CBLCLM,hljs.QSM,{cN:"string",b:"'\\\\?.",e:"'",i:"."},{cN:"number",b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},hljs.CNM,{cN:"preprocessor",b:"#",e:"$"},{cN:"stl_container",b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:a,r:10,c:["self"]}]}}}();hljs.LANGUAGES.r={dM:{c:[hljs.HCM,{cN:"number",b:"\\b0[xX][0-9a-fA-F]+[Li]?\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\b\\d+(?:[eE][+\\-]?\\d*)?L\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\b\\d+\\.(?!\\d)(?:i\\b)?",e:hljs.IMMEDIATE_RE,r:1},{cN:"number",b:"\\b\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"keyword",b:"(?:tryCatch|library|setGeneric|setGroupGeneric)\\b",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\.\\.\\.",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\.\\.\\d+(?![\\w.])",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\b(?:function)",e:hljs.IMMEDIATE_RE,r:2},{cN:"keyword",b:"(?:if|in|break|next|repeat|else|for|return|switch|while|try|stop|warning|require|attach|detach|source|setMethod|setClass)\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"literal",b:"(?:NA|NA_integer_|NA_real_|NA_character_|NA_complex_)\\b",e:hljs.IMMEDIATE_RE,r:10},{cN:"literal",b:"(?:NULL|TRUE|FALSE|T|F|Inf|NaN)\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"identifier",b:"[a-zA-Z.][a-zA-Z0-9._]*\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"operator",b:"<\\-(?!\\s*\\d)",e:hljs.IMMEDIATE_RE,r:2},{cN:"operator",b:"\\->|<\\-",e:hljs.IMMEDIATE_RE,r:1},{cN:"operator",b:"%%|~",e:hljs.IMMEDIATE_RE},{cN:"operator",b:">=|<=|==|!=|\\|\\||&&|=|\\+|\\-|\\*|/|\\^|>|<|!|&|\\||\\$|:",e:hljs.IMMEDIATE_RE,r:0},{cN:"operator",b:"%",e:"%",i:"\\n",r:1},{cN:"identifier",b:"`",e:"`",r:0},{cN:"string",b:'"',e:'"',c:[hljs.BE],r:0},{cN:"string",b:"'",e:"'",c:[hljs.BE],r:0},{cN:"paren",b:"[[({\\])}]",e:hljs.IMMEDIATE_RE,r:0}]}};
-hljs.initHighlightingOnLoad();
-</script>
-
-
-<!-- MathJax scripts -->
-<script type="text/javascript" src="https://c328740.ssl.cf1.rackcdn.com/mathjax/2.0-latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
-</script>
-
-
-
-</head>
-
-<body>
-<!---
-title: "R/Finance 2014:Complex Portfolio Optimization with PortfolioAnalytics"
-author: Ross Bennett
-date: May 16, 2014
--->
-
-<h1>Portfolio Optimization</h1>
-
-<h2>General</h2>
-
-<p>TODO: Add some general comments here about goals and pitfalls of optimization in the context of constructing a portfolio.</p>
-
-<h2>Modern Portfolio Theory</h2>
-
-<p>“Modern” Portfolio Theory (MPT) was introduced by Harry Markowitz in 1952.</p>
-
-<p>In general, MPT states that an investor's objective is to maximize portfolio expected return for a given amount of risk.</p>
-
-<p>General Objectives</p>
-
-<ul>
-<li>Maximize a measure of gain per unit measure of risk</li>
-<li>Minimize a measure of risk</li>
-<li>Maximize a utility function</li>
-</ul>
-
-<p>How do we define risk?</p>
-
-<h2>Portfolio Optimization Objectives</h2>
-
-<ul>
-<li>Minimize Risk
-
-<ul>
-<li>Volatility</li>
-<li>Tail Loss (VaR, ES)</li>
-<li>Other Downside Risk Measure</li>
-</ul></li>
-<li>Maximize Risk Adjusted Return
-
-<ul>
-<li>Sharpe Ratio</li>
-<li>Modified Sharpe Ratio</li>
-<li>Several Others</li>
-</ul></li>
-<li>Risk Budgets
-
-<ul>
-<li>Equal Component Contribution to Risk (i.e. Risk Parity)</li>
-<li>Limits on Component Contribution</li>
-</ul></li>
-<li>Maximize a Utility Function
-
-<ul>
-<li>Quadratic, CRRA, CARA, etc.</li>
-</ul></li>
-</ul>
-
-<h1>PortfolioAnalytics</h1>
-
-<h2>Overview</h2>
-
-<p>PortfolioAnalytics is an R package designed to provide numerical solutions and visualizations for portfolio optimization problems with complex constraints and objectives.</p>
-
-<h2>Key Features</h2>
-
-<ul>
-<li>Support for multiple constraint and objective types</li>
-<li>Modular constraints and objectives</li>
-<li>An objective function can be any valid R function</li>
-<li>Custom moments</li>
-<li>Solver agnostic</li>
-<li>Visualizations</li>
-</ul>
-
-<!---
-The key points to make here are:
-- Flexibility
-  - The multiple types and modularity of constraints and objectives allows us to add, remove, combine, etc. multiple constraint and objective types very easily.
-  - Define an objective as any valid R function
-  - Define a function to compute the moments (sample, robust, shrinkage, factor model, GARCH model, etc.)
-- PortfolioAnalytics comes "pre-built" with several constraint types.
--->
-
-<h2>Support Multiple Solvers</h2>
-
-<p>Linear and Quadratic Programming Solvers</p>
-
-<ul>
-<li>R Optimization Infrastructure (ROI)
-
-<ul>
-<li>GLPK (Rglpk)</li>
-<li>Symphony (Rsymphony)</li>
-<li>Quadprog (quadprog)</li>
-</ul></li>
-</ul>
-
-<p>Global (stochastic or continuous solvers)</p>
-
-<ul>
-<li>Random Portfolios</li>
-<li>Differential Evolution (DEoptim)</li>
-<li>Particle Swarm Optimization (pso)</li>
-<li>Generalized Simulated Annealing (GenSA)</li>
-</ul>
-
-<h2>Random Portfolios</h2>
-
-<p>TODO: Add graphic comparing the three methods</p>
-
-<h2>Random Portfolios: Simplex Method</h2>
-
-<p>TODO: Add graphic with different fev biasing values</p>
-
-<h2>Workflow</h2>
-
-<p>TODO: Add a nice graphic here (Guy might have one)</p>
-
-<p>Specify a Portfolio –> Add Constraints –> Add Objectives –> Run Optimization –> Analyze Results</p>
-
-<!---
-Describe each function:
-- portfolio.spec
-- add.constraint
-- add.objective
-- optimize.portfolio and optimize.portfolio.rebalancing
-Just give a general description of the functions to analyze results
--->
-
-<h1>Example 1</h1>
-
-<h2>Data Setup</h2>
-
-<p>Here we will look at portfolio optimization in the context of stocks.</p>
-
-<ul>
-<li>Selection of large cap, mid cap, and small cap stocks from CRSP data</li>
-<li>15 Large Cap</li>
-<li>15 Mid Cap</li>
-<li>5 Small Cap</li>
-</ul>
-
-<h2>Distribution of Monthly Returns</h2>
-
[TRUNCATED]

To get the complete diff run:
    svnlook diff /svnroot/returnanalytics -r 3363


More information about the Returnanalytics-commits mailing list