[R-SIG-Finance] Portfolio Optimisation as a function of targeted Risk rather than return.

alexios alexios at 4dscape.com
Fri Jan 23 17:10:28 CET 2015


Hi Pierre,

The inequality constraint 'cannot' be turned into an equality one with 
the solver currently in use...I tried this in the past using auxiliary 
variables, but it was really hit and miss..best to wait for the new 
solver to be plugged in.
Alternatively, if you have a commercial license to one of the solver(s) 
now interfacing with R, you should be able to represent and solve this 
type of problem much more confidently.

Regards,

Alexios

On 23/01/2015 15:21, Pierre Org wrote:
> Hi Alexios
>
> Many thanks for the below this is really useful to me (and hopefully others). Yes I understood since my previous post that the risk was expressed as variance rather than standard deviation. In respect of upper bound, I assume that you mean that the portfolio risk is constrained to a maximum of 7% rather than exactly 7%  during the optimisation (i.e the risk will end up being close to 7% rather than exactly equal)? Is there a way of having a strict equality by forcing the lower bound as well ?
> I am really thankful for the time you spend on this.
>
> Kind regards
>
> Pierre
>
> -----Original Message-----
> From: alexios [mailto:alexios at 4dscape.com]
> Sent: 23 January 2015 14:48
> To: Pierre Org; 'Ilya Kipnis'
> Cc: r-sig-finance at r-project.org
> Subject: Re: [R-SIG-Finance] Portfolio Optimisation as a function of targeted Risk rather than return.
>
> 1. The risk is variance, NOT standard deviation.
> 2. From the manual:
> "riskB:	 For the case that riskType is “maxreward”, then riskB is the
> upper bound for the risk constraint."
>
> _Note_ the "upper bound".
>
> 3. Because of the quality of the SOCP solver currently used, you should probably scale your data by 100.
>
> Therefore:
>
> m = m*100
> riskB = (7^2)/12
> spec   <- parmaspec(S = as.matrix(cov(m)),
> riskB=riskB,risk="EV",riskType="maxreward", LB = rep(0,3), UB = rep(1,3), budget=1, forecast=as.numeric(colMeans(m))) port <- parmasolve(spec, solver="SOCP")
>
> +---------------------------------+
> |        PARMA Portfolio          |
> +---------------------------------+
> No.Assets               : 3
> Problem                 : SOCP
> Risk Measure    	: EV
> Objective               : maxreward
> Risk                    : 3.3703562
> Reward                  : 1.634234
>
>                      Optimal_Weights
> World.Ex.UK.Stocks               1
>
>   > sqrt(parmarisk(port))*sqrt(12)/100
> [1] 0.06359581
>
>   > parmareward(port)/100
> [1] 0.01634234
>
> But note:
>   >port at solution$status
> "Error (0)"
>
> i.e. "probably" unreliable solution. A new SOCP solver will be available sometime this year (courtesy of Bernhard Pfaff)...until then, use with caution.
>
> Regards,
>
> Alexios
>
>
> On 23/01/2015 13:59, Pierre Org wrote:
>> Hi Ilya
>>
>>
>>
>> Many thanks for pointing me toward the PARMA package. I have tried to use it but  I seem to fail, I am not sure I am doing things right. When I optimise  for a given level of risk  (7% annualised) and then check what the portfolio volatility with the  in-sample weights  the level  risk does not seem to equate to the intended target risk.
>>
>>
>>
>>                      Gilts World Ex UK Stocks     UK Stocks
>>
>> 2014-02-28  1.548142e-03       0.0279529433  4.838851e-02
>>
>> 2014-03-31  7.806639e-05       0.0105305699 -2.702980e-02
>>
>> 2014-04-30  7.377730e-03      -0.0052597245  3.158530e-02
>>
>> 2014-05-31  9.628424e-03       0.0282594842  1.481751e-02
>>
>> 2014-06-30 -5.580206e-03       0.0001037494 -1.283548e-02
>>
>> 2014-07-31  1.057991e-02      -0.0034606566 -3.263463e-05
>>
>> 2014-08-31  3.487462e-02       0.0404001701  2.027569e-02
>>
>> 2014-09-30 -6.982201e-03      -0.0005089251 -2.937074e-02
>>
>> 2014-10-31  1.384694e-02       0.0226491298 -1.050032e-02
>>
>> 2014-11-30  3.209176e-02       0.0427556870  2.914371e-02
>>
>>
>>
>> I use the above data as an input (m) to the optimiser then force my
>> monthly standard deviation to 0.07/sqrt(12)
>>
>>
>>
>> spec   <- parmaspec(S = cov(m) ,riskB= 0.07/sqrt(12) ,risk="EV",riskType="maxreward", LB = rep(0,3), UB = rep(1,3), budget=1, forecast=colMeans(m))
>>
>> parmasolve(spec, solver="SOCP")}
>>
>>
>>
>> The annualised standard deviation of my series are :
>>
>>
>>
>>> apply(m,2,sd)*sqrt(12)
>>
>>
>>
>>           Gilts World Ex UK Stocks          UK Stocks
>>
>>           0.04938711         0.06359545         0.09144821
>>
>>
>>
>> so a 7% target risk portfolio that maximise return should exist as a solution. Anyhow the resulting weights from the above dataseries are calculated as:
>>
>>
>>
>>>    spec   <- parmaspec(S = cov(m) ,riskB= 0.07/sqrt(12) ,risk="EV",riskType="maxreward", LB = rep(0,3), UB = rep(1,3), budget=1, forecast=colMeans(m))
>>
>>>    parmasolve(spec, solver="SOCP")}
>>
>>
>>
>>
>>
>> +---------------------------------+
>>
>> |        PARMA Portfolio          |
>>
>> +---------------------------------+
>>
>> No.Assets                           : 3
>>
>> Problem                              : SOCP
>>
>> Risk Measure                     : EV
>>
>> Objective                            : maxreward
>>
>> Risk                                      : 0.0005859
>>
>> Reward                               : 0.0110454
>>
>>
>>
>>                      Optimal_Weights
>>
>> World Ex UK Stocks          0.9581
>>
>> Gilts                                      0.0419
>>
>>
>>
>>
>>
>>
>>
>> Now when I use the solution weights I do not get the same monthly
>> targeted risk. I realise that the risk
>>
>>
>>
>>
>>
>>> w <- parmasolve(spec, solver="SOCP")@solution$weights
>>
>>> sd(rowSums(t(apply(m,1,function(x) x*t(w)))))*sqrt(12)
>>
>> [1] 0.0624795
>>
>>>
>>
>>
>>
>>
>>
>> My portfolio do not have a standard deviation of 0.7 as I was
>> expecting……
>>
>>
>>
>>
>>
>> It is probably obvious to many of the PARMA users…but I can t  understand where I get it wrong as the portfolio is obviously feasible. What I want is the portfolio  that maximise return amongst all the possible portfolios with a 7% annualised vol.
>>
>> Any idea ?
>>
>>
>>
>>
>>
>> From: Ilya Kipnis [mailto:ilya.kipnis at gmail.com]
>> Sent: 21 January 2015 15:50
>> To: Pierre Org
>> Cc: r-sig-finance at r-project.org
>> Subject: Re: [R-SIG-Finance] Portfolio Optimisation as a function of targeted Risk rather than return.
>>
>>
>>
>> Check out the PortfolioAnalytics package.
>>
>>
>>
>> On Wed, Jan 21, 2015 at 6:13 AM, Pierre Org <pierre at lequeux.org> wrote:
>>
>> I am currently working on a portfolio optimisation strategy that would
>> involves optimising  a portfolio so that it maximises the returns for a user
>> defined level of risk.   E.g. keeping the volatility of the portfolio at 10%
>> annualised whilst maximising the return for this level. For that
>> purpose I was hoping to use the function maxreturnPortfolio  in
>> fPortfolio that should return the portfolio with the maximal return for a fixed target risk.
>> Clearly  though showing in this great package the function has been/is
>> in development by the authors of the package and currently does not
>> work as intended. This is confirmed  by various posts and answer to those by the
>> authors.   I wonder if anyone knows of another more up to date  package or
>> way of doing this in R ?
>>
>>
>>
>> Any help would be really appreciated.
>>
>>
>>
>>
>>
>>
>>
>>
>>           [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-SIG-Finance at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>> -- Subscriber-posting only. If you want to post, subscribe first.
>> -- Also note that this is not the r-help list where general R questions should go.
>>
>>
>>
>>
>> 	[[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-SIG-Finance at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>> -- Subscriber-posting only. If you want to post, subscribe first.
>> -- Also note that this is not the r-help list where general R questions should go.
>>
>
>
>



More information about the R-SIG-Finance mailing list