You can subscribe to this list here.
2000 
_{Jan}

_{Feb}

_{Mar}

_{Apr}

_{May}

_{Jun}

_{Jul}

_{Aug}

_{Sep}

_{Oct}

_{Nov}

_{Dec}
(17) 

2001 
_{Jan}

_{Feb}

_{Mar}

_{Apr}

_{May}

_{Jun}

_{Jul}

_{Aug}

_{Sep}

_{Oct}

_{Nov}

_{Dec}
(23) 
2002 
_{Jan}
(18) 
_{Feb}
(20) 
_{Mar}
(22) 
_{Apr}
(41) 
_{May}
(28) 
_{Jun}
(25) 
_{Jul}
(10) 
_{Aug}
(7) 
_{Sep}
(5) 
_{Oct}
(20) 
_{Nov}
(13) 
_{Dec}
(11) 
2003 
_{Jan}
(28) 
_{Feb}
(5) 
_{Mar}
(6) 
_{Apr}
(5) 
_{May}
(17) 
_{Jun}
(6) 
_{Jul}
(45) 
_{Aug}
(35) 
_{Sep}
(24) 
_{Oct}
(50) 
_{Nov}
(53) 
_{Dec}
(6) 
2004 
_{Jan}
(4) 
_{Feb}
(10) 
_{Mar}
(52) 
_{Apr}
(46) 
_{May}
(8) 
_{Jun}
(25) 
_{Jul}
(12) 
_{Aug}
(6) 
_{Sep}
(8) 
_{Oct}
(8) 
_{Nov}
(9) 
_{Dec}
(7) 
2005 
_{Jan}
(18) 
_{Feb}
(60) 
_{Mar}
(19) 
_{Apr}
(26) 
_{May}
(14) 
_{Jun}
(27) 
_{Jul}
(8) 
_{Aug}
(15) 
_{Sep}
(19) 
_{Oct}
(53) 
_{Nov}
(20) 
_{Dec}
(23) 
2006 
_{Jan}
(16) 
_{Feb}
(27) 
_{Mar}
(33) 
_{Apr}
(51) 
_{May}
(36) 
_{Jun}
(25) 
_{Jul}
(54) 
_{Aug}
(30) 
_{Sep}
(25) 
_{Oct}
(67) 
_{Nov}
(43) 
_{Dec}
(13) 
2007 
_{Jan}
(23) 
_{Feb}
(27) 
_{Mar}
(55) 
_{Apr}
(79) 
_{May}
(60) 
_{Jun}
(66) 
_{Jul}
(46) 
_{Aug}
(30) 
_{Sep}
(90) 
_{Oct}
(49) 
_{Nov}
(85) 
_{Dec}
(74) 
2008 
_{Jan}
(68) 
_{Feb}
(59) 
_{Mar}
(64) 
_{Apr}
(28) 
_{May}
(66) 
_{Jun}
(35) 
_{Jul}
(73) 
_{Aug}
(76) 
_{Sep}
(65) 
_{Oct}
(46) 
_{Nov}
(41) 
_{Dec}
(19) 
2009 
_{Jan}
(46) 
_{Feb}
(90) 
_{Mar}
(51) 
_{Apr}
(104) 
_{May}
(13) 
_{Jun}
(24) 
_{Jul}
(20) 
_{Aug}
(39) 
_{Sep}
(109) 
_{Oct}
(101) 
_{Nov}
(117) 
_{Dec}
(57) 
2010 
_{Jan}
(55) 
_{Feb}
(42) 
_{Mar}
(39) 
_{Apr}
(22) 
_{May}
(33) 
_{Jun}
(41) 
_{Jul}
(25) 
_{Aug}
(52) 
_{Sep}
(75) 
_{Oct}
(60) 
_{Nov}
(62) 
_{Dec}
(52) 
2011 
_{Jan}
(70) 
_{Feb}
(31) 
_{Mar}
(26) 
_{Apr}
(28) 
_{May}
(17) 
_{Jun}
(38) 
_{Jul}
(51) 
_{Aug}
(35) 
_{Sep}
(27) 
_{Oct}
(35) 
_{Nov}
(10) 
_{Dec}
(20) 
2012 
_{Jan}
(21) 
_{Feb}
(29) 
_{Mar}
(13) 
_{Apr}
(37) 
_{May}
(33) 
_{Jun}
(12) 
_{Jul}
(34) 
_{Aug}
(27) 
_{Sep}
(29) 
_{Oct}
(35) 
_{Nov}
(58) 
_{Dec}
(27) 
2013 
_{Jan}
(27) 
_{Feb}
(16) 
_{Mar}
(40) 
_{Apr}
(16) 
_{May}
(34) 
_{Jun}
(37) 
_{Jul}
(6) 
_{Aug}
(3) 
_{Sep}
(4) 
_{Oct}
(49) 
_{Nov}
(13) 
_{Dec}
(12) 
2014 
_{Jan}
(15) 
_{Feb}
(21) 
_{Mar}
(11) 
_{Apr}
(13) 
_{May}
(27) 
_{Jun}
(60) 
_{Jul}
(19) 
_{Aug}
(29) 
_{Sep}
(20) 
_{Oct}
(28) 
_{Nov}
(41) 
_{Dec}
(15) 
2015 
_{Jan}
(33) 
_{Feb}
(29) 
_{Mar}
(26) 
_{Apr}
(17) 
_{May}
(2) 
_{Jun}
(13) 
_{Jul}
(21) 
_{Aug}
(30) 
_{Sep}
(22) 
_{Oct}
(15) 
_{Nov}
(46) 
_{Dec}
(20) 
2016 
_{Jan}
(6) 
_{Feb}
(5) 
_{Mar}
(9) 
_{Apr}
(15) 
_{May}
(9) 
_{Jun}
(4) 
_{Jul}
(3) 
_{Aug}
(4) 
_{Sep}
(39) 
_{Oct}
(8) 
_{Nov}
(5) 
_{Dec}
(8) 
2017 
_{Jan}
(4) 
_{Feb}
(14) 
_{Mar}
(4) 
_{Apr}
(16) 
_{May}
(5) 
_{Jun}
(10) 
_{Jul}

_{Aug}

_{Sep}

_{Oct}

_{Nov}

_{Dec}

S  M  T  W  T  F  S 




1
(1) 
2
(2) 
3
(6) 
4

5
(1) 
6

7

8

9

10

11

12
(2) 
13
(2) 
14

15
(1) 
16

17
(1) 
18

19

20
(1) 
21

22
(3) 
23

24
(3) 
25

26

27
(4) 
28
(1) 
29
(1) 
30
(1) 
31


From: David Brown <doctor.brown@gm...>  20070830 02:03:53

