action portfoliooptimizer_post_portfolio_optimization_maximum_ulcer_performance_index { label: "Maximum Ulcer Performance Index Portfolio" description: "Compute the asset weights of the maximum Ulcer Performance Index portfolio, optionally subject to: \n* Minimum and maximum weights constraints\n* Maximum group weights constraints\n* Minimum and maximum portfolio exposure constraints\n\nNotes: \n* This endpoint will return an error if the maximum Ulcer Performance Index portfolio has a negative Ulcer Performance Index\n\nReferences\n * [Peter G. Martin, Ulcer Index, An Alternative Approach to the Measurement of Investment Risk & Risk-Adjusted Performance](http://www.tangotools.com/ui/ui.htm)\n * [A. Chekhlov, S. Uryasev, M. Zabarankin, Portfolio Optimization with Drawdown Constraints, Supply Chain and Finance, p 209-228](https://doi.org/10.1142/9789812562586_0013)\n * [A. Chekhlov, S. Uryasev, M. Zabarankin, Drawdown Measure in Portfolio Optimization, International Journal of Theoretical and Applied FinanceVol. 08, No. 01, pp. 13-58 (2005)](https://www.worldscientific.com/doi/10.1142/S0219024905002767)\n" provider: portfoliooptimizer method: POST path: "/portfolio/optimization/maximum-ulcer-performance-index" encoding: json input: { type: "object" required: ["assets", "riskFreeRate"] properties: { assets: { type: "array" items: { type: "object" required: ["assetPrices"] properties: { assetPrices: { type: "array" description: "assetPrices[t] is the price of the asset at the time t" items: { type: "number" } } } } } constraints: { type: "object" properties: { assetsGroups: { type: "array" items: { type: "array" description: "assetsGroups[k] is the indexes of the assets belonging to the assets group k in the portfolio; exclusive with assetsGroupsMatrix" items: { type: "integer" } } } assetsGroupsMatrix: { type: "array" description: "assetsGroupsMatrix[k][i] is the weight of the asset i in the group of assets k; exclusive with assetsGroups" items: { type: "array" items: { type: "number" } } } maximumAssetsGroupsWeights: { type: "array" description: "maximumAssetsGroupsWeights[k] is the maximum weight of the assets group k in the portfolio, in percentage between 0 and 1 if assetsGroups is provided" items: { type: "number" } } maximumAssetsWeights: { type: "array" description: "maximumAssetsWeights[i] is the maximum weight of the asset i in the portfolio, in percentage" items: { type: "number" } } maximumPortfolioExposure: { type: "number" description: "The maximum portfolio exposure; must be higher than or equal to minimumPortfolioExposure" } minimumAssetsWeights: { type: "array" description: "minimumAssetsWeights[i] is the minimum weight of the asset i in the portfolio, in percentage" items: { type: "number" } } minimumPortfolioExposure: { type: "number" description: "The minimum portfolio exposure; must be lower than or equal to maximumPortfolioExposure" } } } riskFreeRate: { type: "number" description: "The risk free rate" } } } output: { type: "object" required: ["assetsWeights"] properties: { assetsWeights: { type: "array" description: "assetsWeights[i] is the weight of the asset i in the portfolio, in percentage" items: { type: "number" } } } } }