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

Optimierung mean - mean absolute deviation model . Umsetzung

 

HarryMarkowitz
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 04.08.13
Wohnort: Durham
Version: ---
     Beitrag Verfasst am: 04.08.2013, 15:33     Titel: Optimierung mean - mean absolute deviation model . Umsetzung
  Antworten mit Zitat      
Hallo, das ist mein erster Post hier. Hoffe ich mache alles richtig.

Ich versuche verschiedene Portfoliooptimierungsmodelle in Matlab nachzubauen.
Ich habe das mean - variance model nach Markowitz mit quadprog nachbauen können und versuche mich nun am mean - mean absolute Deviation (MAD) Model nach Konno.

es handelt sich um ein lineares optimierungsverfahren. Opti Problem als screenshot angehängt.
was noch fehlt. die summe der portfolio gewichte muss 1 ergeben.

in worten . Minimiere MAD (mean absolute deviation) mit portfolio wichtung wj . kein short - selling (wichtungen nicht unter null ) .
delta = min. target mean return

Kann mir jemand helfen ? ich verstehe einfach nicht wie ich die optimierung zum laufen bringen kann. bei quadprog hab hat das alles mehr sind gemacht . hatte die covariances, means und die restrictions.

Ich wäre sehr dankbar wenn mir jemand helfen könnte.

Liebe Grüße und ein schönes Wochenende

Daniel

Screen Shot 2013-08-04 at 15.26.37.png
 Beschreibung:
Opti. Problem

Download
 Dateiname:  Screen Shot 2013-08-04 at 15.26.37.png
 Dateigröße:  108.97 KB
 Heruntergeladen:  709 mal
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: 04.08.2013, 17:44     Titel:
  Antworten mit Zitat      
bump.

i cannot make the 1/S thing work in the optimisation. should that be the linear part b in linprog?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 04.08.2013, 17:51     Titel:
  Antworten mit Zitat      
halli hallo ^^ bumping ist erst nach 24 stunden erblaubt ^^ sihe dazu go matlab knigge Smile
was hast du denn bis jetzt so programmiert? was funktioniert nicht? welche fehler treten auf? sihe dazu richtig fragen aus meiner signatur Smile. soll dir jemand das programm schreiben ? dann solltest du dich ans unterforum programmieraufträge wenden.
_________________

richtig Fragen
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: 04.08.2013, 17:55     Titel:
  Antworten mit Zitat      
hey, danke schonmal für deine Hinweise. Entschuldige bitte - kannte die "Knigge" nicht. (werd ich mir nachher mal durchlesen).

Ich poste gliech mal meinen code soweit. ich würde es ja schon gern selbst schaffen.
Ansonsten werde ich mich mal an das unterforum wenden. Kostet das Geld? wenn ja - viel ? (sollte ja an sich nicht mehr sein als eine handvoll variablen in linprog zu hauen)

Danke.
Werde mich gleich mit meinem Code melden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 04.08.2013, 18:19     Titel:
  Antworten mit Zitat      
wie viel das kostet ist verhandlungs sache zwischen dir und dem ders gerne machen möchte Smile
_________________

richtig Fragen
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: 05.08.2013, 02:07     Titel:
  Antworten mit Zitat      
Ich hab meinen code noch ein paar mal überarbeitet und versucht so viele Fehler wie möglich zu korrigieren - aber ich komme nicht weiter.
Hier der aktuelle Stand der Dinge :

Code:

%   This script will calculate and plot the efficient frontier for a
%   mean - mean absolute deviation model in the Konno context.

%   Take sample 'Sample' and calculate the mad -> transpose PeriodMAD
%   and store variable in the workspace

PeriodMAD = mad(Sample);
PeriodMAD = PeriodMAD';

assignin('base','PeriodMAD',PeriodMAD);


%   get number of Assets ( i am using 9 stocks)

nAssets = numel(PeriodMAD);


%   Set the first targetreturn

