Thank you for clarifying this...I guees I will have to be patient and wait for the new solver....

Many thanks again for your help.

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

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.

> 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:

[hidden email]]

> Sent: 23 January 2015 14:48

> To: Pierre Org; 'Ilya Kipnis'

> Cc:

[hidden email]
> 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@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:

[hidden email]]

>> Sent: 21 January 2015 15:50

>> To: Pierre Org

>> Cc:

[hidden email]
>> 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 <

[hidden email]> 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]]

>>

>> _______________________________________________

>>

[hidden email] 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]]

>>

>> _______________________________________________

>>

[hidden email] 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.

>>

>

>

>

-- 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.