Strasmore Research
Belajar Matt ConnorOleh Matt Connor · Dikemas kini 2026-08-05

Cara Mengira Volatiliti Tersirat

Volatiliti tersirat dikira melalui iterasi, bukan formula bentuk tertutup. Fahami penyelesai, kod Python dan punca vendor menghasilkan angka berbeza.

Volatiliti tersirat dikira melalui iterasi, bukan formula. Tiada ungkapan bentuk tertutup yang boleh menukar harga pasaran opsyen kembali kepada angka volatiliti. Oleh itu, penyelesai menganggarkan satu tahap volatiliti, menetapkan harga opsyen menggunakan Black-Scholes, membandingkan harga model itu dengan sebut harga, kemudian mengulangi proses sehingga kedua-duanya sepadan sehingga ke sen terdekat. Bahagian seterusnya menerangkan keseluruhan kaedah: fungsi penetapan harga, gelung carian dalam Python pustaka standard, serta sebab dua vendor menerbitkan angka yang berbeza untuk kontrak yang sama.

Mengapa volatiliti tersirat tiada formula bentuk tertutup

Black-Scholes berfungsi dalam satu arah. Masukkan harga spot, harga strike, tempoh hingga tamat tempoh, kadar faedah dan volatiliti, lalu model itu menghasilkan harga teori. Lima daripada enam kuantiti tersebut boleh diperhatikan. Volatiliti tidak boleh diperhatikan secara langsung. Ia merupakan andaian tentang sejauh mana harga saham akan bergerak antara sekarang dengan tarikh tamat tempoh.

Pedagang menyongsangkan masalah itu. Harga dipaparkan pada skrin, manakala volatiliti menjadi pemboleh ubah yang tidak diketahui. Volatiliti tersirat ialah input volatiliti yang menjadikan harga Black-Scholes sama dengan harga pasaran opsyen. Sigma, iaitu terma volatiliti, berada di dalam fungsi taburan normal sebanyak dua kali, masing-masing dalam d1 dan d2, dan tiada penyusunan semula algebra yang dapat mengasingkannya. Algebra terhenti pada tahap itu. Carian berangka mengambil alih. Apakah yang diukur oleh volatiliti tersirat menerangkan tafsirannya; halaman ini menerangkan mekanismenya.

Dua sifat model menjadikan carian itu mudah. Harga model bagi call meningkat setiap kali volatiliti meningkat, tanpa pengecualian, dan perubahannya lancar. Kuantiti yang hanya meningkat boleh ditentukan dengan mengecilkan julat di sekeliling nilainya.

Penyelesai dijalankan sekali bagi setiap kontrak

Outputnya ialah satu nombor bagi setiap kontrak, bukan satu nombor bagi setiap saham. Kontrak bagi saham yang sama dalam tempoh luput yang sama juga memberikan hasil yang berbeza antara satu sama lain. Setiap opsyen Apple (AAPL) dengan baki tempoh 20 hingga 45 hari yang didagangkan pada 30 Jun 2026, dikumpulkan mengikut strike sebagai pecahan daripada harga saham:

PertanyaanSatu penyelesaian bagi setiap kontrak: Volatiliti tersirat AAPL mengikut zon harga laksana, 30 Jun 2026
SQL tepat di sebalik setiap nombor
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)
Run this yourself

Apabila kita membaca susunan strike itu, zon 0.80-0.90 memberikan hasil 35.5%, zon 0.95-1.00 memberikan hasil 28.1%, dan zon 1.10-1.20 memberikan hasil 27.3%. Satu syarikat, satu sesi, 6 jawapan. Lengkungan pada graf itu mempunyai nama, iaitu skew volatiliti, dan satu ukuran volatiliti bagi setiap saham tidak dapat menggambarkannya.

Harga Black-Scholes yang perlu dipadankan oleh penyelesai

S ialah harga saham, K ialah harga strike, T ialah tempoh hingga luput dalam tahun, r ialah kadar bebas risiko, dan N() ialah taburan kumulatif normal piawai. Ia mewakili kebarangkalian bahawa cabutan normal piawai berada di bawah titik tertentu. Python menyediakan fungsi terakhir itu dalam math.erf, jadi jurubahasa sahaja sudah memadai.

apt-get update && apt-get install -y python3

Pada mesin yang tidak menggunakan akaun root, awali kedua-dua arahan dengan sudo. Kemudian simpan kod ini sebagai 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)

Itulah model hadapan sepenuhnya. Masukkan nilai volatiliti untuk mendapatkan harga.

Cara mengira implied volatility, langkah demi langkah

