Syntax
public enum CalcEx.CallPutFlag { Call, Put };
public static double BlackScholes(this double S, double X, double D, double R, double V, CallPutFlag flag)
public enum CallPutFlag { Call, Put };
public static double BlackScholes(CallPutFlag flag, double S, double X, double D, double R, double V)
Parameter Description
flag | Call or Put option - pass either CallPutFlag.Call or CallPutFlag.Put |
S | Stock price |
X | Strike price of option |
D | Days to expiry |
R | Risk-free rate, % |
V | Volatility, % |
Description
This Black Scholes formula is courtesy
espenhaug.com, slightly modified by Eugene.
Example
Code below illustrates a couple of examples illustrating the Black Scholes formula usage:
Example using C# extension methods:
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using Community.Components;
namespace WealthLab.Strategies
{
public class MyStrategy : WealthScript
{
private string str (double s) { return String.Format("{0:0.00}", s); }
protected override void Execute()
{
double price = Bars.Close[Bars.Count-1];
if( price < 10 ) Abort();
double call =
price.BlackScholes( price + 5.0d, 60, 1d, 20.0, CalcEx.CallPutFlag.Call ); // days=60, rate=1%, volatility=20%=0.20
double put =
price.BlackScholes( price - 5.0d, 60, 1d, 20.0, CalcEx.CallPutFlag.Put ); // days=60, rate=1%, volatility=20%=0.20
PrintDebug( string.Concat( "Call = ", str(call), " Put = ", str(put) ) );
}
}
}
Legacy syntax example:
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using Community.Components;
namespace WealthLab.Strategies
{
public class MyStrategy : WealthScript
{
private string str (double s) { return String.Format("{0:0.00}", s); }
protected override void Execute()
{
double price = Bars.Close[Bars.Count-1];
if( price < 10 ) Abort();
double call =
Calculate.BlackScholes( Calculate.CallPutFlag.Call,
price,
price + 5.0d,
60,
1d,
20.0 ); // days=60, rate=1%, volatility=20%=0.20
double put =
Calculate.BlackScholes( Calculate.CallPutFlag.Put,
price,
price - 5.0d,
60,
1d,
20.0 ); // days=60, rate=1%, volatility=20%=0.20
PrintDebug( string.Concat( "Call = ", str(call), " Put = ", str(put) ) );
}
}
}