WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Problem: Eingabe in die linprog und/oder fminimax Maske

 

HarryMarkowitz
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 04.08.13
Wohnort: Durham
Version: ---
     Beitrag Verfasst am: 11.08.2013, 13:34     Titel: Problem: Eingabe in die linprog und/oder fminimax Maske
  Antworten mit Zitat      
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)
Code:

y_jt = Return von Aktie j in periode t

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
 

So viel zur Grundlage.

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.

Optimierungsproblem :
Code:

max M_p

nebenbedingungen :

SUMME(w_j * y_jt) - M_p >= 0,  t = 1,...,T
SUMME(w_J * y_j) >= G
SUMME (w_j) =1
w_j >= 0
 

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.

Liebe Grüße

Daniel
Private Nachricht senden Benutzer-Profile anzeigen


HarryMarkowitz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 04.08.13
Wohnort: Durham
Version: ---
     Beitrag Verfasst am: 11.08.2013, 14:33     Titel:
  Antworten mit Zitat      
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...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.08.2013, 15:20     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
HarryMarkowitz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 04.08.13
Wohnort: Durham
Version: ---
     Beitrag Verfasst am: 11.08.2013, 15:33     Titel:
  Antworten mit Zitat      
hey Harald - vielen Dank schon mal für deine Antwort

Code:


%   Input Observation matrix
inputSample = P1;

[row, col] = size(inputSample);


%   Calculate Average Mean Return for each asset as a column vector
meanValue = mean(inputSample);

meanValue = meanValue';

%   A row vector of required minimum Returns.
G = 0.0000001:0.000001 : 0.1;



%   #####Constraints#####

%   Equality Constraints
Aeq     = ones(1, col);

Beq     = 1;

%   Inequality Constraints MISSING ONE OF THE CONSTRAINTS HERE - NO IDEA
%   HOW TO IMPLEMENT THAT I will give it a try

Aineq   = [ -meanValue
            -inputSample ] % it should be like this -> but maybe the formating is wrong

G = 0.0000001:0.000001 : 0.1;

Bineq   = [ G
            -M_p ]          %   normally I would only have G as right handside inequality
%   Lower and Upper Bounds for weights

lb      = zeros(col,1);

ub      = ones(col,1);

%   not really sure
x0      = [1 0 0 0 0 0 0 0 0];

x0      = x0';


for i=1:1:100000,
   
    [x, fval, converge] = linprog(M_p,Aineq,-G(1,i),Aeq,Beq,lb,ub,x0,options);
   
    if converge == 1
       
        %   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;
       
        %   Produce a matrix that will store the output in the following
        %   form
        %
        %   Output(1,1)     --->        pMean
        %   Output(2,1)     --->        AnnpMean
        %   Output(3,1)     --->        pRisk
        %   Output(4,1)     --->        AnnpRisk
        %   Output(5,1)     --->        pRatio
        %   Output(6,1)     --->        x(1,1)
        %   Output(7,1)     --->        x(2,1)
        %   Output(8,1)     --->        x(3,1)
        %   Output(9,1)     --->        x(4,1)
        %   Output(10,1)    --->        x(5,1)
        %   Output(11,1)    --->        x(6,1)
        %   Output(12,1)    --->        x(7,1)
        %   Output(13,1)    --->        x(8,1)
        %   Output(14,1)    --->        x(9,1)
        %
        Output(1,i)  =   pMean;
        Output(2,i)  =   AnnpMean;
        Output(3,i)  =   pRisk;
        Output(4,i)  =   AnnpRisk;
        Output(5,i)  =   pRatio;
        Output(6,i)  =   x(1,1);
        Output(7,i)  =   x(2,1);
        Output(8,i)  =   x(3,1);
        Output(9,i)  =   x(4,1);
        Output(10,i) =   x(5,1);
        Output(11,i) =   x(6,1);
        Output(12,i) =   x(7,1);
        Output(13,i) =   x(8,1);
        Output(14,i) =   x(9,1);
       
        %   clear unnecessary variables
        clear pMean AnnpMean pRisk AnnpRisk pRatio x
       
        continue
   
    else
       
        break
   
    end
   
end

% 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

%   clearvars

clearvars -except P1 P2 P3 P4 Output
                       


 



das nur so als kleinen Gedankengang meinerseits.

M_p -> setzt sich (wenn ich das richtig verstehe ) zusammen aus :

Return y des portfolios p in periode t -> also y_pt

M_p = min_t y_pt (ich verstehe nicht ganz was der index bei dem min soll um ehrlihc zu sein.

Ich lade einfach mal das Problem wie vom author (Young , 1998) formuliert hoch.

Danke Harald!

Screen Shot 2013-08-11 at 15.32.08.png
 Beschreibung:
Young(1998)

Download
 Dateiname:  Screen Shot 2013-08-11 at 15.32.08.png
 Dateigröße:  387.04 KB
 Heruntergeladen:  553 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.08.2013, 15:45     Titel:
  Antworten mit Zitat      
Hallo,

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
HarryMarkowitz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 04.08.13
Wohnort: Durham
Version: ---
     Beitrag Verfasst am: 11.08.2013, 15:50     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.08.2013, 17:05     Titel:
  Antworten mit Zitat      
Hallo,

M_p wird in dem Code nicht definiert. Meine Ansichten dazu habe ich geschrieben. Ich würde
Code:
M_p = min(returns)

setzen.

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.