Kaedah bisection ialah kaedah pertama yang wajar dipelajari. Kaedah ini tidak boleh menyimpang dan tidak memerlukan kalkulus.

  1. Hadkan jawapan antara 0.01 (1% setahun) dan 5.0 (500%). Setiap opsyen yang didagangkan berada dalam julat itu.
  2. Kira harga opsyen pada titik tengah julat tersebut.
  3. Jika harga model lebih tinggi daripada sebut harga pasaran, anggaran itu terlalu tinggi: turunkan had atas julat kepada titik tengah. Jika harga model lebih rendah, naikkan had bawah.
  4. Berhenti apabila harga model berada dalam lingkungan satu sen daripada sebut harga.
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)

# $100 stock, $100 strike, three months, 4% rates, $5.00 on the screen
print(round(implied_vol(5.00, 100.0, 100.0, 0.25, 0.04), 4))

Jalankan python3 iv.py. Kod itu mencetak kira-kira 0.226, iaitu implied volatility hampir 22.6% setahun bagi sebut harga hipotesis tersebut. Setiap lelaran membahagikan dua julat berkenaan. Julat selebar 4.99 yang dibahagikan dua sebanyak twenty kali menjadi lebih kecil daripada 0.00001. Oleh itu, had maksimum 100 lelaran tidak akan tercapai.

Mengapa Newton-Raphson menumpu lebih pantas dan apabila ia gagal

Bisection mengabaikan maklumat yang sudah tersedia dalam model. Vega ialah perubahan harga opsyen bagi setiap unit volatiliti, dan Black-Scholes memberikan nilainya dalam bentuk tertutup. Newton-Raphson menggunakannya sebagai kecerunan: ukur ralat penentuan harga, bahagikan dengan vega, kemudian ubah anggaran sebanyak nilai tersebut.

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          # tiada kecerunan yang tinggal, serahkan semula kepada bisection
        step = (bs_call(S, K, T, r, sigma) - price) / v
        sigma -= step
        if sigma <= 0.0:
            return None          # langkah terlebih jauh sehingga menghasilkan nilai tidak munasabah
        if abs(step) < 1e-6:
            return sigma
    return None

Bagi opsyen hampir at the money, kaedah ini mencapai keputusan dalam tiga atau empat lelaran berbanding kira-kira sedozen lelaran bagi bisection. Kegagalannya berpunca daripada penyebut: vega mengecil apabila strike bergerak semakin jauh daripada harga saham. Bagi kontrak AAPL yang sama, purata vega bagi setiap zon ditunjukkan sebagai peratusan daripada bacaan at the money:

PertanyaanApabila langkah Newton bermasalah: Vega AAPL mengikut zon harga laksana, 30 Jun 2026
SQL tepat di sebalik setiap nombor
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)
Run this yourself

Zon sayap hanya mempunyai sebahagian kecil daripada sensitiviti tersebut: 33.1% daripada vega at the money dalam zon 0.80-0.90, dan 31.6% dalam zon 1.10-1.20. Membahagikan ralat penentuan harga dengan nombor sekecil itu menghasilkan langkah yang sangat besar. Langkah itu boleh menyebabkan anggaran jatuh di bawah sifar, iaitu keadaan apabila model tidak lagi dapat memberikan penyelesaian. Penyelesai dalam sistem pengeluaran menggabungkan kedua-dua kaedah ini. Mula-mula, julat penyelesaian dibatasi. Kemudian, anggaran diperhalus menggunakan Newton. Vega menerangkan Greek itu sendiri.

Mengapa dua sumber melaporkan volatiliti tersirat yang berbeza

Model itu tersedia untuk umum dan pengiraannya telah dipersetujui. Maka, perbezaan datang daripada input.

  • Harga tengah berbanding harga terakhir. Penyelesai memerlukan satu harga. Kontrak dengan bida $2.00 dan tawaran $2.20 mempunyai harga tengah $2.10, manakala cetakan terakhir mungkin $2.02 dari sembilan puluh minit lalu. Bagi kontrak seperti itu, perbezaan sepuluh sen pada harga bernilai lebih daripada satu mata volatiliti.
  • Dividen dan carry. Fungsi di atas menetapkan harga call Eropah ke atas saham yang tidak membayar dividen. Dividen sebelum tarikh luput menurunkan harga hadapan, dan setiap trading desk menggunakan pelarasan serta kadar tersendiri.
  • Pelaksanaan awal gaya Amerika. US single stock options boleh dilaksanakan pada bila-bila hari, dan hak itu mempunyai nilai yang tidak dapat dimasukkan oleh formula Eropah. Penyelesai yang mengabaikannya akan memasukkan perbezaan itu ke dalam volatiliti. Binomial trees menetapkan harga hak pelaksanaan itu secara langsung.
  • Sebut harga lapuk. Strike yang kali terakhir didagangkan pada hari Selasa masih memaparkan sebut harga, dan penyelesai menganggap apa sahaja yang diterimanya sebagai benar.

Penumpuan menjadikan dua perkara terakhir ini lebih jelas. Panel di bawah mengambil lapan saham terkenal pada 30 Jun 2026, mengira kontrak yang didagangkan dengan baki 20 hingga 45 hari, serta melaporkan volatiliti at the money dan bahagian kontrak yang penyelesaiannya berjaya menumpu:

