javascript - 坚持使用线性优化函数优化投资组合权重
问题描述
语境
我目前正在寻求建立一个优化功能来建立投资组合权重。它类似于 excel 求解器或 google 表格求解器功能(尽管有问题)。虽然它的工作方式与 excel VBA 不同。这是我第一次玩它。下面是脚本:
function PortfolioOptimisation() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
var assets = ['AssetOne','AssetTwo','AssetThree','AssetFour','AssetFive',
'AssetSix','AssetSeven','AssetEight']; //What I using to optimise variables
var weights = ss.getRangeByName(assets);
// The variables to optimise
var factors = ['OptimisationExpectedReturn','OptimisationExpectedVol','OptimisationNegativeReturn',
'OptimisationPositiveReturns','OptimisationPositiveRisk','OptimisationNegativeRisk',
'OptimisationSortinoRatio','OptimisationSharpeRatio']; //Store it in a variable as I do not want to keep typing up the named ranges.
var sumWeights = ss.getRangeByName('OptimisationWeightsSum')
var optimalPortfolios = ss.getRangeByName(factors);
// Call the optimiser engine
var engine = LinearOptimizationService.createEngine();
engine.addVariable(optimalPortfolios[0]);// Add first variable,
// Add constraints: weights =1, Sum of weights =1, weights = greater than 0, less than or equal to 1.
var constraint = engine.addConstraints([0.0],[1.0],[weights,sumWeights],[weights]);
这就是我试图将其应用于: 电子表格
它包含将使用优化函数计算的每个单元格中的公式。
问题
如何执行优化功能以根据电子表格中的“投资组合部分/列”找到最佳值?我该如何改进上面的代码?
例如,在电子表格的第二个选项卡/工作表中,在第一个投资组合名称上,我想通过最大化 Sortino 比率并将其最小化来优化资产的权重。那么使用优化引擎,可以帮助我实现这一目标的资产的最佳权重是多少?我想对投资组合列中列出的其他投资组合做同样的事情。
解决方案
正如文档中解释的那样,找到您应该运行的最佳值engine.solve()
。这将返回值,因此您需要将它们存储在一个变量中,然后在您想要的任何地方使用它们。
...
var constraint = engine.addConstraints([0.0],[1.0],[weights,sumWeights],[weights]);
// Get the result of the optimization engine
var solution = engine.solve()
另请记住,solve()的默认截止日期为 30 秒。如果您想修改默认截止时间,只需将您想要的秒数作为参数传递,就像这样engine.solve(300)
。此外,检查可应用于您的解决方案的这些方法,例如,确定它是可行的还是最优的。
推荐阅读
- mysql - SQL中将INT类型的YYYYMMDDHHMMSS改为VARCHAR的YYYY-MM-DD
- excel - VBA 和目录有什么问题?
- php - PHP mail() 函数没有做它应该做的事情
- c# - 分布式事务完成。在新事务或 NULL 事务中登记此会话。在第一个 Scope.complete() 之后
- javascript - id 未在联系人列表中分配
- arrays - 访问 JSON 字符串数组
- javascript - 如何进行递归承诺调用?
- r - 使用 R 生成分类散点图
- caddy - 球童:动态重定向 www 到非 www 反之亦然
- python-3.x - Discord Music bot VoiceClient' 对象没有属性 'create_ytdl_player'