Definitions

In[]:=
Φ[x_]:=CDF[NormalDistribution[0,1],x]
In[]:=
ϕ[x_]:=PDF[NormalDistribution[0,1],x]
In[]:=
d1=(Log[S/K]+(r-δ+
2
σ
/2)(T-t))(σSqrt[T-t]);
In[]:=
d2=(Log[S/K]+(r-δ-
2
σ
/2)(T-t))(σSqrt[T-t]);
In[]:=
c=SExp[-δ(T-t)]Φ[d1]-KExp[-r(T-t)]Φ[d2];
In[]:=
Θc=-SExp[-δ(T-t)](σϕ[d1]/(2Sqrt[T-t])-δΦ[d1])-rKExp[-r(T-t)]Φ[d2];
In[]:=
ρc=K(T-t)Exp[-r(T-t)]Φ[d2];
In[]:=
vega=SExp[-δ(T-t)]Sqrt[T-t]ϕ[d1];
In[]:=
chooser=c+KExp[-r(T-t)]Φ-Log[S/K]+(r-δ)(T-t)-
2
σ
(t1-t)2(σSqrt[t1-t])-SExp[-δ(T-t)]Φ-Log[S/K]+(r-δ)(T-t)+
2
σ
(t1-t)2(σSqrt[t1-t]);
In[]:=
Δchooser=Exp[-δ(T-t)]Φ[d1]-Φ-Log[S/K]+(r-δ)(T-t)+
2
σ
(t1-t)2(σSqrt[t1-t]);
In[]:=
Γchooser=Exp[-δ(T-t)]ϕ[d1]Sqrt[T-t]+ϕLog[S/K]+(r-δ)(T-t)+
2
σ
(t1-t)2(σSqrt[t1-t])Sqrt[t1-t](σS);
In[]:=
Θchooser=Θc+rKExp[-r(T-t)]Φ-Log[S/K]+(r-δ)(T-t)-
2
σ
(t1-t)2(σSqrt[t1-t])-SExp[-δ(T-t)]δΦ-Log[S/K]+(r-δ)(T-t)+
2
σ
(t1-t)2(σSqrt[t1-t])+σϕLog[S/K]+(r-δ)(T-t)+
2
σ
(t1-t)2(σSqrt[t1-t])(2Sqrt[t1-t]);
In[]:=
ρchooser=ρc-K(T-t)Exp[-r(T-t)]Φ-Log[S/K]+(r-δ)(T-t)-
2
σ
(t1-t)2(σSqrt[t1-t]);
In[]:=
vegachooser=vega+SExp[-δ(T-t)]Sqrt[t1-t]ϕLog[S/K]+(r-δ)(T-t)+
2
σ
(t1-t)2(σSqrt[t1-t]);

Examples

For the first example the continuously compounded, risk-free interest rate is 8%, the current price of the stock is $50, the stock pays no dividend, the volatility in the continuous return on the stock is 25%. The strike prices of the put and call are $50 and both expire in 6 months. The time until choice is 3 months.
In[]:=
FinancialDerivative[{"Chooser","European"},{"StrikePrice"->50,"Expiration"->3/12,"ExpirationCall"->6/12,"ExpirationPut"->6/12,"StrikePriceCall"->50,"StrikePricePut"->50},{"InterestRate"->8/100,"Volatility"->25/100,"CurrentPrice"->50,"Dividend"->0,"ReferenceTime"->0},{"Value","Delta","Gamma","Theta","Rho","Vega"}]
Out[]=
{6.10708,0.272442,0.102283,-4.63514,3.75765,22.6935}
Theta is calculated as -4.63514.
My formula stored as “chooser” is for a simple chooser option. The variables are S=CurrentPrice, K=StrikePrice=StrikePriceCall=StrikePricePut, r=InterestRate, T=ExpirationCall=ExpirationPut, t1=Expiration (the choice time), σ=Volatility, δ=Dividend, t=ReferenceTime (current time).
In[]:=
{chooser,Δchooser,Γchooser,Θchooser,ρchooser,vegachooser}/.{S->50,K->50,r->8/100,T->6/12,t1->3/12,σ->25/100,δ->0/100,t->0.0}
Out[]=
{6.10708,0.272446,0.102283,-8.59209,3.75761,22.6935}
Value of the option and all Greeks are the same as above with the exception of Theta which here is -8.59209. I do not think it is an error in my hand derivation of Theta.
In[]:=
D[chooser,t]/.{S->50,K->50,r->8/100,T->6/12,t1->3/12,σ->25/100,δ->0/100,t->0.0}
Out[]=
-8.59209
For the second example the continuously compounded, risk-free interest rate is 10%, the current price of the stock is $100, the stock pays a 5% continuous dividend yield, the volatility in the continuous return on the stock is 30%. The strike prices of the put and call are $100 and both expire in 2 years. The time until choice is 1 year.
In[]:=
FinancialDerivative[{"Chooser","European"},{"StrikePrice"->100,"Expiration"->1,"ExpirationCall"->2,"ExpirationPut"->2,"StrikePriceCall"->100,"StrikePricePut"->100},{"InterestRate"->10/100,"Volatility"->30/100,"CurrentPrice"->100,"Dividend"->5/100,"ReferenceTime"->0},{"Value","Delta","Gamma","Theta","Rho","Vega"}]
Out[]=
{25.7079,0.324323,0.0184027,-4.81772,13.4494,78.2975}
Theta is calculated as -4.81772.
In[]:=
{chooser,Δchooser,Γchooser,Θchooser,ρchooser,vegachooser}/.{S->100,K->100,r->10/100,T->2,t1->1,σ->30/100,δ->5/100,t->0.0}
Out[]=
{25.7079,0.324325,0.0184026,-7.33201,13.4491,78.2974}
Value of the option and all Greeks are the same as above with the exception of Theta which here is - 7.33201.
In[]:=
D[chooser,t]/.{S->100,K->100,r->10/100,T->2,t1->1,σ->30/100,δ->5/100,t->0.0}
Out[]=
-7.33201