Greetings All Given a portfolio of american options on one stock, let's suppose that we wanted to figure out what this portfolio was worth in an arbitrary number of days, suppose 30. One could take the stock, let's suppose that we could project the pdf of the price forward 30 days perfectly with no loss of fat tails. (This is another problem in itself.) No we have this accurate pdf, let's say composed of 50000 MCMC simulations. Every one of these values could be plugged into the options we hold and now and semiaccurate values could be obtained using whatever we priced the option with in the first place, baroniadesiwhaley / whatever. The only matter now is that we don't have the slightest idea of what the volatility would be in this arbitrary number of days. How do we begin to solve this problem? My approach given my own thoughts and a number of papers, including Peter Carr and Jim Gatheral, is to find the market implied volatility surface at time zero and figure out using historical data what the surface should approximately look like in the future. This is way easier said than done. Dupire has a slideshow that discusses the different types of local volatility and stochastic volatility surfaces, but his book on volatity only has a short chapter, number 8, called Dynamics of the Skew / Smile or something to that effect. He doesn't really seem to answer the question as to what must be done to solve this problem accurately. So I've raised this question here, because I think this is the only place where there is a possibility of this problem being solved given the expertise of the parties involved in similar projects. Peter Carr addressed this a little bit with his FMLS model which uses stable distributions to fit the market smile, but the model has yet to be built for stochastic volatility. I contacted Johnathon Nolan on the matter and he told me a good source to try would be Hugh McCullough's papers. I tried his papers and it appears that he hasn't fully solved the matter either. Peter Carr himself said that some type of PDE could be used to solve for the speed of the volatility surface, but from what I gather, this was his form of conjecturing. Perhaps not? Any advice on how to proceed with this problem? I am highly interested in programming this into Quantlib. Best Wishes, David Brown 
From: Mark joshi <mark.joshi@gm...>  20070829 03:58:32

Re the trees being buggy, I think the unit test would have picked up an error that big. Re trees, in general, I've been doing a lot of playing with them lately. My main conclusion is that it's not what tree you use for American puts, but what acceleration techniques you use: i.e. Richardson extrapolation, smoothing, truncation, that matters. (expect a paper soon!) Mark 
From: John Maiden <jwmaiden@ya...>  20070828 15:14:52

