0

私は現在、ポートフォリオの選択と最適化を行うグループ プロジェクトに参加しています。参照されている論文はここにあります:(具体的には5ページと6ページ、式7-10)

http://faculty.london.edu/avmiguel/DeMiguel-Nogales-OR.pdf

以下に示すように、M-Portfolios を使用して最適化問題を作成するのに問題があります。

min (wrt w,m) (1/T) * sum_(rho)*(w'*r_t - m) (申し訳ありませんが、フォーマットを機能させることができませんでした)

st w'e = 1 (すべての重みの合計が 1 になるという条件のみ)

これまでのところ、これは私たちが試みたことです:

function optPortfolio =  portfoliofminconM(returns,theta)

% Compute the inputs of the mean-variance model
mu = mean(returns)';
sigma = cov(returns);

 % Inputs for the fmincon function
T = 120;
n = length(mu);
w = theta(1:n);
m = theta((n+1):(2*n));
c = 0.01*ones(1,n);
Aeq = ones(1,(2*n));
beq = 1;
lb = zeros(2,n);
ub = ones(2,n);
x0 = ones(n,2) / n; % Start with the equally-weighted portfolio
options = optimset('Algorithm', 'interior-point', ...
    'MaxIter', 1E10, 'MaxFunEvals', 1E10);

% Nested function which is used as the objective function
function objValue = objfunction(w,m)
    cRp = (w'*(returns - (ones(T,1)*m'))';
    objValue = 0;
    for i = 1:T
        if abs(cRp(i)) <= c;
            objValue = objValue + (((cRp(i))^2)/2);
        else
            objValue = objValue + (c*(abs(cRp(i))-(c/2)));
        end
    end

問題は、w と m のベクトルとして使用されるシータの定義から始まります。目的関数に 2 つの変数がある fmincon を適切に使用する方法がわかりません。さらに、目的関数の値は別の値を条件としており (論文に示されているように)、これは合計 264 か月の 120 か月のローリング タイム ウィンドウで実行する必要があります (したがって、for ループとif-else)

さらに情報が必要な場合は、喜んで提供します。

同様の問題に対処する例を追加で提供できる場合は、そのリンクを教えてください。

前もって感謝します。

4

1 に答える 1

0

fmincon を使用して 2 つのスカラーの関数を最小化する方法は、目的関数を単一の 2 次元ベクトルの関数として記述することです。たとえば、 のように記述f(x,y) = x.^2 + 2*x*y + y.^2f(x) = x(1)^2 + 2*x(1)*x(2) + x(2)^2ます。

より一般的には、2 つのベクトルの関数を 1 つの大きなベクトルの関数として記述します。あなたの場合、objfunction を書き直すか、次のような簡単なハックを行うことができます。

objfunction_for_fmincon = @(x) objfunction(x(1:n), x(n+1:2*n));
于 2016-04-07T12:05:43.940 に答える