我已经尝试了 3 天来了解如何在 python 中使用 cvxopt 模块来计算有效边界。我在以下位置找到的代码片段:https : //github.com/markharley/Markowitz/blob/master/markowitz.py
可能是说明我的问题的最佳方式,我在这篇文章的底部完整地包含了它。
使用现代投资组合理论维基百科页面上的方程式:
https://en.wikipedia.org/wiki/Modern_portfolio_theory#Efficient_frontier_with_no_risk-free_asset
我理解为什么第一次使用solvers.qp 使用:
solvers.qp(S, -q*pbar, G, h, A, b)['x']
Run Code Online (Sandbox Code Playgroud)
其中 q 是风险承受能力因子。然后代码继续使用 polyfit 计算最佳夏普比率的点,我也理解,但我迷路的地方是为什么现在的代码是:
# Calculate the optimal portfolio
wt = solvers.qp(opt.matrix(x1 * S), -pbar, G, h, A, b)['x']
Run Code Online (Sandbox Code Playgroud)
其中 x1 是最佳夏普比率点的回报。我不知道为什么突然间我们可以将 S(协方差矩阵)乘以 x1 并在 -pbar 项中去掉 q。
任何人都可以对此有所了解吗?抱歉,如果我没有正确解释这一点,任何澄清请求也可能有助于我让我的问题更清楚。
谢谢!
def optimal_portfolio(returns):
n = len(returns)
returns = np.asmatrix(returns)
N = 100
qs = [10**(-5.0 * t/N + 1.0) for t in range(N)]
# Convert to cvxopt matrices
S …Run Code Online (Sandbox Code Playgroud) 使用Ubuntu,我之前使用终端中的以下代码创建了一个mysql数据库:
$ my sql -u root -p
Run Code Online (Sandbox Code Playgroud)
然后在mysql中:
CREATE DATABASE securities_master;
Run Code Online (Sandbox Code Playgroud)
我试图使用文件浏览器来查看与此数据库相关的内容.但因为我没有权限打开文件夹/ var/lib/mysql我想更改此文件夹的权限.我在stackoverflow上做了一些搜索,并且在没有完全理解我在做什么的情况下,我使用了类似下面的内容(我的用户名为wei):
sudo chown -R root:wei /var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
或者(不幸的是我已经关闭了终端窗口所以不确定我输入的是什么)
sudo chown -R wei:wei /var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
要么
sudo chown -R wei /var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
这允许我查看目录内部并查看我的文件,所以我认为我正在取得进展.但是,一旦我这样做了,我意识到当我尝试在mysql中使用数据库时:
USE securities_database;
Run Code Online (Sandbox Code Playgroud)
我收到的错误消息如下:
ERROR 1049 (42000): Unknown database 'securities_master'
Run Code Online (Sandbox Code Playgroud)
我相信这与我之前使用chown有关.通过进一步的stackoverflow搜索来调查这一点,我现在的印象是我不应该毫不犹豫地从root获取一些文件的root权限,因为"可能发生坏事".我试图恢复root所有权:
sudo chown -R root /var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
AND/OR:
sudo chown -R root:root /var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
但不幸的是,我似乎仍然得到相同的错误消息.
如果我的问题看起来如此基本,或者这样一个新手错误,Ubuntu,Linux和mysql这里的全新手,我道歉.谢谢.