一千萬個為什麽

搜索

德爾福的Black-Scholes

when trying to implement the Black-Scholes formula in Delphi, I've found this: http://www.espenhaug.com/black_scholes.html

I've checked the results against option-price.com and found they are different. Can anyone share the code for the B&S formula in Delphi/FreePascal (from a different source than espenhaug.com?.

{Black and Scholes (1973) Stock options}

function BlackScholes(CallPutFlag : string; S, X, T, r, v : Double): Double;
var
  d1, d2 : Double;

begin
  Result := 0;
  d1 := (LN(S/X) + (r + Power(v, 2)/2) * T)/(v * SqRt(T));
  d2 := d1 - v * SqRt(T);
  if CallPutFlag = 'c' then
    Result := S * CND(d1) - X * Exp(-r * T) * CND(d2)
  else
    if CallPutFlag = 'p' then
      Result := X * Exp(-r * T) * CND(-d2) - S * CND(-d1);
end;

{The cumulative normal distribution function}
function CND(X : Double) : Double;
var
  L, K : Double;

const
  a1 = 0.31938153;   a2 = -0.356563782;  a3 = 1.781477937;
  a4 = -1.821255978; a5 = 1.330274429;

begin
  L := Abs(X);
  K := 1/(1 + 0.2316419 * L);
  Result := 1 - 1/SqRt(2 * Pi) * Exp(-Power(L, 2)/2)
            * (a1 * K + a2 * Power(K, 2) + a3 * Power(K, 3)
            + a4 * Power(K, 4) + a5 * Power(K, 5));
  if X < 0 then
    Result := (1 - Result)
end;

最佳答案

暫時沒有最佳答案

轉載註明原文: 德爾福的Black-Scholes