| |||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||
|
Folio - Modelling examples from 'Getting started' Description
Source Files By clicking on a file name, a preview is opened at the bottom of this page. Data Files
foliomiqc.mos
(!******************************************************
Mosel Example Problems
======================
file foliomiqc.mos
``````````````````
Modeling a small MIQCQP problem
to perform portfolio optimization.
-- Maximize return with limit on variance
and limited number of assets ---
(c) 2008 Fair Isaac Corporation
author: S.Heipcke, July 2008, rev. Mar. 2013
*******************************************************!)
model "Portfolio optimization with MIQCQP"
uses "mmxnlp"
parameters
MAXVAL = 0.3 ! Max. investment per share
MINAM = 0.5 ! Min. investment into N.-American values
MAXNUM = 4 ! Max. number of different assets
MAXVAR = 1.25 ! Max. allowed variance
end-parameters
declarations
SHARES = 1..10 ! Set of shares
NA: set of integer ! Set of shares issued in N.-America
RET: array(SHARES) of real ! Estimated return in investment
VAR: array(SHARES,SHARES) of real ! Variance/covariance matrix of
! estimated returns
end-declarations
initializations from "folioqp.dat"
RET NA VAR
end-initializations
declarations
frac: array(SHARES) of mpvar ! Fraction of capital used per share
buy: array(SHARES) of mpvar ! 1 if asset is in portfolio, 0 otherwise
end-declarations
! Objective: total return
Return:= sum(s in SHARES) RET(s)*frac(s)
! Minimum amount of North-American values
sum(s in NA) frac(s) >= MINAM
! Spend all the capital
sum(s in SHARES) frac(s) = 1
! Limit variance
sum(s,t in SHARES) VAR(s,t)*frac(s)*frac(t) <= MAXVAR
! Upper bounds on the investment per share
forall(s in SHARES) frac(s) <= MAXVAL
! Limit the total number of assets
sum(s in SHARES) buy(s) <= MAXNUM
forall(s in SHARES) do
buy(s) is_binary
frac(s) <= buy(s)
end-do
setparam("XPRS_verbose", true)
! Solve the problem
maximize(Return)
! Solution printing
writeln("With a max. variance of ", MAXVAR, " and at most ", MAXNUM,
" assets,\n total return is ", getsol(Return))
forall(s in SHARES) writeln(s, ": ", getsol(frac(s))*100, "%")
end-model
| |||||||||||||||||||||||||||||
| © Copyright 2025 Fair Isaac Corporation. |