44
55namespace Estimator . Services
66{
7- public enum OptionSideEnum : byte
8- {
9- None = 0 ,
10- Put = 1 ,
11- Call = 2 ,
12- Share = 3
13- }
14-
157 public class OptionService
168 {
9+ protected enum OptionSideEnum : byte
10+ {
11+ None = 0 ,
12+ Put = 1 ,
13+ Call = 2 ,
14+ Share = 3
15+ }
16+
1717 /// <summary>
1818 /// Asset or nothing
1919 /// </summary>
@@ -52,17 +52,17 @@ private static double D2(double T, double sigma, double d1)
5252 /// <param name="r">continuously compounded risk-free interest rate</param>
5353 /// <param name="q">continuously compounded dividend yield</param>
5454 /// <returns></returns>
55- public static double Premium ( OptionSideEnum optionType , double S , double K , double T , double sigma , double r , double q )
55+ public static double Premium ( string optionType , double S , double K , double T , double sigma , double r , double q )
5656 {
5757 double d1 = D1 ( S , K , T , sigma , r , q ) ;
5858 double d2 = D2 ( T , sigma , d1 ) ;
5959
6060 switch ( optionType )
6161 {
62- case OptionSideEnum . Call :
62+ case nameof ( OptionSideEnum . Call ) :
6363 return S * Math . Exp ( - q * T ) * Normal . CDF ( 0 , 1 , d1 ) - K * Math . Exp ( - r * T ) * Normal . CDF ( 0 , 1 , d2 ) ;
6464
65- case OptionSideEnum . Put :
65+ case nameof ( OptionSideEnum . Put ) :
6666 return K * Math . Exp ( - r * T ) * Normal . CDF ( 0 , 1 , - d2 ) - S * Math . Exp ( - q * T ) * Normal . CDF ( 0 , 1 , - d1 ) ;
6767 }
6868
@@ -97,7 +97,7 @@ public static double Vega(double S, double K, double T, double sigma, double r,
9797 /// <param name="q"></param>
9898 /// <param name="optionMarketPrice"></param>
9999 /// <returns></returns>
100- public static double IV ( OptionSideEnum optionType , double S , double K , double T , double r , double q , double optionMarketPrice )
100+ public static double IV ( string optionType , double S , double K , double T , double r , double q , double optionMarketPrice )
101101 {
102102 Func < double , double > f = sigma => Premium ( optionType , S , K , T , sigma , r , q ) - optionMarketPrice ;
103103 Func < double , double > df = sigma => Vega ( S , K , T , sigma , r , q ) ;
@@ -116,14 +116,14 @@ public static double IV(OptionSideEnum optionType, double S, double K, double T,
116116 /// <param name="r">continuously compounded risk-free interest rate</param>
117117 /// <param name="q">continuously compounded dividend yield</param>
118118 /// <returns></returns>
119- public static double Theta ( OptionSideEnum optionType , double S , double K , double T , double sigma , double r , double q )
119+ public static double Theta ( string optionType , double S , double K , double T , double sigma , double r , double q )
120120 {
121121 double d1 = D1 ( S , K , T , sigma , r , q ) ;
122122 double d2 = D2 ( T , sigma , d1 ) ;
123123
124124 switch ( optionType )
125125 {
126- case OptionSideEnum . Call :
126+ case nameof ( OptionSideEnum . Call ) :
127127 {
128128 double theta = - Math . Exp ( - q * T ) * ( S * Normal . PDF ( 0 , 1 , d1 ) * sigma ) / ( 2.0 * Math . Sqrt ( T ) )
129129 - ( r * K * Math . Exp ( - r * T ) * Normal . CDF ( 0 , 1 , d2 ) )
@@ -132,7 +132,7 @@ public static double Theta(OptionSideEnum optionType, double S, double K, double
132132 return theta / 365 ;
133133 }
134134
135- case OptionSideEnum . Put :
135+ case nameof ( OptionSideEnum . Put ) :
136136 {
137137 double theta = - Math . Exp ( - q * T ) * ( S * Normal . PDF ( 0 , 1 , d1 ) * sigma ) / ( 2.0 * Math . Sqrt ( T ) )
138138 + ( r * K * Math . Exp ( - r * T ) * Normal . PDF ( 0 , 1 , - d2 ) )
@@ -157,16 +157,16 @@ public static double Theta(OptionSideEnum optionType, double S, double K, double
157157 /// <param name="r">continuously compounded risk-free interest rate</param>
158158 /// <param name="q">continuously compounded dividend yield</param>
159159 /// <returns></returns>
160- public static double Delta ( OptionSideEnum optionType , double S , double K , double T , double sigma , double r , double q )
160+ public static double Delta ( string optionType , double S , double K , double T , double sigma , double r , double q )
161161 {
162162 double d1 = D1 ( S , K , T , sigma , r , q ) ;
163163
164164 switch ( optionType )
165165 {
166- case OptionSideEnum . Call :
166+ case nameof ( OptionSideEnum . Call ) :
167167 return Math . Exp ( - r * T ) * Normal . CDF ( 0 , 1 , d1 ) ;
168168
169- case OptionSideEnum . Put :
169+ case nameof ( OptionSideEnum . Put ) :
170170 return - Math . Exp ( - r * T ) * Normal . CDF ( 0 , 1 , - d1 ) ;
171171
172172 default :
@@ -201,17 +201,17 @@ public static double Gamma(double S, double K, double T, double sigma, double r,
201201 /// <param name="r">continuously compounded risk-free interest rate</param>
202202 /// <param name="q">continuously compounded dividend yield</param>
203203 /// <returns></returns>
204- public static double Rho ( OptionSideEnum optionType , double S , double K , double T , double sigma , double r , double q )
204+ public static double Rho ( string optionType , double S , double K , double T , double sigma , double r , double q )
205205 {
206206 double d1 = D1 ( S , K , T , sigma , r , q ) ;
207207 double d2 = D2 ( T , sigma , d1 ) ;
208208
209209 switch ( optionType )
210210 {
211- case OptionSideEnum . Call :
211+ case nameof ( OptionSideEnum . Call ) :
212212 return K * T * Math . Exp ( - r * T ) * Normal . CDF ( 0 , 1 , d2 ) ;
213213
214- case OptionSideEnum . Put :
214+ case nameof ( OptionSideEnum . Put ) :
215215 return - K * T * Math . Exp ( - r * T ) * Normal . CDF ( 0 , 1 , - d2 ) ;
216216
217217 default :
0 commit comments