Errors Finding Implied Vol

I am trying to implement a FIndRoot method to solve for Implied Volatility. I am trying to do something like shown in this book from 1998:
Dropbox - Error - Simplify your life. 1
However, when I try to implement this with the now built-in FinancialDerivative function, I get errors:

    CallImpliedVol[s_,k_,r_,t_,price_] := \[Sigma] /. FindRoot[FinancialDerivative[{"European", "Call"},{"StrikePrice"->k,
 "Expiration"->t},{"Volatility" ->\[Sigma],"InterestRate"->r,"CurrentPrice"->s}]==price, {\[Sigma],.2}]
    
        CallImpliedVol[11,10,.05,.25,1]

Returns errors:

FinancialDerivative::checknumeric: Parameters {Volatility??} cannot have non-numeric values.

FindRoot::jsing: Encountered a singular Jacobian at the point {?} = {0.2}. Try perturbing the initial point(s).

I am not sure what to try here. Building my own function to replace a built-in function would work, but I would hope there is a more elegant solution. Does anyone have any ideas?


Ok, I think I found the solution; there were a couple of issues. One is that my test case was looking for the case when 10-dollar strike Call on a underlying at 11-dollars would cost exactly 1 dollar → no implied volatility premium, which is when volatility = 0. Not a good test case. When I correct for this, and try a few different methods, the solution works when we use the “Brent” Method":

CallImpliedVol[s_,k_,r_,t_,price_] := \[Sigma] /. FindRoot[FinancialDerivative[{"European", "Call"},
{"StrikePrice"->k, "Expiration"->t},{"Volatility" ->\[Sigma],"InterestRate"->r,"CurrentPrice"->s}]==price,
{\[Sigma],.01,10}, Method->"Brent"]

CallImpliedVol[11,10,.05,1,1.93]

Returns

FinancialDerivative::checknumeric: Parameters {Volatility??} cannot
have non-numeric values.

Out[124]= 0.249851