[ojAlgo-user] 答复: 答复: Report A Bug Of ojalgo finace library
Mathematics, linear algebra and optimisation
Brought to you by:
apete
|
From: yifa w. <fag...@ho...> - 2017-05-21 14:17:01
|
I get the state as "UNEXPLORED", when I tried to simulate with 50 assets with random return. May I know why is that? How to get optimal for this problem? Thanks.
public double[][] genRtns(int assetNum){
double[][] assets_return = new double[assetNum][days];
for(int i=0;i<assetNum;i++){
for(int j=0;j<days;j++){
assets_return[i][j] = getRand();
}
}
return assets_return;
}
private double getRand(){
return (-3+6*Math.random())/100;
}
public void myTest() {
//org.ojalgo.matrix.MatrixUtils.setAllOperationThresholds(5);
final int assetNum = 50;
double[][] assets_return = genRtns(assetNum);
double[][] cov = getCovariance(assets_return);
double[][] avgRtns = getAvgRtns(assets_return);
//final BasicMatrix avgRtns = tm.getExpectedExcessReturns(assets_return);
//System.out.println("Rows:"+avgRtns.rows());
//final BasicMatrix expectedExcessReturns = tm.getExpectedExcessReturns(assets_return); // Why not negate?
//final BigDecimal riskAversion = new BigDecimal(1.0);
MarketEquilibrium marketEquilibrium = new MarketEquilibrium(PrimitiveMatrix.FACTORY.rows(cov));
marketEquilibrium.clean();
final MarkowitzModel markowitzModel = new MarkowitzModel(marketEquilibrium,
PrimitiveMatrix.FACTORY.rows(avgRtns));
markowitzModel.setShortingAllowed(false);
for (int i = 0; i < assetNum; i++) {
markowitzModel.setLowerLimit(i, new BigDecimal(0.0));
markowitzModel.setUpperLimit(i, new BigDecimal(1.0));
}
for (double i = 0; i < 1000; i=i+1) { // Some different risk aversion factors
markowitzModel.setRiskAversion(new BigDecimal(i));
//System.out.println("OptimisationState:"+markowitzModel.optimiser().getState());
System.out.println((i)+"\t"+markowitzModel.optimiser().getState()+"\t"+markowitzModel.getMeanReturn()+"\t"+markowitzModel.getReturnVariance()+"\t"+markowitzModel.getSharpeRatio());
}
}
________________________________
发件人: yifa wang <fag...@ho...>
发送时间: 2017年5月9日 下午 11:15:36
收件人: oja...@li...
主题: [ojAlgo-user] 答复: Report A Bug Of ojalgo finace library
hi,
I try to use ojalgo to do a portfolio optimization. The target is find an efficient frontier for 15 securities or more. I generate random returns for simulation. However, when I run the program, I get the state as "UNEXPLORED". Usually, we get OPTIMAL. What does this mean? Is it possible to get the optimal weight for more than 50 securities?
Thanks.
Jerry
________________________________
发件人: lvz...@gt... <lvz...@gt...>
发送时间: 2017年5月8日 下午 8:20:21
收件人: oja...@li...
主题: [ojAlgo-user] Report A Bug Of ojalgo finace library
Hi,
I have a problem when calculate best invest group by using markowitzModel in ojalgo with code below(for test);
for(int j = 0; j < 100; j ++)
{ Builder<PrimitiveMatrix> tmpBuilder = PrimitiveMatrix.FACTORY.getBuilder(2, 2);
tmpBuilder.add(0, 0, 0.040000);
tmpBuilder.add(0, 1, 0.1000);
tmpBuilder.add(1, 0, 0.1000);
tmpBuilder.add(1, 1, 0.250000);
BasicMatrix covariances = tmpBuilder.build();
tmpBuilder = PrimitiveMatrix.FACTORY.getBuilder(2);
tmpBuilder.add(0, 0.20000);
tmpBuilder.add(1, 0.40000);
BasicMatrix expectedExcessReturns = tmpBuilder.build();
MarketEquilibrium equilibrium = new MarketEquilibrium(covariances);
MarkowitzModel markowitzModel = new MarkowitzModel(equilibrium, expectedExcessReturns);
markowitzModel.setShortingAllowed(false);
// markowitzModel.optimiser().validate(true);
markowitzModel.setTargetReturn(new BigDecimal(0.2 + (0.002 * j)));
for (int i = 0; i < 2; i++) {
markowitzModel.setLowerLimit(i, new BigDecimal(0.00000));
markowitzModel.setUpperLimit(i, new BigDecimal(1.00000));
}
System.out.println(0.2 + (0.002 * j) + "," + markowitzModel.getReturnVariance() + " , " + markowitzModel.getMeanReturn() + "," + markowitzModel.getWeights());
}
when TargetReturn equal to 0.206,Variance equal to 0.04 , weights equal to [1.0, 0.0]
when TargetReturn equal to 0.208, Variance equal to 0.25,weights equal to [0.0, 1.0]
Below Relationship of TargetReturn And Target Variance(Y-Axis TargetReturn,X-AXis standard deviation)
吕子锋
|