Working on making extensions to the binomial tree classes. The main change is that the tree now can use a timedependent stochastic process, i.e. a process that has riskfree rate and volatility curves. I know that there are recombination issues with a volatility curve, but as far as I know there isn't anything wrong with incorporating a yield curve. I've tested the trees with flat vol and different yield curves (flat, treasury zero, and treasury strip), and half of the trees (JarrowRudd, Additive EQP, and Tian) produce normal results for the flat and zero curve, but get very noisy for the strip curve. The other trees are wellbehaved for all the curves. Hoping someone might be able to point out what's going wrong. I have a spreadsheet of the results if anyone is interested in seeing them. Here's the code. I've renamed all the changed classes with the extension "Extended": /* * mode: c++; tabwidth: 4; indenttabsmode: nil; cbasicoffset: 4 * */ /* Copyright (C) 2003 Ferdinando Ametrano Copyright (C) 2001, 2002, 2003 Sadruddin Rejeb Copyright (C) 2005 StatPro Italia srl This file is part of QuantLib, a freesoftware/opensource library for financial quantitative analysts and developers  http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email <quantlibdev@...>. The license is also available online at <http://quantlib.org/license.shtml>;. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the license for more details. */ /*! \file binomialtree.hpp \brief Binomial tree class */ #ifndef extended_binomial_tree_hpp #define extended_binomial_tree_hpp #include <ql/stochasticprocess.hpp> #include <ql/methods/lattices/tree.hpp> #include <ql/instruments/dividendschedule.hpp> #include <ql/processes/blackscholesprocess.hpp> #include <iostream> namespace QuantLib { //! Binomial tree base class /*! \ingroup lattices */ template <class T> class ExtendedBinomialTree : public Tree<T> { public: enum Branches { branches = 2 }; ExtendedBinomialTree(const boost::shared_ptr<StochasticProcess1D>& process, Time end, Size steps) : Tree<T>(steps+1), treeProcess_(process) { x0_ = process>x0(); dt_ = end/steps; driftPerStep_ = process>drift(0.0, x0_) * dt_; } Size size(Size i) const { return i+1; } Size descendant(Size, Size index, Size branch) const { return index + branch; } const boost::shared_ptr<StochasticProcess1D> treeProcess() const {return treeProcess_;} //the amount the stock price moves up in one step virtual Real upMove(Time stepTime) const = 0; //the amount the stock price moves down in one step virtual Real downMove(Time stepTime) const = 0; protected: //time dependent drift per step Real driftStep(Time driftTime) const { return this>treeProcess_>drift(driftTime, x0_) * dt_; } Real x0_, driftPerStep_; Time dt_; protected: boost::shared_ptr<StochasticProcess1D> treeProcess_; }; //! Base class for equal probabilities binomial tree /*! \ingroup lattices */ template <class T> class ExtendedEqualProbabilitiesBinomialTree : public ExtendedBinomialTree<T> { public: ExtendedEqualProbabilitiesBinomialTree( const boost::shared_ptr<StochasticProcess1D>& process, Time end, Size steps) : ExtendedBinomialTree<T>(process, end, steps) {} //Real underlying(Size i, Size index) const { // BigInteger j = 2*BigInteger(index)  BigInteger(i); // // exploiting the forward value tree centering // return this>x0_*std::exp(i*this>driftPerStep_ + j*this>up_); //} Real underlying(Size i, Size index, Time stepTime) const { BigInteger j = 2*BigInteger(index)  BigInteger(i); // exploiting the forward value tree centering return this>x0_*std::exp(i*this>driftStep(stepTime) + j*this>upStep(stepTime)); } Real probability(Size, Size, Size, Time) const { return 0.5; } Real upMove(Time stepTime) const { return std::exp(this>driftStep(stepTime) + this>upStep(stepTime)); } Real downMove(Time stepTime) const { return std::exp(this>driftStep(stepTime)  this>upStep(stepTime)); } //the tree dependent up move term at time stepTime virtual Real upStep(Time stepTime) const = 0; protected: Real up_; }; //! Base class for equal jumps binomial tree /*! \ingroup lattices */ template <class T> class ExtendedEqualJumpsBinomialTree : public ExtendedBinomialTree<T> { public: ExtendedEqualJumpsBinomialTree( const boost::shared_ptr<StochasticProcess1D>& process, Time end, Size steps) : ExtendedBinomialTree<T>(process, end, steps) {} //Real underlying(Size i, Size index) const { // BigInteger j = 2*BigInteger(index)  BigInteger(i); // // exploiting equal jump and the x0_ tree centering // return this>x0_*std::exp(j*this>dx_); //} Real underlying(Size i, Size index, Time stepTime) const { BigInteger j = 2*BigInteger(index)  BigInteger(i); // exploiting equal jump and the x0_ tree centering return this>x0_*std::exp(j*this>dxStep(stepTime)); } /* Real probability(Size, Size, Size branch) const { return (branch == 1 ? pu_ : pd_); }*/ Real probability(Size, Size, Size branch, Time stepTime) const { Real upProb = this>probUp(stepTime); Real downProb = 1  upProb; return (branch == 1 ? upProb : downProb); } Real upMove(Time stepTime) const { return std::exp(this>dxStep(stepTime)); } Real downMove(Time stepTime) const { return (1/upMove(stepTime)); } protected: //probability of a up move virtual Real probUp(Time stepTime) const = 0; //time dependent term dx_ virtual Real dxStep(Time stepTime) const = 0; Real dx_, pu_, pd_; }; //! JarrowRudd (multiplicative) equal probabilities binomial tree /*! \ingroup lattices */ class ExtendedJarrowRudd : public ExtendedEqualProbabilitiesBinomialTree<ExtendedJarrowRudd> { public: ExtendedJarrowRudd(const boost::shared_ptr<StochasticProcess1D>&, Time end, Size steps, Real strike); protected: Real upStep(Time stepTime) const; }; //! CoxRossRubinstein (multiplicative) equal jumps binomial tree /*! \ingroup lattices */ class ExtendedCoxRossRubinstein : public ExtendedEqualJumpsBinomialTree<ExtendedCoxRossRubinstein> { public: ExtendedCoxRossRubinstein(const boost::shared_ptr<StochasticProcess1D>&, Time end, Size steps, Real strike); protected: Real dxStep(Time stepTime) const; Real probUp(Time stepTime) const; }; //! Additive equal probabilities binomial tree /*! \ingroup lattices */ class ExtendedAdditiveEQPBinomialTree : public ExtendedEqualProbabilitiesBinomialTree<ExtendedAdditiveEQPBinomialTree> { public: ExtendedAdditiveEQPBinomialTree( const boost::shared_ptr<StochasticProcess1D>&, Time end, Size steps, Real strike); protected: Real upStep(Time stepTime) const; }; //! %Trigeorgis (additive equal jumps) binomial tree /*! \ingroup lattices */ class ExtendedTrigeorgis : public ExtendedEqualJumpsBinomialTree<ExtendedTrigeorgis> { public: ExtendedTrigeorgis(const boost::shared_ptr<StochasticProcess1D>&, Time end, Size steps, Real strike); protected: Real dxStep(Time stepTime) const; Real probUp(Time stepTime) const; }; //! %Tian tree: third moment matching, multiplicative approach /*! \ingroup lattices */ class ExtendedTian : public ExtendedBinomialTree<ExtendedTian> { public: ExtendedTian(const boost::shared_ptr<StochasticProcess1D>&, Time end, Size steps, Real strike); /*Real underlying(Size i, Size index) const { return x0_ * std::pow(down_, Real(BigInteger(i)BigInteger(index))) * std::pow(up_, Real(index)); }; Real probability(Size, Size, Size branch) const { return (branch == 1 ? pu_ : pd_); }*/ Real underlying(Size i, Size index, Time stepTime) const; Real probability(Size, Size, Size branch, Time stepTime) const; Real upMove(Time stepTime) const; Real downMove(Time stepTime) const; protected: Real up_, down_, pu_, pd_; }; //! Leisen & Reimer tree: multiplicative approach /*! \ingroup lattices */ class ExtendedLeisenReimer : public ExtendedBinomialTree<ExtendedLeisenReimer> { public: ExtendedLeisenReimer(const boost::shared_ptr<StochasticProcess1D>&, Time end, Size steps, Real strike); /*Real underlying(Size i, Size index) const { return x0_ * std::pow(down_, Real(BigInteger(i)BigInteger(index))) * std::pow(up_, Real(index)); } Real probability(Size, Size, Size branch) const { return (branch == 1 ? pu_ : pd_); }*/ Real underlying(Size i, Size index, Time stepTime) const; Real probability(Size, Size, Size branch, Time stepTime) const; Real upMove(Time stepTime) const; Real downMove(Time stepTime) const; protected: Real up_, down_, pu_, pd_, OddSteps_, Strike_, End_; }; class ExtendedJoshi4 : public ExtendedBinomialTree<ExtendedJoshi4> { public: ExtendedJoshi4(const boost::shared_ptr<StochasticProcess1D>&, Time end, Size steps, Real strike); /*Real underlying(Size i, Size index) const { return x0_ * std::pow(down_, Real(BigInteger(i)BigInteger(index))) * std::pow(up_, Real(index)); } Real probability(Size, Size, Size branch) const { return (branch == 1 ? pu_ : pd_); }*/ Real underlying(Size i, Size index, Time stepTime) const; Real probability(Size, Size, Size branch, Time stepTime) const; Real upMove(Time stepTime) const; Real downMove(Time stepTime) const; protected: Real computeUpProb(Real k, Real dj) const; Real up_, down_, pu_, pd_, OddSteps_, Strike_, End_; }; } #endif /* * mode: c++; tabwidth: 4; indenttabsmode: nil; cbasicoffset: 4 * */ /* Copyright (C) 2003 Ferdinando Ametrano Copyright (C) 2001, 2002, 2003 Sadruddin Rejeb Copyright (C) 2005 StatPro Italia srl This file is part of QuantLib, a freesoftware/opensource library for financial quantitative analysts and developers  http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email <quantlibdev@...>. The license is also available online at <http://quantlib.org/license.shtml>;. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the license for more details. */ #include "extendedbinomialtree.hpp" #include <ql/math/distributions/binomialdistribution.hpp> namespace QuantLib { ExtendedJarrowRudd::ExtendedJarrowRudd( const boost::shared_ptr<StochasticProcess1D>& process, Time end, Size steps, Real) : ExtendedEqualProbabilitiesBinomialTree<ExtendedJarrowRudd>(process, end, steps) { // drift removed up_ = process>stdDeviation(0.0, x0_, dt_); } Real ExtendedJarrowRudd::upStep(Time stepTime) const { return treeProcess_>stdDeviation(stepTime, x0_, dt_); } ExtendedCoxRossRubinstein::ExtendedCoxRossRubinstein( const boost::shared_ptr<StochasticProcess1D>& process, Time end, Size steps, Real) : ExtendedEqualJumpsBinomialTree<ExtendedCoxRossRubinstein>(process, end, steps) { dx_ = process>stdDeviation(0.0, x0_, dt_); pu_ = 0.5 + 0.5*this>driftStep(0.0)/dx_; /*pu_ = 0.5 + 0.5*driftPerStep_/dx_;*/ pd_ = 1.0  pu_; QL_REQUIRE(pu_<=1.0, "negative probability"); QL_REQUIRE(pu_>=0.0, "negative probability"); } Real ExtendedCoxRossRubinstein::dxStep(Time stepTime) const { return this>treeProcess_>stdDeviation(stepTime, x0_, dt_); } Real ExtendedCoxRossRubinstein::probUp(Time stepTime) const { return 0.5 + 0.5*this>driftStep(stepTime)/dxStep(stepTime); } ExtendedAdditiveEQPBinomialTree::ExtendedAdditiveEQPBinomialTree( const boost::shared_ptr<StochasticProcess1D>& process, Time end, Size steps, Real) : ExtendedEqualProbabilitiesBinomialTree<ExtendedAdditiveEQPBinomialTree>(process, end, steps) { /*up_ =  0.5 * driftPerStep_ + 0.5 * std::sqrt(4.0*process>variance(0.0, x0_, dt_) 3.0*driftPerStep_*driftPerStep_);*/ up_ =  0.5 * this>driftStep(0.0) + 0.5 * std::sqrt(4.0*process>variance(0.0, x0_, dt_) 3.0*this>driftStep(0.0)*this>driftStep(0.0)); } Real ExtendedAdditiveEQPBinomialTree::upStep(Time stepTime) const { return ( 0.5 * this>driftStep(stepTime) + 0.5 * std::sqrt(4.0*this>treeProcess_>variance(stepTime, x0_, dt_) 3.0*this>driftStep(stepTime)*this>driftStep(stepTime))); } ExtendedTrigeorgis::ExtendedTrigeorgis( const boost::shared_ptr<StochasticProcess1D>& process, Time end, Size steps, Real) : ExtendedEqualJumpsBinomialTree<ExtendedTrigeorgis>(process, end, steps) { /*dx_ = std::sqrt(process>variance(0.0, x0_, dt_)+ driftPerStep_*driftPerStep_); pu_ = 0.5 + 0.5*driftPerStep_/dx_;*/ dx_ = std::sqrt(process>variance(0.0, x0_, dt_)+ this>driftStep(0.0)*this>driftStep(0.0)); pu_ = 0.5 + 0.5*this>driftStep(0.0)/this>dxStep(0.0); pd_ = 1.0  pu_; QL_REQUIRE(pu_<=1.0, "negative probability"); QL_REQUIRE(pu_>=0.0, "negative probability"); } Real ExtendedTrigeorgis::dxStep(Time stepTime) const { return std::sqrt(this>treeProcess_>variance(stepTime, x0_, dt_)+ this>driftStep(stepTime)*this>driftStep(stepTime)); } Real ExtendedTrigeorgis::probUp(Time stepTime) const { return 0.5 + 0.5*this>driftStep(stepTime)/dxStep(stepTime); } ExtendedTian::ExtendedTian(const boost::shared_ptr<StochasticProcess1D>& process, Time end, Size steps, Real) : ExtendedBinomialTree<ExtendedTian>(process, end, steps) { Real q = std::exp(process>variance(0.0, x0_, dt_)); /*Real r = std::exp(driftPerStep_)*std::sqrt(q);*/ Real r = std::exp(this>driftStep(0.0))*std::sqrt(q); up_ = 0.5 * r * q * (q + 1 + std::sqrt(q * q + 2 * q  3)); down_ = 0.5 * r * q * (q + 1  std::sqrt(q * q + 2 * q  3)); pu_ = (r  down_) / (up_  down_); pd_ = 1.0  pu_; // doesn't work // treeCentering_ = (up_+down_)/2.0; // up_ = up_treeCentering_; QL_REQUIRE(pu_<=1.0, "negative probability"); QL_REQUIRE(pu_>=0.0, "negative probability"); } Real ExtendedTian::underlying(Size i, Size index, Time stepTime) const { Real q = std::exp(this>treeProcess_>variance(stepTime, x0_, dt_)); Real r = std::exp(this>driftStep(stepTime))*std::sqrt(q); Real up = 0.5 * r * q * (q + 1 + std::sqrt(q * q + 2 * q  3)); Real down = 0.5 * r * q * (q + 1  std::sqrt(q * q + 2 * q  3)); return x0_ * std::pow(down, Real(BigInteger(i)BigInteger(index))) * std::pow(up, Real(index)); } Real ExtendedTian::probability(Size, Size, Size branch, Time stepTime) const { Real q = std::exp(this>treeProcess_>variance(stepTime, x0_, dt_)); Real r = std::exp(this>driftStep(stepTime))*std::sqrt(q); Real up = 0.5 * r * q * (q + 1 + std::sqrt(q * q + 2 * q  3)); Real down = 0.5 * r * q * (q + 1  std::sqrt(q * q + 2 * q  3)); Real pu = (r  down) / (up  down); Real pd = 1.0  pu; return (branch == 1 ? pu : pd); } Real ExtendedTian::upMove(Time stepTime) const { Real q = std::exp(this>treeProcess_>variance(stepTime, x0_, dt_)); Real r = std::exp(this>driftStep(stepTime))*std::sqrt(q); return 0.5 * r * q * (q + 1 + std::sqrt(q * q + 2 * q  3)); } Real ExtendedTian::downMove(Time stepTime) const { Real q = std::exp(this>treeProcess_>variance(stepTime, x0_, dt_)); Real r = std::exp(this>driftStep(stepTime))*std::sqrt(q); return 0.5 * r * q * (q + 1  std::sqrt(q * q + 2 * q  3)); } ExtendedLeisenReimer::ExtendedLeisenReimer( const boost::shared_ptr<StochasticProcess1D>& process, Time end, Size steps, Real strike) : ExtendedBinomialTree<ExtendedLeisenReimer>(process, end, (steps%2 ? steps : steps+1)), Strike_(strike), End_(end) { QL_REQUIRE(strike>0.0, "strike must be positive"); Size oddSteps = (steps%2 ? steps : steps+1); OddSteps_ = oddSteps; Real variance = process>variance(0.0, x0_, end); /*Real ermqdt = std::exp(driftPerStep_ + 0.5*variance/oddSteps); Real d2 = (std::log(x0_/strike) + driftPerStep_*oddSteps ) / std::sqrt(variance);*/ Real ermqdt = std::exp(this>driftStep(0.0) + 0.5*variance/oddSteps); Real d2 = (std::log(x0_/strike) + this>driftStep(0.0)*oddSteps ) / std::sqrt(variance); pu_ = PeizerPrattMethod2Inversion(d2, oddSteps); pd_ = 1.0  pu_; Real pdash = PeizerPrattMethod2Inversion(d2+std::sqrt(variance), oddSteps); up_ = ermqdt * pdash / pu_; down_ = (ermqdt  pu_ * up_) / (1.0  pu_); } Real ExtendedLeisenReimer::underlying(Size i, Size index, Time stepTime) const { Real variance = this>treeProcess_>variance(stepTime, x0_, End_); Real ermqdt = std::exp(this>driftStep(stepTime) + 0.5*variance/OddSteps_); Real d2 = (std::log(x0_/Strike_) + this>driftStep(stepTime)*OddSteps_ ) / std::sqrt(variance); Real pu = PeizerPrattMethod2Inversion(d2, OddSteps_); Real pd = 1.0  pu; Real pdash = PeizerPrattMethod2Inversion(d2+std::sqrt(variance), OddSteps_); Real up = ermqdt * pdash / pu; Real down = (ermqdt  pu * up) / (1.0  pu); return x0_ * std::pow(down, Real(BigInteger(i)BigInteger(index))) * std::pow(up, Real(index)); } Real ExtendedLeisenReimer::probability(Size, Size, Size branch, Time stepTime) const { Real variance = this>treeProcess_>variance(stepTime, x0_, End_); Real ermqdt = std::exp(this>driftStep(stepTime) + 0.5*variance/OddSteps_); Real d2 = (std::log(x0_/Strike_) + this>driftStep(stepTime)*OddSteps_ ) / std::sqrt(variance); Real pu = PeizerPrattMethod2Inversion(d2, OddSteps_); Real pd = 1.0  pu; return (branch == 1 ? pu : pd); } Real ExtendedLeisenReimer::upMove(Time stepTime) const { Real variance = this>treeProcess_>variance(stepTime, x0_, End_); Real ermqdt = std::exp(this>driftStep(stepTime) + 0.5*variance/OddSteps_); Real d2 = (std::log(x0_/Strike_) + this>driftStep(stepTime)*OddSteps_ ) / std::sqrt(variance); Real pu = PeizerPrattMethod2Inversion(d2, OddSteps_); Real pd = 1.0  pu; Real pdash = PeizerPrattMethod2Inversion(d2+std::sqrt(variance), OddSteps_); return ermqdt * pdash / pu; } Real ExtendedLeisenReimer::downMove(Time stepTime) const { Real variance = this>treeProcess_>variance(stepTime, x0_, End_); Real ermqdt = std::exp(this>driftStep(stepTime) + 0.5*variance/OddSteps_); Real d2 = (std::log(x0_/Strike_) + this>driftStep(stepTime)*OddSteps_ ) / std::sqrt(variance); Real pu = PeizerPrattMethod2Inversion(d2, OddSteps_); Real pd = 1.0  pu; Real pdash = PeizerPrattMethod2Inversion(d2+std::sqrt(variance), OddSteps_); Real up = ermqdt * pdash / pu; return (ermqdt  pu * up) / (1.0  pu); } Real ExtendedJoshi4::computeUpProb(Real k, Real dj) const { Real alpha = dj/(sqrt(8.0)); Real alpha2 = alpha*alpha; Real alpha3 = alpha*alpha2; Real alpha5 = alpha3*alpha2; Real alpha7 = alpha5*alpha2; Real beta = 0.375*alphaalpha3; Real gamma = (5.0/6.0)*alpha5 + (13.0/12.0)*alpha3 +(25.0/128.0)*alpha; Real delta = 0.1025 *alpha 0.9285 *alpha3 1.43 *alpha5 0.5 *alpha7; Real p =0.5; Real rootk= sqrt(k); p+= alpha/rootk; p+= beta /(k*rootk); p+= gamma/(k*k*rootk); // delete next line to get results for j three tree p+= delta/(k*k*k*rootk); return p; } ExtendedJoshi4::ExtendedJoshi4(const boost::shared_ptr<StochasticProcess1D>& process, Time end, Size steps, Real strike) : ExtendedBinomialTree<ExtendedJoshi4>(process, end, (steps%2 ? steps : steps+1)), Strike_(strike), End_(end) { QL_REQUIRE(strike>0.0, "strike must be positive"); Size oddSteps = (steps%2 ? steps : steps+1); OddSteps_ = oddSteps; Real variance = process>variance(0.0, x0_, end); /*Real ermqdt = std::exp(driftPerStep_ + 0.5*variance/oddSteps); Real d2 = (std::log(x0_/strike) + driftPerStep_*oddSteps ) / std::sqrt(variance);*/ Real ermqdt = std::exp(this>driftStep(0.0) + 0.5*variance/oddSteps); Real d2 = (std::log(x0_/strike) + this>driftStep(0.0)*oddSteps ) / std::sqrt(variance); pu_ = computeUpProb((oddSteps1.0)/2.0,d2 ); pd_ = 1.0  pu_; Real pdash = computeUpProb((oddSteps1.0)/2.0,d2+std::sqrt(variance)); up_ = ermqdt * pdash / pu_; down_ = (ermqdt  pu_ * up_) / (1.0  pu_); } Real ExtendedJoshi4::underlying(Size i, Size index, Time stepTime) const { Real variance = this>treeProcess_>variance(stepTime, x0_, End_); Real ermqdt = std::exp(this>driftStep(stepTime) + 0.5*variance/OddSteps_); Real d2 = (std::log(x0_/Strike_) + this>driftStep(stepTime)*OddSteps_ ) / std::sqrt(variance); Real pu = computeUpProb((OddSteps_1.0)/2.0,d2 ); Real pd = 1.0  pu; Real pdash = computeUpProb((OddSteps_1.0)/2.0,d2+std::sqrt(variance)); Real up = ermqdt * pdash / pu; Real down = (ermqdt  pu * up) / (1.0  pu); return x0_ * std::pow(down, Real(BigInteger(i)BigInteger(index))) * std::pow(up, Real(index)); } Real ExtendedJoshi4::probability(Size, Size, Size branch, Time stepTime) const { Real variance = this>treeProcess_>variance(stepTime, x0_, End_); Real ermqdt = std::exp(this>driftStep(stepTime) + 0.5*variance/OddSteps_); Real d2 = (std::log(x0_/Strike_) + this>driftStep(stepTime)*OddSteps_ ) / std::sqrt(variance); Real pu = computeUpProb((OddSteps_1.0)/2.0,d2 ); Real pd = 1.0  pu; return (branch == 1 ? pu : pd); } Real ExtendedJoshi4::upMove(Time stepTime) const { Real variance = this>treeProcess_>variance(stepTime, x0_, End_); Real ermqdt = std::exp(this>driftStep(stepTime) + 0.5*variance/OddSteps_); Real d2 = (std::log(x0_/Strike_) + this>driftStep(stepTime)*OddSteps_ ) / std::sqrt(variance); Real pu = computeUpProb((OddSteps_1.0)/2.0,d2 ); Real pd = 1.0  pu; Real pdash = computeUpProb((OddSteps_1.0)/2.0,d2+std::sqrt(variance)); return ermqdt * pdash / pu; } Real ExtendedJoshi4::downMove(Time stepTime) const { Real variance = this>treeProcess_>variance(stepTime, x0_, End_); Real ermqdt = std::exp(this>driftStep(stepTime) + 0.5*variance/OddSteps_); Real d2 = (std::log(x0_/Strike_) + this>driftStep(stepTime)*OddSteps_ ) / std::sqrt(variance); Real pu = computeUpProb((OddSteps_1.0)/2.0,d2 ); Real pd = 1.0  pu; Real pdash = computeUpProb((OddSteps_1.0)/2.0,d2+std::sqrt(variance)); Real up = ermqdt * pdash / pu; return (ermqdt  pu * up) / (1.0  pu); } } 
From: letian <lucian.wang@ya...>  20070827 17:21:07

