python - 具有调用和最小化其他函数的函数的 Python 类
问题描述
我试图在一个试图最小化另一个函数的类中编写一个函数。
编写和调用它的正确方法是什么?我被卡住了,我不知道该怎么做。
import pandas as pd
import scipy.optimize as sco
class Optimisation:
def __init__(self, rf, expected_return, cov):
self.rf = rf
self.expected_return = expected_return
self.cov = cov
def calculate_negative_sharpe(self):
self.portfolio_return = np.sum(expected_returns * weights) * 252
self.portfolio_std = np.sqrt(np.dot(self.weights.T, np.dot(self.cov, self.weights))) * np.sqrt(252)
self.sharpe_ratio = (self.portfolio_return - self.rf) / self.portfolio_std
return -self.sharpe_ratio
def max_sharpe_ratio(expected_returns, cov, rf):
num_assets = len(expected_returns)
args = (expected_returns, cov, rf)
constraints = ({'type': 'eq', 'fun': lambda x: np.sum(x) - 1})
bound = (0.0,1.0)
bounds = tuple(bound for asset in range(num_assets))
result = sco.minimize(calculate_negative_sharpe, num_assets*[1./num_assets,], args=args, method='SLSQP', bounds=bounds, constraints=constraints)
return result
opt = Optimisation(rf, er, cov)
result = opt.max_sharpe_ratio()
print(result)
还是应该像
import pandas as pd
import scipy.optimize as sco
class Optimisation:
def __init__(self, rf, expected_return, cov):
self.rf = rf
self.expected_return = expected_return
self.cov = cov
def calculate_negative_sharpe(self):
self.portfolio_return = np.sum(expected_returns * weights) * 252
self.portfolio_std = np.sqrt(np.dot(self.weights.T, np.dot(self.cov, self.weights))) * np.sqrt(252)
self.sharpe_ratio = (self.portfolio_return - self.rf) / self.portfolio_std
return -self.sharpe_ratio
def max_sharpe_ratio(self):
self.num_assets = len(self/expected_returns)
self.args = (self.expected_returns, self.cov, self.rf)
self.constraints = ({'type': 'eq', 'fun': lambda x: np.sum(x) - 1})
self.bound = (0.0,1.0)
self.bounds = tuple(self.bound for asset in range(self.num_assets))
self.result = sco.minimize(self.calculate_negative_sharpe, self.num_assets*[1./self.num_assets,], args=self.args, method='SLSQP', bounds=self.bounds, constraints=self.constraints)
return self.result
opt = Optimisation(rf, er, cov)
result = opt.max_sharpe_ratio()
print(result)
我的目标是返回一个我可以打印或保存的结果数据框。
解决方案
推荐阅读
- excel - 使用 isNumeric 从地址中提取邮政编码
- c - 仅使用小于 0xFF 的数字获取 0x55555555,| 和 <<
- python - 比较不同大小的数据框,如果满足条件则创建一个新的
- python - 将更改 png 图像文件清晰度的代码应用于整个图像文件?
- spring-boot - 如何修复未找到合适的云连接器
- web-scraping - 可以在桌面应用程序中插入/构建的 Web 抓取 API?
- laravel - 如何合并两个模型集合并使其成为一个分页然后将其发送到 Laravel 中的视图
- python - Python递归斐波那契“树”输出
- javascript - 下一个/路由器的命令式版本不能与 Semantic-UI-React 一起使用?
- visual-studio-code - 我不能用空格键插入空格