targetreturn = 0.000001;


%   Not sure if that is right -> allow none of the MAD values to lower than
%   0

nonnegativityMAD = zeros(nAssets, 1);

%   Conformity with the linproq notation

f = PeriodMAD;


%   Set some restrictions -> as shown in the graphic I have provided. NOt
%   sure if I set them up correctly to be honest.
%   PeriodDeviations includes nothing more than Observation at time(i) -
%   mean of the asset (PeriodDeviations -> (9,1) vector)
%   PeriodReturns -> ln returns for the observations 782 -> vector (9,1)

Aeq = [ PeriodDeviations
        -PeriodDeviations
        -PeriodMAD
        -PeriodReturns   ];

Beq = [ PeriodMAD
        -PeriodMAD
        nonnegativityMAD
        -targetreturn];

   
%   Set lower and upper boundaries for the weights -> 0<= x <= 1    
   
lb = zeros(nAssets,1);
ub = ones(nAssets, 1);


%   Copied that line from the quadprog example given on the internet
%   changed interior-point-convex to interior-point

options = optimset('Algorithm','interior-point');
options = optimset(options,'Display','iter','TolFun',1e-10);


for i=1:100000;

    x = linprog ( f,[],[],Aeq,Beq,lb,ub,[], options );


    %   Not sure if that is correct. Store respective mean in Output(1,i)
    %   do the same for the portfolio MAD -> is that correct?
    %   This is a modified "Sharpe- Ratio" or Konno Ratio. the quotient of
    %   the former two variables
    %   Finally store the weights x in Output as well -> 9 variables
    %   therefore Output(5,i) to Output(13,i)
   
    Output(1,i) = x' * PeriodReturns;
    Output(2,i) = x' * PeriodMAD;
    Output(3,i) = (Output(1,i)/Output(2,i));
   
    Output(5,i) = x(1,1);
    Output(6,i) = x(2,1);
    Output(7,i) = x(3,1);
    Output(8,i) = x(4,1);
    Output(9,i) = x(5,1);
    Output(10,i) = x(6,1);
    Output(11,i) = x(7,1);
    Output(12,i) = x(8,1);
    Output(13,i) = x(9,1);
   
   
    %   now increment targetreturn -> repeat the entire process as long as
    %   linprog finds a solutions (converges to a solution) otherwise
    %   stop/break
   
    targetreturn = targetreturn + 0.000001;
   
    if(exitflag == 1)
   
        continue
   
    else
       
        break

    end

end

%   Find highest KonnoRatio - Quotient of Returns/Risk stored as
%   maxKonnoRatio then find position in Output

maxKonnoRatio = max(Output(3,:));

[row col] = find(maxKonnoRatio == Output(3,:));


%   finally create and display an array that contains all the information
%   for the optimal allocation.

OptimalAll = [  Output(1,col)
                Output(2,col)
                Output(3,col)
                0
                Output(5,col)
                Output(6,col)
                Output(7,col)
                Output(8,col)
                Output(9,col)   ]


%   and hopefully draw the efficient frontier

plot(Output(2,i),Output(1,i))



 


werde mich später darum kümmern dass alle werte noch aufs jahr hochgerechnet werden könnten.

Aktuell bekomme ich folgenden Fehler :

Error using linprog (line 231)
The number of rows in Aeq must be the same as the number of elements of beq.

Error in MAD (line 65)
x = linprog ( f,[],[],Aeq,Beq,lb,ub,[], options );

EDU>>

ich verstehe ja auch - dass das so sinn macht und auch was mir der Fehler sagen will . mein Aeq besteht auf 36 x 1 und Beq aus 28 x 1

liegt am targetreturn -> das is ja nur ein einzelner wert.
Bei quadprog hat das so auch funktioniert. da war die Bedingung
dass der Portfolio return >= targetreturn sein musste.
hier geht das leider nicht.