Hi Guys, I was using version 0.3.12 and just updated to 0.8.1 with boost 1_34_1. My sdk is VC8.0 in Visual Studio 2005. I noticed that a subdirectory "lib" was generated after building QuantLib, so I included it in the "lib" directory. There is a .lib file "QuantLibvc80mtgd0_8_1.lib" in the directory. The examples and test suites work fine. But when I'm compiling my own programs (which work fine under the old version, BTW), it gives a link error: error LNK2019: unresolved external symbol ". A typical line looks like the follows: CashflowDlg.obj : error LNK2019: unresolved external symbol "public: static double __cdecl QuantLib::CashFlows::npv(class std::vector<class boost::shared_ptr<class QuantLib::CashFlow>,class std::allocator<class boost::shared_ptr<class QuantLib::CashFlow> > > const &,class QuantLib::InterestRate const &,class QuantLib::Date)" (?npv@...@QuantLib@@SANABV?$vector@...?$shared_ptr@...@QuantLib@@@boost@@V?$allocator@...?$shared_ptr@...@QuantLib@@@boost@@@std@@@std@@ABVInterestRate@...@VDate@...@@Z) referenced in function "public: void __thiscall CCashflowDlg::OnBnClickedCompute(void)" (?OnBnClickedCompute@...@@QAEXXZ) Does anyone know what happened here? Thank you very much in advance. PS: I got QL from sorceforge, but some core.hpp are missing, for example, ql/core.hpp, cashflows/core.hpp. A mistake? Regards, letian  View this message in context: http://www.nabble.com/Help%21QuantLiblinkerrortf4337053.html#a12353656 Sent from the quantlibdev mailing list archive at Nabble.com. 
From: John Maiden <jwmaiden@ya...>  20070827 15:28:37

