Random Portfolio using R to create investment strategy for Hedge Fund


Published on

Published in: Business, Economy & Finance
1 Like
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide
  • There are two methods of performance measurement in common use: benchmarks and peer groups. Using a benchmark requires a long time (as in decades) to get reasonable statistical power. Using peer groups looks superficially a lot like using random portfolios. Both use a single time period, both compare our fund of interest to a group of alternative portfolios. CVAR: Unlike Value-at-Risk (VaR), CVaR has all the properties a risk measure should have to be coherent and is a convex function of the portfolio weights
  • Random Portfolio using R to create investment strategy for Hedge Fund

    1. 1. Lujiazui Hedge Fund Inc.Ryota ArafukaKuang-Po LeeKrunal NaikJiaqi WangJianhua Yen
    2. 2. Investment Portfolio Diversification• Asset allocation diversification Horizontal diversification Vertical diversification• Geographic diversification
    3. 3. Hedge Fund Investment PortfolioSource: “Global Survey Hedge Fund and Investor Survey 2012” by Ernst & Young
    4. 4. Our Investment Style• Relative value Fixed income arbitrage Convertible arbitrage Equity market neutral Event driven• Directional Equity long/short Macro CTA
    5. 5. Our ObjectivesEqual Contribution to•Weight- Gives the portfolio diversification•Variance- Allocates portfolio variance equally across theportfolio components•Risk- Directly diversify downside risk amongcomponents by using ETL contribution
    6. 6. Random Portfolio• Random permutations of weights• Selected criteria• High frequency long/short• Multi-strategy• Model should be self sustained with decisions confinedby set of constraints• Assign probabilities to strategies corresponding tocalculated risks in given scenario
    7. 7. R Language for Random Portfolio
    8. 8. Application Example• Total value : $10m• No. of selected assets for RP=50• Constraints Long-only 50 to 60 names No asset may have more than 4% weight Industry spread : 10 S&P 500, random portfolio, and previous portfolio will bebenchmark Duration considered 12 months Frequency 10(Relatively low for us, but this is for testing model)
    9. 9. Cumulative Trading
    10. 10. Comparison of Value with S&P 500
    11. 11. Industries Port wtConsumerDiscretionary 29.56Consumer Staples 11.26Energy 7.01Financials 4.43Health Care 11.61Industrials 9.63InformationTechnology 10.57Materials 11.42TelecommunicationsServices 0Utilities 4.51Total 100Weight Distribution
    12. 12. Industries Port ret Bench retConsumerDiscretionary 7.33 1.36Consumer Staples -1.13 4.98Energy 31.2 30.52Financials 8.41 7.96Health Care 27.33 7.8Industrials 17.3 22.47InformationTechnology 14.26 19.65Materials 84.71 48.53TelecommunicationsServices 0 0Utilities 3.92 5.96Total 20.79 13.64Cumulative Returns
    13. 13. Portfolio optimization Using R
    14. 14. Efficient Frontier
    15. 15. Efficient Frontier with Short-selling
    16. 16. Measure of Portfolio Performance:•Annualized return•Annualized standard deviation•VAR and ES (Expected shortfall)•Sharp ratio, Omega Ratio, Sortino RatioImplementation of R –Using package PerformanceAnalytics
    17. 17. Code to Create Artificial Stocks• # create the antithetic pair of stocks and publish it into the environment• # generate sequence of dates• times <- seq(as.POSIXct(strptime(2011-01-1 16:00:00, %Y-%m-%d %H:%M:%S)),• as.POSIXct(strptime(2011-12-1 16:00:00, %Y-%m-%d %H:%M:%S)),• by="1 months")•• # generate and store dummy price series = 200,100,200,100,200 ...• prices.xts <- xts(rep(c(200,100),length(times)/2), order.by=as.POSIXct(times))• stk <- STK1• colnames(prices.xts) <- paste(stk,.Adjusted,sep="")• assign(x=stk, value=prices.xts, envir=global.env )•• # generate and store dummy price series = 100,200,100,200,100 ...• prices.xts <- xts(rep(c(100,200),length(times)/2), order.by=as.POSIXct(times))• stk <- STK2• colnames(prices.xts) <- paste(stk,.Adjusted,sep="")• assign(x=stk, value=prices.xts, envir=global.env )•• # run the strategy and create a plot• strategy(portfolio= c("STK1","STK2"),threshold=.9,doplot=TRUE,title="Artificial Portfolio Example")
    18. 18. Download Option Data from Yahoo Finance• # Goal: download adjusted price data for selected security, convert to returns, and write to output file•• library(tseries)•• # Load security data from Yahoo! Finance• prices1 <- get.hist.quote("SPY", quote="Adj", start="2005-12-25", retclass="zoo")•• prices1 <- na.locf(prices1) # Copy last traded price when NA•• # To make week end prices:• nextfri.Date <- function(x) 7 * ceiling(as.numeric(x - 1)/7) + as.Date(1)• weekly.prices <- aggregate(prices, nextfri.Date,tail,1)•• # To convert month end prices:• monthly.prices <- aggregate(prices1, as.yearmon, tail, 1)•• # Convert weekly prices into weekly returns• r.weekly <- diff(log(weekly.prices)) # convert prices to log returns• r1.weekly <- exp(r.weekly)-1 # back to simple returns•• # Convert monthly prices into monthly returns• r.monthly <- diff(log(monthly.prices)) # convert prices to log returns• r1.monthly <- exp(r.monthly)-1 # back to simple returns•• # Write output data to csv file• write.zoo(r1.weekly, file="weekly.csv",sep=",",col.names=c("Dates","Percent Return"))• write.zoo(r1.monthly, file="monthly.csv",sep=",",col.names=c("Dates","Percent Return"))
    19. 19. Code to Generate Random Portfoliorequire(PortfolioProbe)rp100w05 <- random.portfolio(1e4, prices=sp5.close[1,],gross=1e6, long.only=TRUE, port.size=100,max.weight=.05)Then the returns are computed:sret.rp100w05 <- valuation(rp100w05, prices=sp5.close[c language="(1,1511),"][/c],returns="simple") lret.rp100w05 <- valuation(rp100w05, prices=sp5.close[clanguage="(1,1511),"][/c], returns="log")
    20. 20. R code for Adjusting Weight> pp.bootsimfunction (retmat, weight, times=252){ dlar <- retmat[sample(nrow(retmat), times,replace=TRUE),]pp.porteval(dlar, weight) }
    21. 21. R Code for Portfolio Optimization
    22. 22. R Code for Portfolio Evaluation> pp.portevalfunction (dlar, weight){(exp(colSums(dlar[, names(weight)])) - 1) %*%weight}
    23. 23. Optimization with Truncated Straddle using R
    24. 24. Simulation Result for Portfolio 100