diff --git a/portfolio_builder.py b/portfolio_builder.py index ef6cd8e..2d13ed3 100644 --- a/portfolio_builder.py +++ b/portfolio_builder.py @@ -104,24 +104,39 @@ class MVO(object): n = ret.shape[1] init=np.ones(n)/n if role=="max_sharpe": - cov=np.cov(ret.T) + if n==1: + cov=np.array(np.cov(ret.T)) + else: + cov=np.cov(ret.T) loss = lambda w: -cls.sharpe_ratio(w, ret) grad = lambda w: -cls.sharpe_grad(w, ret, cov) elif role=="max_sortino": - cov = np.cov(np.maximum(ret, 0).T) + if n==1: + cov = np.cov(np.maximum(ret, 0).T) + else: + cov = np.array(np.cov(np.maximum(ret, 0).T)) loss = lambda w: -cls.sortino_ratio(w, ret) grad = lambda w: -cls.sortino_grad(w, ret, cov) elif role=="min_volatility": - cov=np.cov(ret.T) + if n==1: + cov=np.array(np.cov(ret.T)) + else: + cov=np.cov(ret.T) loss = lambda w: cls.volatility(w, ret) grad = lambda w: cls.volatility_grad(w, ret, cov) elif role=="quadratic_utility": - cov=np.cov(ret.T) + if n==1: + cov=np.array(np.cov(ret.T)) + else: + cov=np.cov(ret.T) loss = lambda w: -cls.quadratic_utility(w, ret, gamma) grad = lambda w: -cls.quadratic_utility_grad(w, ret, cov, gamma) else: return init - bnds = [[0, 0.6] for i in range(n)] + if n==1: + bnds = [[0,1]] + else: + bnds = [[0, 0.6] for i in range(n)] opts = {'maxiter': 1000, 'disp': False} cons = ({'type': 'eq', 'fun': lambda w: np.sum(w) - 1}) result = minimize(loss, init, method="SLSQP",\ @@ -140,4 +155,4 @@ class MVO(object): - \ No newline at end of file + diff --git a/static/js/addStock.js b/static/js/addStock.js index a21dbb1..fb8479a 100644 --- a/static/js/addStock.js +++ b/static/js/addStock.js @@ -81,7 +81,7 @@ $addStockBtn.click(function(event) { // Event listener for submit button click $submitPort.click(function(event) { event.preventDefault(); - if (stockList.length > 1){ + if (stockList.length >= 1){ $('#portModal').modal('show'); // console.log('asset confirm'); // $(this).prop('disabled', true); @@ -89,7 +89,7 @@ $submitPort.click(function(event) { }); // Event listener for submit button click $sendPort.click(function(event) { - if (stockList.length > 1){ + if (stockList.length >= 1){ // $('#confirmMes').replaceWith("投資組合已開始建立,請等待完成訊息,或1分鐘後至分析結果區查看!") // $('#confirmModal').modal('show'); $submitPort.prop('disabled', true); diff --git a/templates/strategy_tw.html b/templates/strategy_tw.html index b0afa12..424f33e 100644 --- a/templates/strategy_tw.html +++ b/templates/strategy_tw.html @@ -47,7 +47,6 @@ div.card{