Yeah, I think you might be right. Thanks for noticing and replying so quickly. 
From: Toyin Akin <toyin_akin@ho...>  20070827 14:58:41

Hi, =20 Perhaps not.=20 =20 The variance looks like it is divided by the number of steps before it is b= eing used. =20 Whereas in the other cases, the variance for a single dt step is taken and = used directly. =20 Just an observation... =20 Toy out.> To: quantlibdev@...> From: jwmaiden@...>= Date: Mon, 27 Aug 2007 13:40:57 +0000> Subject: [Quantlibdev] Binomial Tr= ee Fever> > Think I found two errors in the Binomial Tree class. The proble= ms are in> LeisenReimer:: LeisenReimer and Joshi4::Joshi4. In both construc= tors the> variance should be > > Real variance =3D process>variance(0.0, x= 0_, dt_);> > Instead of> > Real variance =3D process>variance(0.0, x0_, en= d);> > > = > This SF.net email is sponsored by: Splunk Inc.> Still grepping thr= ough log files to find problems? Stop.> Now Search log events and configura= tion files using AJAX and a browser.> Download your FREE copy of Splunk now= >> http://get.splunk.com/>; _______________________________________________= > QuantLibdev mailing list> QuantLibdev@...> https://li= sts.sourceforge.net/lists/listinfo/quantlibdev _________________________________________________________________ The next generation of MSN Hotmail has arrived  Windows Live Hotmail http://www.newhotmail.co.uk= 
From: John Maiden <jwmaiden@ya...>  20070827 13:41:32

