Jinsi ya kukokotoa implied volatility ya option
Implied volatility haina fomula ya moja kwa moja. Jifunze jinsi solver inavyotumia iteration na Python kupata thamani hiyo kutoka kwa bei ya soko na kuepuka makosa.
Mbinu ya kukokotoa implied volatility
Implied volatility haipatikani kwa fomula ya moja kwa moja, bali kwa njia ya iteration. Hakuna mlinganyo wa closed-form unaoweza kubadilisha market price ya option kuwa namba ya volatility. Kwa hivyo, solver huanza kwa kukisia volatility, kisha hutumia Black-Scholes kupata bei ya option hiyo. Mfumo hulinganisha bei ya kielelezo hicho na bei ya soko, na kurudia mchakato huo hadi bei hizo mbili zilingane hadi kwenye senti. Ifuatayo ni mbinu nzima: utendaji wa kupanga bei (pricing function), mzunguko wa utafutaji (search loop) katika maktaba ya kawaida ya Python, na sababu zinazofanya watoa huduma wawili kuchapisha namba tofauti kwa mkataba uleule.
Kwa nini implied volatility haina fomula ya closed form
Black-Scholes hufanya kazi kwa mwelekeo mmoja. Ipe bei ya sasa (spot price), strike price, muda wa kuisha kwa mkataba, riba, na volatility, nayo itatoa bei ya kinadharia. Kati ya kiasi hicho sita, vitano vinaweza kuonekana sokoni. Volatility haiwezi kuonekana. Ni dhana kuhusu umbali ambao hisa itasafiri kuanzia sasa hadi muda wa mkataba kuisha.
Wafanyabiashara hupindua tatizo hili. Bei iko kwenye skrini, na volatility ndiyo isiyojulikana. Implied volatility ni kigezo cha volatility kinachofanya bei ya Black-Scholes ilingane na bei ya soko ya option. Sigma, ambayo ni kigezo cha volatility, inapatikana ndani ya kazi ya normal distribution mara mbili, katika d1 na d2, na hakuna njia ya kuipanga upya ili iwe peke yake. Algebra huishia hapo. Utafutaji wa namba (numerical search) huchukua nafasi. Kile ambacho implied volatility hupima inashughulikia tafsiri; ukurasa huu unashughulikia utaratibu wa kiufundi.
Sifa mbili za mtindo huu hufanya utafutaji kuwa rahisi. Bei ya mtindo wa call hupanda kila wakati volatility inapopanda, bila ubaguzi, na husogea kwa utaratibu. Kiasi ambacho hupanda tu kinaweza kupatikana kwa kubana thamani zake kati ya viwango viwili.
Solver huendeshwa mara moja kwa kila mkataba
Matokeo ni namba moja kwa kila mkataba, si kwa kila hisa, na mikataba ya hisa ileile katika kipindi kimoja cha muda wa kuisha haipatani. Kila option ya Apple (AAPL) yenye siku ishirini hadi arobaini na tano zilizobaki iliyofanyiwa biashara mnamo Juni 30, 2026, ikiwa imepangwa kwa strike price kama sehemu ya bei ya hisa:
SQL halisi nyuma ya kila namba
WITH toFloat64(strike_price) / toFloat64(underlying_close) AS moneyness
SELECT multiIf(moneyness < 0.90, '0.80-0.90',
moneyness < 0.95, '0.90-0.95',
moneyness < 1.00, '0.95-1.00',
moneyness < 1.05, '1.00-1.05',
moneyness < 1.10, '1.05-1.10',
'1.10-1.20') AS strike_vs_spot,
round(100 * avg(toFloat64(implied_volatility)), 1) AS implied_vol_pct,
count() AS contract_count
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = toDate('2026-06-30')
AND days_to_expiry BETWEEN 20 AND 45
AND iv_converged = 1
AND volume > 0
AND moneyness BETWEEN 0.80 AND 1.20
GROUP BY strike_vs_spot
ORDER BY min(moneyness)Tukipanda ngazi ya strike price, ukanda wa 0.80-0.90 ulitatuliwa kuwa 35.5%, ukanda wa 0.95-1.00 kuwa 28.1%, na ukanda wa 1.10-1.20 kuwa 27.3%. Kampuni moja, kikao kimoja, majibu 6. Mviringo katika mkondo huo una jina, volatility skew, na volatility moja kwa kila hisa haiwezi kuuchora.
Bei ya Black-Scholes ambayo solver inapaswa kuilingana
S ni bei ya hisa, K ni strike price, T ni muda uliosalia hadi mkataba kuisha kwa miaka, r ni risk-free rate, na N() ni standard normal cumulative distribution, ikimaanisha uwezekano kwamba thamani ya kawaida ya kawaida (standard normal draw) itaangukia chini ya nukta fulani. Python inabeba sehemu hiyo ya mwisho katika math.erf, kwa hivyo mkalimani pekee anatosha.
apt-get update && apt-get install -y python3
Tanguliza amri zote mbili na sudo kwenye mashine ambapo wewe si mtumiaji mwenye mamlaka ya root. Kisha hifadhi hii kama iv.py:
import math
def norm_cdf(x):
return 0.5 * (1.0 + math.erf(x / math.sqrt(2.0)))
def bs_call(S, K, T, r, sigma):
if T <= 0.0 or sigma <= 0.0:
return max(S - K, 0.0)
d1 = (math.log(S / K) + (r + 0.5 * sigma * sigma) * T) / (sigma * math.sqrt(T))
d2 = d1 - sigma * math.sqrt(T)
return S * norm_cdf(d1) - K * math.exp(-r * T) * norm_cdf(d2)
Hiyo ndiyo modeli ya mbele (forward model) kwa ukamilifu. Ipe volatility, utapata bei.
Jinsi implied volatility inavyokokotolewa, hatua kwa hatua
Bisection ndiyo mbinu ya kwanza kujifunza. Haiwezi kupotoka, na haihitaji calculus.
- Weka jibu kati ya 0.01 (asilimia moja kwa mwaka) na 5.0 (asilimia mia tano). Kila option inayouzwa sokoni iko ndani ya masafa hayo.
- Kokotoa bei ya option kwa kutumia thamani ya katikati ya masafa hayo.
- Ikiwa bei ya mfano iko juu ya bei ya soko, makadirio yalikuwa juu sana: sogeza ukingo wa juu wa masafa hadi kwenye thamani ya katikati. Ikiwa iko chini, sogeza ukingo wa chini kwenda juu.
- Acha pale bei ya mfano itakapofika ndani ya senti moja ya bei ya soko.
def implied_vol(price, S, K, T, r, lo=0.01, hi=5.0, tol=0.01):
for _ in range(100):
mid = 0.5 * (lo + hi)
diff = bs_call(S, K, T, r, mid) - price
if abs(diff) < tol:
return mid
if diff > 0.0:
hi = mid
else:
lo = mid
return 0.5 * (lo + hi)
# Hisa ya $100, strike price ya $100, miezi mitatu, viwango vya riba asilimia nne, $5.00 kwenye skrini
print(round(implied_vol(5.00, 100.0, 100.0, 0.25, 0.04), 4))
Endesha python3 iv.py. Inatoa takribani 0.226, yaani implied volatility ya karibu asilimia ishirini na mbili nukta sita kwa mwaka kwa bei hiyo ya dhana. Kila mzunguko hupunguza masafa kwa nusu, na masafa yenye upana wa 4.99 yakigawanywa kwa nusu mara ishirini huwa madogo kuliko 0.00001, kwa hivyo kikomo cha marudio mia moja hakifikiwi kamwe.
Kwa nini Newton-Raphson inafika kwenye suluhisho haraka, na mahali inaposhindwa
Mbinu ya Bisection hupoteza taarifa ambazo modeli tayari inazo. Vega ni mabadiliko ya bei ya option kwa kila kitengo cha volatility, na Black-Scholes huitoa kwa fomula iliyokamilika. Newton-Raphson huichukulia kama mteremko (slope): pima hitilafu ya bei, gawanya kwa vega, kisha urekebishe makadirio yako kwa kiasi hicho.
def bs_vega(S, K, T, r, sigma):
d1 = (math.log(S / K) + (r + 0.5 * sigma * sigma) * T) / (sigma * math.sqrt(T))
return S * math.sqrt(T) * math.exp(-0.5 * d1 * d1) / math.sqrt(2.0 * math.pi)
def implied_vol_newton(price, S, K, T, r, sigma=0.5):
for _ in range(20):
v = bs_vega(S, K, T, r, sigma)
if v < 1e-8:
return None # hakuna mteremko uliobaki, rudisha kazi kwa bisection
step = (bs_call(S, K, T, r, sigma) - price) / v
sigma -= step
if sigma <= 0.0:
return None # hatua imevuka mpaka na kuingia kwenye thamani isiyo na maana
if abs(step) < 1e-6:
return sigma
return None
Karibu na bei ya sasa (at the money), mbinu hii hufika kwenye suluhisho kwa hatua tatu au nne ikilinganishwa na hatua kumi na mbili za bisection. Hitilafu hutokea kwenye denominator: vega hupungua kadiri strike price inavyozidi kuwa mbali na bei ya hisa. Mikataba hiyo hiyo ya AAPL, ikiwa na wastani wa vega wa kila ukanda ikionyeshwa kama asilimia ya thamani ya at the money:
SQL halisi nyuma ya kila namba
WITH toFloat64(strike_price) / toFloat64(underlying_close) AS moneyness,
(
SELECT avg(toFloat64(vega))
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = toDate('2026-06-30')
AND days_to_expiry BETWEEN 20 AND 45
AND iv_converged = 1
AND volume > 0
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.025
) AS atm_vega
SELECT multiIf(moneyness < 0.90, '0.80-0.90',
moneyness < 0.95, '0.90-0.95',
moneyness < 1.00, '0.95-1.00',
moneyness < 1.05, '1.00-1.05',
moneyness < 1.10, '1.05-1.10',
'1.10-1.20') AS strike_vs_spot,
round(100 * avg(toFloat64(vega)) / atm_vega, 1) AS vega_pct_of_atm,
count() AS contract_count
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = toDate('2026-06-30')
AND days_to_expiry BETWEEN 20 AND 45
AND iv_converged = 1
AND volume > 0
AND moneyness BETWEEN 0.80 AND 1.20
GROUP BY strike_vs_spot
ORDER BY min(moneyness)Maeneo ya pembeni (wings) hubeba sehemu ndogo ya usikivu: 33.1% ya vega ya at the money katika ukanda wa 0.80-0.90, na 31.6% katika ukanda wa 1.10-1.20. Kugawanya hitilafu ya bei kwa namba ndogo kiasi hicho husababisha hatua kubwa sana, ambayo inaweza kusukuma makadirio chini ya sifuri, ambapo modeli haina tena cha kusema. Mifumo ya uzalishaji (production solvers) huunganisha mbinu hizi mbili, kwa kutumia bracketing kwanza na kisha kusafisha matokeo kwa Newton. Vega inafafanua greek hiyo yenyewe.
Kwa nini vyanzo viwili vinaripoti implied volatility tofauti
Mfano huu uko wazi na hesabu zake zimekubalika, kwa hivyo kutokubaliana huko kunatokana na data zinazoingizwa.
- Mid dhidi ya last. Solver inahitaji bei moja. Mkataba wenye bid ya $2.00 na offer ya $2.20 una midpoint ya $2.10, wakati last print inaweza kuwa $2.02 ya dakika tisini zilizopita. Katika mkataba wa aina hiyo, senti kumi za bei zina thamani kubwa kuliko pointi moja ya volatility.
- Dividends na carry. Kazi iliyo hapo juu inatoa bei ya European call kwenye hisa isiyolipa chochote. Dividend kabla ya muda wa mkataba kuisha hupunguza forward price, na kila trading desk hutumia marekebisho yake na rate yake yenyewe.
- American early exercise. US single stock options zinaweza kutekelezwa siku yoyote, na haki hiyo ina thamani ambayo fomula ya European haina mahali pa kuiweka. Solver inayopuuza haki hiyo husukuma tofauti hiyo kwenye volatility. Binomial trees hupanga bei ya haki ya utekelezaji moja kwa moja.
- Stale quotes. Strike iliyofanyiwa biashara mara ya mwisho siku ya Jumanne bado inaonyesha quote, na solver huchukulia chochote inachopewa kama ukweli.
Convergence hufanya mambo mawili ya mwisho yaonekane. Jopo hapa chini linachukua majina nane maarufu mnamo Juni 30, 2026, linahesabu mikataba iliyofanyiwa biashara yenye siku 20 hadi 45 zilizobaki, na kuripoti at the money volatility pamoja na sehemu ya mikataba ambapo solve ilifikia convergence:
SQL halisi nyuma ya kila namba
WITH abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) AS distance_from_spot
SELECT underlying_symbol AS symbol,
round(100 * avgIf(toFloat64(implied_volatility), iv_converged = 1 AND distance_from_spot < 0.05), 1) AS atm_iv_pct,
round(100 * countIf(iv_converged = 1) / count(), 1) AS solved_pct,
count() AS contract_count
FROM global_markets.options_greeks
WHERE date = toDate('2026-06-30')
AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'TSLA', 'SPY', 'KO', 'JNJ')
AND days_to_expiry BETWEEN 20 AND 45
AND volume > 0
GROUP BY symbol
HAVING countIf(iv_converged = 1 AND distance_from_spot < 0.05) > 0
ORDER BY atm_iv_pct DESCTSLA ilikuwa na at the money reading ya juu zaidi kati ya majina ya 8 kwa 47.7%, dhidi ya 14.4% kwa SPY iliyo chini kabisa. Kwenye chain ya TSLA, 97.8% ya mikataba iliyofanyiwa biashara ilitoa jibu lililofikia convergence. Salio ni strikes ambapo bei iliyopewa solver iko nje ya kile ambacho volatility yoyote inaweza kuzalisha, quote iliyo chini ya intrinsic value au crossed market. Kama namba kama hiyo inachukuliwa kuwa ya juu ni swali tofauti: je 30% IV ni ya juu inalichambua hilo, na the expected move inalibadilisha kuwa kiwango cha dola.
Mkataba uleule, unaotatuliwa kila kikao
Hakuna kinachohifadhiwa kuhusu implied volatility. Hukokotolewa upya kutoka kwa bei yoyote iliyo kwenye skrini. Hapo chini ni mkataba wa AAPL uliouzwa kwa wingi zaidi unaoisha Julai 17, 2026, ukifuatiliwa kuanzia Juni 1 hadi muda wake kuisha. Strike price haikubadilika na muda wa kuisha haukubadilika:
SQL halisi nyuma ya kila namba
WITH (
SELECT ticker
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = toDate('2026-06-30')
AND expiration_date = toDate('2026-07-17')
AND iv_converged = 1
AND volume > 0
ORDER BY volume DESC
LIMIT 1
) AS pinned_contract
SELECT date,
round(100 * avg(toFloat64(implied_volatility)), 1) AS implied_vol_pct,
round(avg(days_to_expiry)) AS days_to_expiry
FROM global_markets.options_greeks
WHERE ticker = pinned_contract
AND date BETWEEN toDate('2026-06-01') AND toDate('2026-07-17')
AND iv_converged = 1
AND volume > 0
GROUP BY date
ORDER BY dateKatika vipindi 29, usomaji uliotatuliwa ulianza kwa 25.1% kukiwa na siku 46 zilizobaki na kumalizia kwa 26.6% kukiwa na siku 4 zilizobaki. Kila nukta kwenye mstari huo ni mzunguko mmoja wa kitanzi kilicho hapo juu dhidi ya bei ya kikao hicho. Kurasa zetu za kila ticker huchapisha suluhisho hilohilo: AAPL implied volatility huendesha mchakato huo kila siku kwenye mnyororo mzima, ili msomaji aweze kurudia takwimu yoyote hapo kwa kutumia msimbo uliopo kwenye ukurasa huu.
Maswali yanayoulizwa mara kwa mara kuhusu hesabu ya implied volatility
Je, kuna fomula ya implied volatility?
Hapana. Mfumo wa Black-Scholes huunganisha volatility na bei, na muunganisho huo hauna kinyume cha msingi (elementary inverse), kwa sababu sigma hujitokeza mara mbili ndani ya usambazaji wa kawaida (normal distribution). Kila namba ya implied volatility unayokutana nayo, hapa au mahali popote, hutokana na mfumo wa utatuzi wa marudio (iterative solver).
Hesabu hiyo inachukua marudio mangapi?
Kila hatua ya bisection hugawa masafa hayo mara mbili, hivyo masafa ya 0.01 hadi 5.0 hupungua chini ya 0.00001 katika marudio ishirini, na kulinganisha bei ya soko (quote) na senti iliyo karibu zaidi kwa kawaida huchukua takriban marudio kumi na mawili. Newton-Raphson hufika hapo katika marudio matatu au manne ikiwa bei iko karibu na strike price, kwa gharama ya hatua zinazoweza kutokuwa thabiti pale vega inapokuwa ndogo.
Kwa nini broker wangu na mtoa data wanaonyesha implied volatility tofauti?
Waliingiza data tofauti kwenye mfumo wa utatuzi. Tofauti za kawaida ni kati ya bei ya wastani (mid quote) na bei ya mwisho ya biashara (last trade), dhana ya viwango vya riba na dividend, na kama mfumo unazingatia uwezekano wa kutumia option kabla ya muda kuisha (American early exercise). Kwenye strike price yenye miamala michache (thin strike), bei ya zamani pekee inaweza kubadilisha jibu kwa pointi kadhaa.
Je, call na put katika strike price moja hutoa implied volatility sawa?
Kinadharia ndiyo, put-call parity huzifunga pamoja katika strike price na muda wa kuisha (expiry) mmoja. Kivitendo, bei hizo mbili huwekwa kwa kujitegemea, na namba zinazopatikana hutofautiana kidogo, jambo ambalo ni sababu nyingine inayofanya wastani wa mnyororo wa options (chain-wide averages) kutofautiana kati ya watoa huduma.
Je, ninaweza kukokotoa implied volatility bila data ya soko?
Ndiyo, kwa bei ya dhahania. Kanuni hapo juu huchukua bei, strike price, bei ya sasa (spot), muda wa kuisha, na kiwango cha riba, vyote vikiingizwa kwa mkono. Kulinganisha na namba ya mtoa huduma wa moja kwa moja ndiyo sehemu ngumu zaidi: hiyo inahitaji data zilezile zilizotumiwa na mtoa huduma huyo.
Kila paneli hapa huhifadhi SQL iliyo nyuma yake. Fungua moja, kisha endesha utatuzi uleule dhidi ya mnyororo wa moja kwa moja kwenye terminal ya Strasmore.