possible error in pricing bermudan swaptions

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

possible error in pricing bermudan swaptions

Luca Berardi-2
Hi
 
I guess there is an error in the class BermudanExercise. In the constructor code, the following line:
type_ = American
should be replaced by the line:
type_ = Bermudan
 
The above error also implies a mispricing for BermudanSwaptions, because they are actually priced assuming an american-type exercise.
Indeed, the following code implements the exercise conditions for discretized options (and then for discretized swaptions).  When the execution reaches the switch statement the flag "exerciseType_" is equal to American also for bermudan swaptions, and the wrong section of code is executed thereafter.
 
    void DiscretizedOption::postAdjustValues() {
        method()->rollAlmostBack(underlying_, time());
        switch (exerciseType_) {
          case Exercise::American:
            if (time_ >= exerciseTimes_[0] && time_ <= exerciseTimes_[1])
                applyExerciseCondition();
            break;
          default:
            for (Size i=0; i<exerciseTimes_.size(); i++) {
                Time t = exerciseTimes_[i];
                if (t >= 0.0 && isOnTime(t))
                    applyExerciseCondition();
            }
        }
        underlying_->postAdjustValues();
    }
}


Nuovo Yahoo! Messenger E' molto più divertente: Audibles, Avatar, Webcam, Giochi, Rubrica… Scaricalo ora!