Think I found two errors in the Binomial Tree class. The problems are in LeisenReimer:: LeisenReimer and Joshi4::Joshi4. In both constructors the variance should be Real variance = process>variance(0.0, x0_, dt_); Instead of Real variance = process>variance(0.0, x0_, end); 
From: Toli Kuznets <toli@ma...>  20070824 23:05:51

Guillaume I've never had any luck compiling SWIG with Eclipse/SkWash. However, i have no problems doing the compilation with QuantLibSWIG with Java bindings on commandline on MacOS 10.4.8 or on Ubuntu Linux. Not sure if this is helpful to you and if you specifically need it on Windows only. Perhaps you can do this all under Cygwin? here are the commands i used on Mac/Linux: Configure/compile main QuantLib distribution ./configure withboostinclude=/usr/local/bin make make install For QuantLibSWIG: Run ./configure and make C Java. You'll need to specify the locations of JDK directories with these flags: withjdkinclude and withjdksysteminclude ./configure withjdkinclude=<path to jre include> withjdksysteminclude=<path to platform specific system include> make install This will try installing the bindings into the JRE's directory, so you may want to specify a local folder with prefix if you don't need it. Also, make sure your PATH variable has a quantlibconfig in the list. hope this helps. On 8/24/07, Guillaume et Sandrine Dru <guillaumeetsandrine@...> wrote: > Hi, > I have to use QuantLib in Java, so I'm trying to use Swig (Eclipse 3.2, > Cygwin, SkWash, Windows XP). > With Quantlib 0.3.11 (and the associated SWIG 0.3.11) it works great, but > when I want to use QuantLib 0.8.0 , the compiler crashes everytime I try to > compile the CPP Wrapper, with the following message : > > Building target: QuantLibCPPWraper.dll > Invoking: GCC C++ Linker > g++ L"C:\workspace\QuantLib\Debug" mnocygwin Wl,addstdcallalias > shared o" QuantLibCPPWraper.dll" ./cppwrapper.o lQuantLib > collect2: ld terminated with signal 11 [Segmentation fault], core dumped > Info: resolving vtable for QuantLib::Errorby linking to > __imp___ZTVN8QuantLib5ErrorE (autoimport) > Info: resolving vtable for QuantLib::EulerDiscretizationby linking to > __imp___ZTVN8QuantLib19EulerDiscretizationE (autoimport) > Info: resolving VTT for QuantLib::CompositeInstrument by linking to > __imp___ZTTN8QuantLib19CompositeInstrumentE (autoimport) > Info: resolving vtable for QuantLib::CompositeInstrumentby linking to > __imp___ZTVN8QuantLib19CompositeInstrumentE (autoimport) > Info: resolving vtable for > QuantLib::AnalyticEuropeanEngineby linking to > __imp___ZTVN8QuantLib22AnalyticEuropeanEngineE > (autoimport) > Info: resolving VTT for > QuantLib::OneAssetOption::argumentsby linking to > __imp___ZTTN8QuantLib14OneAssetOption9argumentsE > (autoimport) > Info: resolving vtable for > QuantLib::OneAssetOption::argumentsby linking to > > Have you got any idea of what It's going on ? Why It works perfectly with > 0.3.11 and not with 0.8.0 ? > I tried on 2 differents computers, I read the tutorial of SkWash, and I'm > desperate :). > I'm ready to offer some French Champagne if you can help me :) > > Thx for all > > Guillaume > >  > This SF.net email is sponsored by: Splunk Inc. > Still grepping through log files to find problems? Stop. > Now Search log events and configuration files using AJAX and a browser. > Download your FREE copy of Splunk now >> http://get.splunk.com/ > _______________________________________________ > QuantLibdev mailing list > QuantLibdev@... > https://lists.sourceforge.net/lists/listinfo/quantlibdev > >  Toli Kuznets http://www.marketcetera.com: OpenSource Trading Platform download.run.trade. 
From: Guillaume et Sandrine Dru <guillaumeetsandrine@gm...>  20070824 22:47:39