PertanyaanVolatiliti tersirat at-the-money dan penumpuan penyelesai, lapan saham, 30 Jun 2026
SQL tepat di sebalik setiap nombor
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 DESC
Run this yourself

TSLA mencatat bacaan at the money tertinggi bagi 8 saham itu, iaitu 47.7%, berbanding 14.4% bagi SPY yang terendah. Dalam rantaian TSLA, 97.8% kontrak yang didagangkan menghasilkan jawapan yang berjaya menumpu. Selebihnya ialah strike yang harganya berada di luar julat yang boleh dihasilkan oleh mana-mana volatiliti, sebut harga di bawah nilai intrinsik atau pasaran bercanggah. Sama ada angka seperti itu dianggap tinggi ialah persoalan berasingan: adakah IV 30% tinggi membincangkannya, manakala pergerakan dijangka menukarkannya kepada julat dalam dolar.

Kontrak yang sama, diselesaikan semula pada setiap sesi

Tiada apa-apa tentang volatiliti tersirat yang disimpan. Nilainya dikira semula berdasarkan harga yang dipaparkan pada skrin. Di bawah ialah kontrak AAPL yang paling aktif didagangkan dan akan luput pada 17 Julai 2026, yang dijejaki dari 1 Jun hingga tarikh luput. Harga strike dan tarikh luput tidak berubah:

PertanyaanSatu kontrak AAPL, diselesaikan semula setiap sesi hingga tamat tempoh 17 Julai 2026
SQL tepat di sebalik setiap nombor
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 date
Run this yourself

Sepanjang 29 sesi, bacaan yang dikira dibuka pada 25.1% dengan 46 hari berbaki dan berakhir pada 26.6% dengan 4 hari berbaki. Setiap titik pada garisan itu ialah satu larian gelung di atas berdasarkan sebut harga sesi tersebut. Halaman bagi setiap ticker kami menerbitkan pengiraan yang sama: volatiliti tersirat AAPL mengiranya setiap hari merentasi keseluruhan rantaian opsyen, supaya pembaca boleh menghasilkan semula mana-mana angka di situ menggunakan kod pada halaman ini.

Soalan Lazim Pengiraan Volatiliti Tersirat

Adakah terdapat formula untuk volatiliti tersirat?

Tidak. Black-Scholes memetakan volatiliti kepada harga, tetapi pemetaan itu tidak mempunyai songsangan asas kerana sigma muncul dua kali dalam taburan normal. Setiap angka volatiliti tersirat yang anda temui, di sini atau di mana-mana, terhasil daripada penyelesai berlelar.

Berapa banyak lelaran yang diperlukan untuk pengiraan ini?

Setiap pusingan kaedah pembahagian dua mengecilkan julat kepada separuh. Julat 0.01 hingga 5.0 mengecil kepada kurang daripada 0.00001 selepas twenty pusingan. Memadankan sebut harga kepada sen terdekat biasanya mengambil kira-kira dozen pusingan. Kaedah Newton-Raphson boleh mencapai keputusan itu dalam three atau four pusingan apabila hampir at the money. Namun, kaedah ini boleh memberikan hasil yang tidak stabil apabila vega rendah.

Mengapakah broker saya dan vendor data menunjukkan volatiliti tersirat yang berbeza?

Mereka memasukkan input yang berbeza ke dalam penyelesai. Perbezaan lazim termasuk sebut harga mid berbanding dagangan terakhir, andaian kadar faedah dan dividen, serta sama ada model mengendalikan pelaksanaan awal gaya Amerika. Bagi strike yang kurang didagangkan, sebut harga lapuk sahaja boleh mengubah keputusan sebanyak beberapa mata.

Adakah call dan put pada strike yang sama memberikan volatiliti tersirat yang sama?

Secara teori, ya. Put-call parity mengaitkan kedua-duanya pada strike dan tarikh luput yang sama. Dalam amalan, kedua-dua sebut harga ditetapkan secara berasingan. Oleh itu, angka yang dikira boleh berbeza sedikit. Ini menjadi satu lagi sebab purata merentas keseluruhan rantaian opsyen berbeza antara vendor.

Bolehkah saya mengira volatiliti tersirat tanpa data pasaran?

Ya, untuk sebut harga hipotetikal. Kod di atas menerima harga, strike, harga spot, tempoh hingga luput dan kadar yang dimasukkan secara manual. Memadankan angka vendor secara langsung ialah bahagian yang lebih sukar. Anda perlu menggunakan input yang sama seperti yang digunakan oleh vendor.


Setiap panel di sini menyimpan SQL yang mendasarinya. Buka salah satu panel, kemudian jalankan pengiraan yang sama terhadap rantaian langsung di terminal Strasmore.

#implied volatility#options#black-scholes#python#how-to