Ich hoffe jetzt ist die Situation besser verdeutlicht -> ich hänge seit heute Mittag fast ohne Pause dran. Bin noch Matlab und programmieranfänger.
Sorry - falls die Frage/ das Problem kinderleicht zu lösen ist , ich schaff es einfach nicht.

Vielen Dank schonmal und Gute Nacht

Daniel
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: 05.08.2013, 08:57     Titel:
  Antworten mit Zitat      
Hallo,

stehen die x in den Formeln für Multiplikation?

Das 1/S scheint nur ein Skalierungsfaktor zu sein, wäre damit also vernachlässigbar.

Die Verwendung unterschiedlicher Variablennamen in Formulierung und Code macht es schwierig, das hier zu durchblicken.

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: 05.08.2013, 12:47     Titel:
  Antworten mit Zitat      
die x in den Formeln stehen für Anteile der Aktien im Portfolio von 0 - 1.
s steht für die Anzahl der Observationen -> 1/782 in meinem Fall.
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: 05.08.2013, 12:53     Titel:
  Antworten mit Zitat      
Hallo,

in deinen Formeln kommt nur ein x vor. Ich hätte an sich vermutet, dass die w_i die besagten Anteile sind?

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: 05.08.2013, 15:02     Titel:
  Antworten mit Zitat      
ah entschuldige ich dachte du meintest in meinem Code. Ja - im optimierungsproblem sind die w_i die Anteile und X stellt - wenn ich mich richtig erinnere - eine zufallsvariable "Portfolio" da. die Combi aus allen w_i bildet dann eine ausprägung von X .
ist aber ansich nur Mathe.käse der für das problem egal sein sollte.

Für Hilfe würde ich auch zahlen.
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: 05.08.2013, 16:07     Titel:
  Antworten mit Zitat      
Hallo,

ich meinte nicht das große X, sondern die vielen kleinen x (Kreuze) in deinen Formeln.

Zitat:
ist aber ansich nur Mathe.käse der für das problem egal sein sollte.

Für die Lösung eines Optimierungsproblems halte ich eine korrekte mathematische Formulierung für nicht unwichtig.

Zitat:
Für Hilfe würde ich auch zahlen.

Ich helfe gerne kostenlos. Allerdings blicke ich eben noch nicht durch, welche Variablen in den Formeln welchen Variablen in deinem Code entsprechen. Wenn du das einheitlich machen könntest, wäre das recht hilfreich.

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: 05.08.2013, 17:34     Titel:
  Antworten mit Zitat      
ich glaube ich kann jetzt endlich folgen - der screenshot (das math. optimisation problem) enthält x als Zeichen für eine Multiplikation - es ist seltsam, aber ich habe mir das irgendwann mal so angewöhnt.
die objective function als Beispiel -> steht also für 1/s * Sum(y_i)

Vielen Dank schon mal Harald. Ich helfe gelegentlich beim Spiele-programmieren in C# aus und kenne die schwierigkeiten verschiedener Notationen zu gut. Es ist immer etwas kompliziert - für mich selbst macht meine Notation Sinn (leider nur für mich selbst)
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: 05.08.2013, 19:28     Titel:
  Antworten mit Zitat      
Hallo,

ich fände es weiterhin hilfreich, wenn du die verwendeten Variablen im Code denen in der Problemformulierung angleichen könntest oder umgekehrt. Dann ließe sich das ganze viel einfacher nachvollziehen.

Zwischenzeitlich habe ich einen genaueren Blick auf die Gleichungen geworfen. Wenn ich das richtig sehe, ergeben die ersten beiden NB zusammen eine Gleichungs-NB, die zusammen mit dem "where..." am Ende zu einer >= 0 - Bedingung wird.

Letzten Endes solltest du also in deinem Fall nur Ungleichungsbedingungen haben. Du hast die NB aber als Gleichungsbedingungen angegeben (auf die Reihenfolge der Argumente achten).

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.