Verfasst am: 11.08.2013, 13:34
Titel: Problem: Eingabe in die linprog und/oder fminimax Maske
Hallo goMatlab community,
mein Problem ist wie folgt. Ich habe eine 782 x 9 Matrix bestehend aus 782 Return - Observationen von 9 Aktien aus welcher ich ein Portfolio (also ein bestimmtes Set auswählen möchte).
Es sei N die Anzahl an Aktien (also 9) und T die Anzahl der Perioden (also 782)
y_j = durch. Return von Aktie j -> also y_j = 1/T * SUMME(y_jt)
w_j = Anteil von Aktie j am portfolio p
y_pt = Return von portfolio p in periode t
E_p = durch. Return von portfolio p -> also SUMME(w_j * y_j)
M_p = Minimum Return von portfolio p - > also min_t y_pt
Was versuche ich jetzt eigentlich - in Worten :
Das "Minimax-Portfolio" maximiert den Wert M_p (also den minimalen Return eines portfolios p) - unter der Bedingung dass E_p ein gesetztes minimum von beispielsweise G übersteigt. Darüber hinaus darf die Summe PortfolioAnteil nicht größer als 1 (100% sein) und es gilt 0<= w_j <= 1 .
Es handelt sich hierbei also um ein lineares optimierungsproblem mit ein paar nebenbedingungen.
intuitiv möchte ich die linprog funtion verwenden -> wobei allerdings auch die fminimax Funktion interessant klingt.
ich glaube die Nebenbedingungen in Matlab form zu bringen bekomme ich hin. Mein Problem ist dass ich die eigentlich objective function nicht packe.
Mein Ziel ist es doch die Anteil w_j zu finden -> aber je nachdem was diese Werte sind ändert sich doch die ganze Optimierung oder?
Ich wäre für Hilfe wirklich sehr dankbar, mein Supervisor meldet sich seit Wochen nicht bei mir. Ich darf mir für das Modellieren Hilfe suchen - das ist ja nicht der Kern meiner Forschung sondern nur ein Mittel zum Zweck.
Im Tausch für Hilfe biete ich gerne eine sehr angenehme und einfach zu verwendende Lösung für ein Mean - SemiVariance optimisierungsproblem welches einem heuristischen Lösungsansatz folgt um die semi-covariance Matrix als symmetrische (exogene) Matrix zu berechnen.
Vielen Dank für eure Hilfe!
Ich hoffe ich habe das Problem so gründlich wie nur möglich geschildert. Ich scheitere wirklich nur an dem Formulieren in Matlab.
vielleicht noch dieser Zusatz -> in den Markowitz modellen musste natürlich auch eine Funktion optimiert ( die (semi)-portfolio -variance) werden, aber das war irgendwie deutlich trivialer für mich. weil die covariance ja absolut unabhängig von den Anteilen des Portfolios war (im semi-variance model nur deshalb, weil ich einen heuristischen Ansatz verwendet habe).
Falls das hilft. Es ist mir ein wenig peinlich - weil überall, wirklich überall gesagt wird wie "einfach " lineare optimierung doch sei...
Mein Ziel ist es doch die Anteil w_j zu finden -> aber je nachdem was diese Werte sind ändert sich doch die ganze Optimierung oder?
Du musst angeben, wie sich der Zielfunktionswert aus den w_j ergibt.
Um deine Frage zu beantworten, müsstest du präzisieren, was folgendes bedeutet:
Zitat:
M_p = Minimum Return von portfolio p
Ist damit der schlechteste je beobachtete Gesamtreturn für das Portfolio gemeint? --> Das Problem ist meines Erachtens nicht mehr linear.
Ist damit der Gesamtreturn für die Kombination der schlechtesten Returns pro Aktie gemeint? --> Dazu müsstest du als f das spaltenweise Minimum der Return-Matrix angeben.
% Calculate the Portfolio mean with the current weights
pMean = x' * meanValue;
% Annualise the result
AnnpMean = (((1+pMean)^(row/3))-1);
% Calculate M_p -> well ... ??? shouldn't that be fval ?
pRisk = fval;
% Annualise that -> I would assume - since it is nothing more % than a return that the formular is the same as above therefore
AnnpRisk = (((1+pRisk)^(row/3))-1);
% Calculate a performance ratio called pRatio based on the % annualised data
pRatio = AnnpMean/AnnpRisk;
% for simplicity I will not find the optimal allocation right now and will % simply plot the "efficient frontier" (will that form an efficient % frontier?
hold plot(Output(4,:), Output(2,:), 'LineWidth',1) title('Efficient Frontier');
xlabel('Portfolio Risk as Minimum Return');
ylabel('Portfolio Return');
print('-dpng', '-r300', 'Efficient Frontier');
axis('on');
hlegend = legend('Efficient Frontier');
set( hlegend, 'Location', 'NorthEast');
set( hlegend, 'FontAngle','italic');
grid on;
hold off
die Frage wird auch in dem Paper für mich nicht klar beantwortet. Wenn es ein lineares Minimierungsproblem sein soll, kann aber an sich nur die zweite Variante gemeint sein. Ob das sinnvoll ist, ist eine andere Frage.
Den Code habe ich mir jetzt nicht genauer angeschaut, da mir nicht klar ist, was er mit der Frage zu tun hat.
Ich habe linear nur deshalb geschrieben, weil der Autor selbst sagt es sei ein lineare Problem. - > direkt über (1a)
der code ist mein Lösungsansatz. mit dem Problem das
1. die objective function einfach nicht korrekt ist
2. eine der inequality constraints (1b) entweder nicht korrekt oder zumindest nicht richtig formuliert ist.
Wenn M_p maximiert werden soll, musst du bei linprog allerdings -M_p angeben, weil linprog ja minimiert.
Ich erkenne bei 1b keinen Fehler. Woraus schließt du, dass du da einen Fehler hast?
Deutlich einfacher wird es, wenn du im Code die gleichen Variablen verwendest wie in den Beschreibungen. Aber das hatten wir glaube ich schon mal.
Grüße,
Harald
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.