Help with Black Scholes Formula

Discussion in 'Options' started by aphexcoil, Jun 10, 2003.

  1. I am having some trouble making things add up. Here is what I have so far (using QQQ as the example):

    Let's say QQQ has a current implied volatility of 28. The strike price is $20.00 for a call and the stock is presently $30.18. The risk-free interest rate is 1.5%. The time until expiration is 38 days.

    According to Black Scholes:

    Call Price = SN(D1) - Xe^(-rt)N(D2)

    D1 = [ln(S/X) + (r + (v^2)/2) * t] / [v*sqr(t)]

    S = Stock Price
    X = Call Option Strike Price
    r = risk-free interest (.015)
    v = implied volatility (.28)
    t = time until expiration in percent of year (38/265)

    sqr = square root of

    Now, according to this formula, I should get a number very close to 1 when I solve for n(D1) where n(x) is the normal cumulative distribution function. However, I am currently getting around .68 for the delta -- which is obviously wrong.

    Would anyone be willing to hold my hand and walk me through this process?
     
  2. FinStat

    FinStat

    john c. hull- options, futures and other derivatives.

    sterile but informative
     
  3. ln (30.18 / 20) + (.015 + (.28^2)/2) * (38/365)
    -----------------------------------------------------------
    .28 * .3226

    = .4114 + (.015 * .0392) * .1041
    ---------------------------------------
    .28 * .3226

    = .4114 + .0056
    ------------------
    .0903

    = 4.617 (x)

    Any value of x over 3.9 will give you an N(x) value of 1.

    Did you intentionally use 265 days instead of 365 days for the calculation of T - t?
     
  4. I meant 365 .. my bad ... I'll look that over ... It must be how I arranged the groupings ... thanks!
     
  5. dlincke

    dlincke

    I assume you are aware that standatd BS only provides for correct valuation of European style options while options on QQQ are American. To receive correct theoretical values for American options you'll to use an adjusted version of BS (e.g. Whaley) or instead use a binomial tree to do the valuation.
     

  6. It was my understanding that options on issues that do not carry dividends are rarely exercised significantly before their expiration as their time premium would be wasted.

    Thanks for the advice, though -- I'll check into that. I don't think QQQ pays dividends (I'm assuming BS model is inadequate for most circumstances, but at least it is a start that gives a ballpark range for many issues).
     
  7. Here is a quck Black-Scholes hack I did in Wealth Script. You should be able to convert it to C very easily. Sorry about the formatting. Cut/paste removed my indents.


    Procedure GetOptionPrice(Irate, histvol, stkprice, strike: float; days: integer);
    begin //This procedure sets the Call and Put price using the Black-Scholes model.
    //The Call and Put prices are in the Globals CallPrice, PutPrice.

    var t, d1, d2, y1, z1, x1, y2, z2, x2, Nd1, Nd2: float;

    //Change days til expiration to be a percent of a year (t)
    t := days/365.0;

    //Historical volatility as a percent
    histvol := histvol/100.0;

    //Set current interest rate (risk free rate)
    Irate := Irate/100.0;


    //If no time is left then we don't need Black-Scholes
    if t = 0 then
    begin
    if stkprice <= strike then CallPrice := 0.0;
    if stkprice > strike then CallPrice := stkprice - strike;
    if stkprice >= strike then PutPrice := 0.0;
    if stkprice < strike then PutPrice := strike - stkprice;
    end
    else //Calc the normal density
    begin
    d1 := (LN(stkprice/strike) + (Irate + Sqr(histvol)/2)*t)/(histvol * Sqrt(t));

    d2 := d1 - histvol * Sqrt(t);

    y1 := 1/(1 + (0.2316419 * Abs(d1)));

    z1 := 0.3989423 * Exp(-1*(d1 * d1)/2);

    x1 := 1 - z1 * (1.330274 * Power(y1,5) - 1.821256 * Power(y1,4) + 1.781478 * Power(y1,3) - 0.356538 * Power(y1,2) + 0.3193814 * y1);

    y2 := 1/(1 + (0.2316419 * Abs(d2)));

    z2 := 0.3989423 * Exp(-1*(d2 * d2)/2);

    x2 := 1 - z2 * (1.330274 * Power(y2,5) - 1.821256 * Power(y2,4) + 1.781478 * Power(y2,3) - 0.356538 * Power(y2,2) + 0.3193814 * y2);

    if(d1 > 0) then Nd1 := x1; //The Normal Density N(d1) is also the Delta
    if(d1 < 0) then Nd1 := 1 - x1;

    if(d2 > 0) then Nd2 := x2;
    if(d2 < 0) then Nd2 := 1 - x2;

    CallPrice := stkprice * Nd1 - strike * Exp(-1*(Irate * t)) * Nd2; //The Call price (Global)

    PutPrice := CallPrice + strike - stkprice - (Irate * strike * days/365.0); //The Put price (Global)

    end;
    end;
     
  8. dlincke

    dlincke

    For valuation purposes it is irrelevant what people do most of the time. As far as early exercise never being optimal for American options on non-dividend paying stocks is concerned this only applies to calls not puts.