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

Zinsstrukturkurve mit Svensson-Methode

 

Philipp_1980

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2009, 13:16     Titel: Zinsstrukturkurve mit Svensson-Methode
  Antworten mit Zitat      
Hallo Zusammen,

ich komm ber der Simulation einer Zinsstrukturkurve einfach nicht weiter. Irgendwas muss ich falsch programmiert haben, denn im Ergebnissen kommen negative Zero Rates raus. Kann mir da jemand helfen. Anbei habe ich Euch meinen Code begefügt...die Funktion IRFunctionCurve.fitSvensson ist Bestaqndteil der Fixed Income Toolbox...

Für Hilfe wäre ich echt wahnsinnig dankbar!!!!
Viele Grüße
Philipp

Code:
clear;

n=length(xlsread('DATA Bundesanleihen apr07_Probe.xls',1,'E10:E1000')); % Berechnet automatisch die Länge des betrachteten Vektors


%--------------------------------------------------------------------------
% Zunächst müssen die Inputdaten aus der Exceltabelle ausgelesen werden.
%--------------------------------------------------------------------------

Settle=repmat(datenum('11-Apr-2007'),[n 1]); % Settle gibt den Settlement Date an. Das ist der Zeitpunkt, für den die Kurve berechnet werden soll.
                   %D.h. der Zeitpunkt, für den ich die aktuell zu diesem
                    %Zeitpunkt vorherrschenden Credit Spreads bestimmen
                    %möchte.
%Settle=datenum('11-Apr-2007');                    
% Der Befehl "repmat(x,[a,b])" erzeugt eine Matrix mit a Zeilen und b
% Spalten in der immer das gleiche Element x steht. So kann ich aus EINEM
% Settlement Date eine MATRIX mit lauter Settlement Dates machen, die in
% ihrer Dimension mit den Matrizen für Stückzinsen, RLZ, Kuponhöhen etc.
% übereinstimmt.

Maturity=xlsread('DATA Bundesanleihen apr07_Probe.xls',1,'P10:P48')+datenum('30-Dec-1899'); % "+datenum('30-Dec-1899')" hinzuaddieren, wenn
                  %das Datum in Excel noch nicht in das
                  %Matlab-Zahlenformat konvertiert wurde.
                  %datenum('30-Dec-1899')entspricht einem Wert von
                  %693960.
                           
                            % mit dem Befehl "xlsread" lese ich Daten direkt aus Excel aus.
                            % Dabei werden bei Zahlen Kommas automatisch
                            % durch einen Punkt ersetzt. Erstes bezeichnet
                            % den Excel-Dateinamen, Zweites das
                            % Tabellenblatt, Drittes den auszulesenden
                            % Bereich.
                           
DirtyPrice=xlsread('DATA Bundesanleihen apr07_Probe.xls',1,'C10:C48')+xlsread('DATA Bundesanleihen apr07_Probe.xls',1,'R10:R48');

CleanPrice=xlsread('DATA Bundesanleihen apr07_Probe.xls',1,'C10:C48');

CouponRate=xlsread('DATA Bundesanleihen apr07_Probe.xls',1,'E10:E48')/100;

Instruments=[Settle,Maturity,DirtyPrice,CouponRate];


PlottingPoints = datenum('11-Apr-2007'):180:max(Maturity(:,1)); %Gibt an, für welchen Zeitraum  die Funktionswerte bestimmt werden sollen,
                        % und der Graph geplottet werden soll.
                 

InstrumentPeriod = repmat(1,n,1);
   
Period=1*ones(n,1); % Das bedeutet, das EINMAL pro Jahr eine Kuponzahlung stattfindet!

Basis=9*ones(n,1); % "Basis" definiert die Day Count Convention. "6" bezieht sich auf die Europäische Konvention 30/360! -->Überprüfen, was die richtige ist!!!
                    % "1" ist act/act. Specifically, bases 0 to 7 are
                    % assumed to have semiannual compounding, while bases 8 to 12
                    %are assumed to have annual compounding regardless of the period of the bond's coupon payments (including zero-coupon bonds)
%Compounding=1;

EndMonthRule=0*ones(n,1);

LastCouponDate=xlsread('DATA Bundesanleihen apr07_Probe.xls',1,'L10:L48')+datenum('30-Dec-1899'); % Gibt die Daten der letzten
                   %Kuponzahlungen der Anleihen wieder!

FirstCouponDate=xlsread('DATA Bundesanleihen apr07_Probe.xls',1,'H10:H48')+datenum('30-Dec-1899');
                   
IssueDate=xlsread('DATA Bundesanleihen apr07_Probe.xls',1,'N10:N48')+datenum('30-Dec-1899');
                   
                   
Yield = bndyield(CleanPrice, CouponRate, Settle, Maturity, Period, Basis,...
EndMonthRule); %,IssueDate,FirstCouponDate,LastCouponDate );

%Yield = bndyield(Price, CouponRate, Settle, Maturity, Period,...
%Basis, EndMonthRule, IssueDate, FirstCouponDate, LastCouponDate)
%--------------------------------------------------------------------------
% Auf Basis der Inputdaten wird nun die Svensson-Methode durchgeführt.
%--------------------------------------------------------------------------



myfitoptions = IRFitOptions([5.82 -2.55 -.87 0.45 3.9 0.44],'FitType','Yield'); %Es wird die quatrierte Renditeabweichung minimiert. Die Default-
            %einstellung ist Minimierung über den durationweightedprice.
SvenssonModel=IRFunctionCurve.fitSvensson('Zero',datenum('11-Apr-2007'),Instruments,'Compounding',1,'Basis',9,'IRFitOptions',myfitoptions,...
   'InstrumentEndMonthRule',EndMonthRule,'InstrumentBasis',Basis,'InstrumentPeriod',Period);
    %'Zero': Es wird Zero Curve berechnet


plot(PlottingPoints,SvenssonModel.getZeroRates(PlottingPoints),'g')
hold on
scatter(Maturity,Yield,'black')



DAS WARS! ÜBER HILFE WÜRDE ICH MICH SEHR SEHR FREUEN!!!

Edit by Bijick: Code-Umgebung ergänzt. Bitte in Zukunft selbst dran denken (Code-Button mittig über dem Eingabefeld)! Danke Smile
Verschoben: 15.05.2009, 12:49 Uhr von Bijick
Von Grafiken und Plots nach Toolboxen


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 15.05.2009, 12:53     Titel:
  Antworten mit Zitat      
Hallo Philipp,

ich hab die Frage mal verschoben, da man wohl die Toolbox braucht, um den Code zu verstehen. Für die Zukunft wäre es sicher günstig, wenn Du die langen Einleseroutinen Deines Codes weglassen und dafür Beispieldaten bereitstellen würdest, damit man den Code auch ausführen und Dein Problem nachvollziehen kann.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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 - 2024 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.