The definition of pVarPut needs to signal that the function only works with a numeric argument.
In[1]:= S = 100; K = 70; [Sigma] = 0.2; T = 1; r = 0.01; [Alpha] =
r - [Sigma]^2/2;
In[2]:= n = 100;
Z = RandomVariate[NormalDistribution[], n];
In[4]:= fVarPut[\[Theta]_?NumberQ] :=
Variance[E^(-r T)
Ramp[K -
S E^(\[Alpha] T + \[Sigma] Sqrt[
T] (Z + \[Theta]))] E^(-\[Theta] (Z + \[Theta]) + \[Theta]^2/
2)];
In[5]:= (* freezes even with WorkingPrecision\[Rule]5 *)
NMinimize[fVarPut[x], x, WorkingPrecision -> 5]
Out[5]= {0, {x -> 3.3686}}
In[6]:= FindMinimum[fVarPut[x], {x, -2}, WorkingPrecision -> 5]
Out[6]= {1.0248*10^-382, {x -> -32.000}}