Hi, I have to use QuantLib in Java, so I'm trying to use Swig (Eclipse 3.2, Cygwin, SkWash, Windows XP). With Quantlib 0.3.11 (and the associated SWIG 0.3.11) it works great, but when I want to use QuantLib 0.8.0, the compiler crashes everytime I try to compile the CPP Wrapper, with the following message : Building target: QuantLibCPPWraper.dll Invoking: GCC C++ Linker g++ L"C:\workspace\QuantLib\Debug" mnocygwin Wl,addstdcallalias shared o"QuantLibCPPWraper.dll" ./cppwrapper.o lQuantLib collect2: ld terminated with signal 11 [Segmentation fault], core dumped Info: resolving vtable for QuantLib::Errorby linking to __imp___ZTVN8QuantLib5ErrorE (autoimport) Info: resolving vtable for QuantLib::EulerDiscretizationby linking to __imp___ZTVN8QuantLib19EulerDiscretizationE (autoimport) Info: resolving VTT for QuantLib::CompositeInstrument by linking to __imp___ZTTN8QuantLib19CompositeInstrumentE (autoimport) Info: resolving vtable for QuantLib::CompositeInstrumentby linking to __imp___ZTVN8QuantLib19CompositeInstrumentE (autoimport) Info: resolving vtable for QuantLib::AnalyticEuropeanEngineby linking to __imp___ZTVN8QuantLib22AnalyticEuropeanEngineE (autoimport) Info: resolving VTT for QuantLib::OneAssetOption::argumentsby linking to __imp___ZTTN8QuantLib14OneAssetOption9argumentsE (autoimport) Info: resolving vtable for QuantLib::OneAssetOption::argumentsby linking to Have you got any idea of what It's going on ? Why It works perfectly with 0.3.11 and not with 0.8.0 ? I tried on 2 differents computers, I read the tutorial of SkWash, and I'm desperate :). I'm ready to offer some French Champagne if you can help me :) Thx for all Guillaume 
From: Mark joshi <mark.joshi@gm...>  20070824 00:21:26

I switched off statement completion and parameter listing under tools, options, and it didn't crash. So it probably is intellisense. regards Mark On 22/08/07, Luigi Ballabio <luigi.ballabio@...> wrote: > On Wed, 20070822 at 10:58 +1000, Mark joshi wrote: > > OK I just tried this, with Visual Studio 8.0 express it crashes. This > > is just after doing an update from subversion. > > Mark, > could it be the Intellisense problem mentioned on the list in the past > few days? > > Later, > Luigi > > >  > > An ideal world is left as an exercise to the reader. >  Paul Graham > > >  Assoc Prof Mark Joshi Centre for Actuarial Studies University of Melbourne My website is http://www.markjoshi.com 
From: Luigi Ballabio <luigi.ballabio@gm...>  20070822 14:49:29

On Sat, 20070818 at 07:07 0700, nando@... wrote: > Revision: 12315 > http://quantlib.svn.sourceforge.net/quantlib/?rev=12315&view=rev > Author: nando > Date: 20070818 07:07:43 0700 (Sat, 18 Aug 2007) > > Log Message: >  > added externals folder for partial views of the QuantLib trunk Nando, care to elaborate? How are these external if they point into the same repository? Isn't this a job for tags instead? Luigi  If you can't convince them, confuse them.  Harry S. Truman 
From: Luigi Ballabio <luigi.ballabio@gm...>  20070822 07:55:23

On Wed, 20070822 at 10:58 +1000, Mark joshi wrote: > OK I just tried this, with Visual Studio 8.0 express it crashes. This > is just after doing an update from subversion. Mark, could it be the Intellisense problem mentioned on the list in the past few days? Later, Luigi  An ideal world is left as an exercise to the reader.  Paul Graham 
From: Mark joshi <mark.joshi@gm...>  20070822 00:58:56

OK I just tried this, with Visual Studio 8.0 express it crashes. This is just after doing an update from subversion. It seems to crash with QuantLibAllDynamic on opening. QuantLibAllStatic seems ok. Mark  Assoc Prof Mark Joshi Centre for Actuarial Studies University of Melbourne My website is http://www.markjoshi.com 
From: Luigi Ballabio <luigi.ballabio@gm...>  20070820 10:00:06

On Wed, 20070815 at 12:32 +0000, John Maiden wrote: > For those that are interested, this is a potential patch for an issue > I've found > with the Convertible Bond classes. Basically the weights that are > being assigned > to calculate the discounting rate in > TsiveriotisFernandesLattice::stepback skew > the results for high credit spreads, so that a callable convertible > bond will be > more expensive than an equivalent noncallable convertible bond. See > "More More > More Convertible Bonds" in gmane.comp.finance.quantlib.user for more > details. Thanks John, I'll have a look at your patch as soon as I get some time. Later, Luigi  The most exciting phrase to hear in science, the one that heralds new discoveries, is not "Eureka!" but "That's funny..."  Isaac Asimov 
From: SourceForge.net <noreply@so...>  20070817 21:20:43

Bugs item #1776593, was opened at 20070817 14:20 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112740&aid=1776593&group_id=12740 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) Summary: No Vega or Rho under American Option Pricing Engines Initial Comment: I cannot get qlVega or qlRho to calculate Vega and Rho for an American option. I have used all of the pricing engines (CRR, JOSHI, etc.) and none work. However, the European and Asian option pricing engines work with qlVega and qlRho. If anyone can fix this, please keep me posted. I am using it in QuantLibXL in Excel 2003. Matt Slezak nocman43202@...  You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112740&aid=1776593&group_id=12740 
From: John Maiden <jwmaiden@ya...>  20070815 12:33:05

For those that are interested, this is a potential patch for an issue I've found with the Convertible Bond classes. Basically the weights that are being assigned to calculate the discounting rate in TsiveriotisFernandesLattice::stepback skew the results for high credit spreads, so that a callable convertible bond will be more expensive than an equivalent noncallable convertible bond. See "More More More Convertible Bonds" in gmane.comp.finance.quantlib.user for more details. Changes would be made to TsiveriotisFernandesLattice::stepback and DiscretizedConvertible::applyConvertibility(). Would like input on these changes and see if people agree/disagree, or know of a better way to do this. Originally the adjusted discount rate was ConversionProbability * risk free rate + (1  ConversionProbability) * (risk free rate + spread). A higher conversion probability (~1) means that you're probably going to convert, and should discount the convert like a stock. A lower conversion probability (~0) means the convert is trading like a bond, and should be discounted as such. I'll keep this approach, but change how the conversion probability is computed. Basically instead of assigning an initial probability of 1 if the convert is convertible and the value is below parity, and later blending the probabilities, the conversion probabilities will simply be delta (which I took from "Global Convertible Investing" by Hart Woodson). New code below: In DiscretedConvertible.cpp: void DiscretizedConvertible::applyConvertibility() { Array grid = adjustedGrid(); Array ratio = divAdjustedRatio(); for (Size j=0; j<values_.size(); j++) { Real payoff = ratio[j]*grid[j]; if (values_[j] <= payoff) { values_[j] = payoff; // old method //conversionProbability_[j] = 1.0; } } for (Size j=0; j<values_.size()1; j++) { conversionProbability_[j] = ((values_[j+1]  values_[j])/(grid[j+1]  grid[j]))*(1/ratio[j]); //some values are slightly above 1, must be due to rounding if(conversionProbability_[j] > 1.0) conversionProbability_[j] = 1.0; } //always assume that will convert at highest stock price conversionProbability_[values_.size()  1] = 1.0; } In TFLattice.hpp: template <class T> void TsiveriotisFernandesLattice<T>::stepback( Size i, const Array& values, const Array& conversionProbability, const Array& spreadAdjustedRate, Array& newValues, Array& newConversionProbability, Array& newSpreadAdjustedRate) const { Real localRiskFreeRate = riskFreeRate_.at(i); Real localcreditSpread = creditSpread_.at(i); Real down = TFtree_>probability(0,0,0); Real up = TFtree_>probability(0,0,1); for (Size j=0; j<this>size(i); j++) { // new conversion probability is calculated via backward // induction using up and down probabilities on tree on // previous conversion probabilities, ie weighted average // of previous probabilities. //don't blend the probabilties newConversionProbability[j] = conversionProbability[j]; /*down*conversionProbability[j]+ up*conversionProbability[j+1];*/ // Use blended discounting rate newSpreadAdjustedRate[j] = newConversionProbability[j] * localRiskFreeRate + (1newConversionProbability[j])*(localRiskFreeRate+localcreditSpread); newValues[j] = (down*values[j]/(1+(spreadAdjustedRate[j]*dt_))) + (up*values[j+1]/(1+(spreadAdjustedRate[j+1]*dt_))); } } Looking forward to input. 
From: Piter Dias <piterdias@ca...>  20070813 15:30:47

