Binomial-Baum Function

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Maxel
Beiträge: 9
Registriert: Mi Apr 03, 2019 2:12 pm

Re: Binomial-Baum Function

Beitrag von Maxel »

Hallo Jörg,

leider scheint der Code immer noch keine Aktienkurse zu simulieren.

Code: Alles auswählen

#Aktienkurs entwickeln und Ausfallwahrscheinlichkeit
  
  S <- lambda <- matrix(0, n, n)
  
  S[1,1]      <- S0
  lambda[1,1] <- gamma/S[1,1]
  
  for (j in 2:n) {
    S[j,j]      <- S[j-1,j-1]*d* exp(lambda[j-1,j-1]*dt)
    lambda[j,j] <- gamma/S[j,j]
    
    if (j<3) break
    i <- 2:(j-1)
    S[i,j]      <- S[i-1,j-1]*u* exp(lambda[i,j-1]*dt)
    lambda[i,j] <- gamma/S[i,j]
Soll Quasi heißen(lambda ausser Acht gelassen): starte mit S0 und rechne einmal mit u und einmal mit p. Dann in der neuen Schleifen beide Werte jeweils mit u und p und so weiter.
Bei if (...) kann nur ein Element geprüft werden - if nimmt einfach das erste Element auch wenn Dein Vergleich Call==0 eine ganze Matrix mit
logischen Werten erzeugt. So wie es jetzt im Code steht ist if (Call == 1) ... identisch mit if (Call[1,1] == 1) ...
Ok, gedachte habe ich wenn Call == 1 also True dann soll Call[i,j] nicht am Anfang sonder am Ende beginnen bzw. wenn das erstemal k * der Aktienkurs größer als der Callprice ist. Also wenn der Callpreis 100,- ist und Call ==1 ist bei einem Wandelverhältniss von k =10 wird ab einen Kurs von 10,- die Aktie der Kurs zurückgerechnet, auch wenn die Laufzeit noch nicht abgelaufen ist.

Beste Grüße
Maxel
Maxel
Beiträge: 9
Registriert: Mi Apr 03, 2019 2:12 pm

Re: Binomial-Baum Function

Beitrag von Maxel »

Hey ich bin es nochmal,

oder kann es sein, dass der Fehler bei den geschweiften Klammern liegt, da diese nicht passen?
Da bin ich noch nicht so hinter gestiegen, ob es für den Syntax wichtig ist, dass dort irgendeine Klammer ist oder ob es die "richtige" sein muss.

Gruß
Max
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Binomial-Baum Function

Beitrag von jogo »

Hallo Maxel,

der Code, den ich Dir geliefert habe (Überschrift: "ich habe den Code etwas bearbeitet:"), funktioniert zumindest.
Er liefert als output:

Code: Alles auswählen

> CCBond(S0=23, FV=100, ttm=3.6, r=0.015, sigma=0.1, L=0.677, k=12, CallPrice=0, rho=7, c=0.03, PD=0.076, CallYN=0)
[1] 104.1985
Es gab 50 oder mehr Warnungen (Anzeige der ersten 50 mit warnings())
Da er keine syntaktischen Fehler enthält (der R-Interpreter hätte sonst gemeckert), sind alle Klammernpaare vollständig.
Auf den kapitalen Logikfehler habe ich Dich hingewiesen. R quittiert den Fehler aber nur mit Warnmeldungen.

Code: Alles auswählen

Es gab 50 oder mehr Warnungen (Anzeige der ersten 50 mit warnings())
> warnings()
Warnmeldungen:
1: In if (Call == 1) { ... :
  Bedingung hat Länge > 1 und nur das erste Element wird benutzt
2: In if (Call == 1) { ... :
  Bedingung hat Länge > 1 und nur das erste Element wird benutzt
  ...
Ich hatte die verantwortliche Stelle in meinem Quelltext mit einem entsprechenden Kommentar versehen.

Gruß, Jörg
Maxel
Beiträge: 9
Registriert: Mi Apr 03, 2019 2:12 pm

Re: Binomial-Baum Function

Beitrag von Maxel »

Hi Jörg,

sorry hab hab nicht geschrieben, was das eigentliche Problem ist. Ich meine mit den nicht simulierten Aktienkursen, dass es egal ist welchen Wert ich für S0 eingebe, da ich immer das gleiche Ergebnis bekomme. Weil wenn ich Sigma oder k ändere ebenfalls sich kaum etwas am Ergebnis ändert.

Gruß
Max
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Binomial-Baum Function

Beitrag von jogo »

Hallo Max,

bei dem Problem kann ich nicht helfen, denn ich weiß nicht, wie der Algorithmus aussieht. Und deshalb weiß ich auch nicht, was als Ergebnis der Funktion rauskommen soll bzw. welche Ergebnisse bei welcher Parameterkonstellation plausibel sind bzw. welche Veränderungen des Ergebnisses bei gewissen Veränderungen der Parameter zu erwarten sind.

Gruß, Jörg
p.s.:
Verdammt Jim, wir sind Programmierer - keine Finanzmathematiker.
Maxel
Beiträge: 9
Registriert: Mi Apr 03, 2019 2:12 pm

Re: Binomial-Baum Function

Beitrag von Maxel »

Hi Jörg,

dann versuch ich mich mal weiter daran, das gros scheint dank deiner Hilfe ja nun zu funktionieren.

Wirklich vielen Dank, du hast mir echt weitergeholfen!!

Beste Grüße
Max
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Binomial-Baum Function

Beitrag von jogo »

So sah es bei mir zuletzt aus:

Code: Alles auswählen

CCBond <- function(S0, FV, ttm, r, sigma, L, k, CallPrice, rho, c, PD, CallYN) {
  dt <- 1/12; n <- ceiling(ttm/dt+1)  # Definition der Intervalle und Längen
  u <- exp((r-(sigma^2)/2)* dt + sigma *sqrt(dt))
  d <- exp((r-(sigma^2)/2)* dt - sigma *sqrt(dt))
  p = 1/2
  gamma <- -S0*log(1-PD)
  
  #Aktienkurs entwickeln und Ausfallwahrscheinlichkeit
  S <- lambda <- matrix(0, n, n)
  
  S[1,1]      <- S0
  lambda[1,1] <- gamma/S[1,1]
  
  for (j in 2:n) {
    S[j,j]      <- S[j-1,j-1]*d* exp(lambda[j-1,j-1]*dt)
    lambda[j,j] <- gamma/S[j,j]
    
    if (j<3) break
    i <- 2:(j-1)
    S[i,j]      <- S[i-1,j-1]*u* exp(lambda[i,j-1]*dt)
    lambda[i,j] <- gamma/S[i,j]
  }

  #Rückwärtsschleife vom letzten Zeitpunkt zum Startzeitpunk
  CCValue <- NoCall <- Y <- Call <- matrix(0, n, n)
  CCValue[,n] <- max(FV, k*S[,n])
  for (j in (n-1):1) {
    for (i in 1:j) {
      NoCall[i,j] <- exp(-r*dt)*(exp(-lambda[i,j]*dt)*
                                   (p*CCValue[i,j+1] + (1-p)*CCValue[i+1,j+1])+ (1-exp(-lambda[i,j]*dt)) *(1-L)*FV)
      Coupon <- exp(-(r+lambda[i,j])*dt) * c*FV*(ttm/n)     

      if (Call == 1) {  ### hier ist noch ein kapitaler Fehler (der produziert die Warnungen)
        Call[i,j] <- max(k*S[i,j], CallPrice)
        Y[i,j]    <- max((NoCall[i,j]/Call[i,j])-1, 0)
      } else { Call[i,j] <- Y[i,j] <- 0 }
      CCValue[i,j] <- Coupon + NoCall[i,j]*exp(-(rho*Y[i,j])*dt) + Call[i,j]*(1-exp(-(rho*Y[i,j]*dt)))
    }    
  } 
  CCValue[1,1]
}  
CCBond(S0=23, FV=100, ttm=3.6, r=0.015, sigma=0.1, L=0.677, k=12, CallPrice=0, rho=7, c=0.03, PD=0.076, CallYN=0)
Maxel
Beiträge: 9
Registriert: Mi Apr 03, 2019 2:12 pm

Re: Binomial-Baum Function

Beitrag von Maxel »

Hi,
ja mittlerweile hab ichs aufgegeben, da das zu viel Zet in anspruch nimmt und ich den Rest der Thesis noch fertig machen muss.
Antworten