Eric/Nicola, Both you are right. The problem was Intellisense. Thanks a lot. Piter Dias piterdias@... 
From: eric ehlers <eric.ehlers@gm...>  20070813 14:48:27

> I checkout Quantlib from SVN but it crashes VC++ Express when I open it. > It used to work but this checkout has some problems. > Did anyone face the same problem? Could you please help me? Hi Piter, I'm using the latest SVN snapshot in VC8 Professional without problems. I don't know about VC8 Express. One cause of crashes in VC8 is Intellisense and you might want to try disabling that  rename file "VC\vcpackages\feacp.dll" under the VC8 directory tree. Apparently there's a patch to fix Intellisense but I haven't looked into it yet. Again this all relates to VC8 Professional, I'm not sure it applies to VC8 Express. Regards, Eric 
From: Piter Dias <piter.dias@ma...>  20070812 23:54:39

Guys, I checkout Quantlib from SVN but it crashes VC++ Express when I open it. It used to work but this checkout has some problems. Did anyone face the same problem? Could you please help me? Regards, Piter Dias piterdias@... 
From: Anthony Nguyen <bluetrin@gm...>  20070812 17:50:09

Hi Eric, I would like also to help on this task if you do not mind some help ... Kind regards. Anthony Nguyen "eric liao" <the.eric.liao@...> a écrit dans le message de news: 4fea6be60707312315k263e0b50u648b0b3b4c99b1ad@... > Hi all, > > As I am new to QuantLib development, for learning purposes I am > thinking of volunteering for the SF task of ''Implement new evolvers > for market models'' > (http://sourceforge.net/pm/task.php?func=detailtask&project_task_id=138604&group_id=12740&group_project_id=52333). > > I would just like to check with you guys if there has been any > progress done on the task to avoid repeating other people's work. > > Regards, > Eric Liao > >  > This SF.net email is sponsored by: Splunk Inc. > Still grepping through log files to find problems? Stop. > Now Search log events and configuration files using AJAX and a browser. > Download your FREE copy of Splunk now >> http://get.splunk.com/ 
From: SourceForge.net <noreply@so...>  20070805 16:19:44

Bugs item #1767957, was opened at 20070805 09:19 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112740&aid=1767957&group_id=12740 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) Summary: make error Initial Comment: I am getting this error when making quantLib using cygwin: make[4]: Entering directory `/cygdrive/c/back_testing/quantLib/QuantLib0.8.1/ql/indexes' /bin/sh ../../libtool tag=CXX mode=link g++ g O2 Wall L/usr/local/lib o libIndexes.la iborindex.lo indexman ager.lo interestrateindex.lo swapindex.lo ibor/libIborIndexes.la swap/libSwapIndexes.la rm fr .libs/libIndexes.lax rm fr .libs/libIndexes.lax mkdir .libs/libIndexes.lax rm fr .libs/libIndexes.lax/libIborIndexes.a mkdir .libs/libIndexes.lax/libIborIndexes.a (cd .libs/libIndexes.lax/libIborIndexes.a && ar x /cygdrive/c/back_testing/quantLib/QuantLib0.8.1/ql/indexes/ibor/.libs /libIborIndexes.a) libtool: link: ERROR: object name conflicts: .libs/libIndexes.lax/libIborIndexes.a//cygdrive/c/back_testing/quantLib/Qua ntLib0.8.1/ql/indexes/ibor/.libs/libIborIndexes.a make[4]: *** [libIndexes.la] Error 1 make[4]: Leaving directory `/cygdrive/c/back_testing/quantLib/QuantLib0.8.1/ql/indexes' make[3]: *** [allrecursive] Error 1 make[3]: Leaving directory `/cygdrive/c/back_testing/quantLib/QuantLib0.8.1/ql/indexes' make[2]: *** [allrecursive] Error 1 make[2]: Leaving directory `/cygdrive/c/back_testing/quantLib/QuantLib0.8.1/ql' make[1]: *** [all] Error 2 make[1]: Leaving directory `/cygdrive/c/back_testing/quantLib/QuantLib0.8.1/ql' make: *** [allrecursive] Error 1 Configure seamed to work. This was the line to configure: ./configure withboostinclude=/usr/local/boost_1_34_1 withboostlib=/usr/local/lib withgnuld  You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112740&aid=1767957&group_id=12740 
From: Mark joshi <mark.joshi@gm...>  20070803 23:34:49

I don't think anyone is working on the GlassermanZhao market model evolver and this would be well worth getting. See the paper from Finance and Stochastics or Glasserman's book. Mark  Assoc Prof Mark Joshi Centre for Actuarial Studies University of Melbourne My website is http://www.markjoshi.com 
From: Luigi Ballabio <luigi.ballabio@gm...>  20070803 16:11:49

Hi all, I'll be in vacation for two weeks without an internet connection. See you all on August 20th. Luigi  The first thing we do, let's kill all the lawyers.  W. Shakespeare, "King Henry VI, Part II" 
From: Mahmud Shehov <mahmudshehov@gm...>  20070803 15:43:14

Dear all, I have just joined the quantlib developers. Can you help me with additional info? From where to start, who to ask for tasks and help? Thanks, Mahmud 
From: Luigi Ballabio <luigi.ballabio@gm...>  20070803 14:47:25

On Mon, 20070723 at 12:19 +0000, John Maiden wrote: > Allen > > Maybe I'm missing something here, but wouldn't a > callable fixed rate bond be similar to a convertible bond? > All you have to do is make it a European option and then > set the conversion ratio so small that it will never be > converted at the final time. Yes, in principle; but the current implementation of convertible bonds builds an equity tree and uses deterministic interest rates. This approximation works if variations in the equity value have a much bigger effect on price than variations in the interest rates. If you take the convertibility away, the assumption breaks down. Later, Luigi  Greenspun's Tenth Rule of Programming: Any sufficiently complicated C or Fortran program contains an adhoc, informallyspecified bugridden slow implementation of half of Common Lisp. 