<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Подразумеваемая волатильность]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Подразумеваемая волатильность форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Fri, 24 Apr 2026 13:27:50 +0300</pubDate>
		<item>
			<title>Подразумеваемая волатильность</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77137/topic8841/">Подразумеваемая волатильность</a></b> <i>Расчет подразумеваемой волатильности опционов</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Для серии тогда так
====code====
<pre>-- Функция для вычисления кумулятивной функции распределения нормального распределения (N(x))
function norm_cdf(x)
&nbsp;&nbsp;&nbsp;&nbsp;local t = 1 / (1 + 0.2316419 * math.abs(x))
&nbsp;&nbsp;&nbsp;&nbsp;local d = 0.3989422804014337 * math.exp(-0.5 * x * x)
&nbsp;&nbsp;&nbsp;&nbsp;local prob = d * t * (0.319381530 + t * (-0.356563782 + t * (1.781477937 + t * (-1.821255978 + t * 1.330274429)))))
&nbsp;&nbsp;&nbsp;&nbsp;if x &#62;= 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1 - prob
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return prob
&nbsp;&nbsp;&nbsp;&nbsp;end
end

-- Основная функция для расчета цены опциона по модели Блэка-Шоулза
function black_scholes_call_price(S, K, T, r, sigma)
&nbsp;&nbsp;&nbsp;&nbsp;local d1 = (math.log(S / K) + (r + 0.5 * sigma * sigma) * T) / (sigma * math.sqrt(T))
&nbsp;&nbsp;&nbsp;&nbsp;local d2 = d1 - sigma * math.sqrt(T)
&nbsp;&nbsp;&nbsp;&nbsp;return S * norm_cdf(d1) - K * math.exp(-r * T) * norm_cdf(d2)
end

-- Функция для нахождения подразумеваемой волатильности для одного опциона
function implied_volatility(S, K, T, r, market_price)
&nbsp;&nbsp;&nbsp;&nbsp;local low = 0.0001
&nbsp;&nbsp;&nbsp;&nbsp;local high = 2.0
&nbsp;&nbsp;&nbsp;&nbsp;local tolerance = 0.0001
&nbsp;&nbsp;&nbsp;&nbsp;local sigma = (low + high) / 2
&nbsp;&nbsp;&nbsp;&nbsp;local price = black_scholes_call_price(S, K, T, r, sigma)

&nbsp;&nbsp;&nbsp;&nbsp;-- Итерационный метод поиска
&nbsp;&nbsp;&nbsp;&nbsp;while math.abs(price - market_price) &#62; tolerance do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if price &#60; market_price then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low = sigma
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;high = sigma
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sigma = (low + high) / 2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;price = black_scholes_call_price(S, K, T, r, sigma)
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return sigma
end

-- Функция для нахождения подразумеваемых волатильностей для серии опционов
function implied_volatilities_for_series(S, r, options)
&nbsp;&nbsp;&nbsp;&nbsp;local ivs = {}
&nbsp;&nbsp;&nbsp;&nbsp;for i, option in ipairs(options) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local iv = implied_volatility(S, option.K, option.T, r, option.market_price)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.insert(ivs, {K = option.K, T = option.T, implied_volatility = iv})
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return ivs
end

-- Пример использования
local S = 100&nbsp;&nbsp;&nbsp;&nbsp; -- Текущая цена актива
local r = 0.05&nbsp;&nbsp;&nbsp;&nbsp;-- Безрисковая процентная ставка (5%)

-- Список опционов с параметрами: Цена исполнения (K), Время до экспирации (T в годах), Рыночная цена опциона (market_price)
local options = {
&nbsp;&nbsp;&nbsp;&nbsp;{K = 95, T = 30 / 365, market_price = 6},
&nbsp;&nbsp;&nbsp;&nbsp;{K = 100, T = 30 / 365, market_price = 5},
&nbsp;&nbsp;&nbsp;&nbsp;{K = 105, T = 30 / 365, market_price = 3.5},
&nbsp;&nbsp;&nbsp;&nbsp;{K = 110, T = 60 / 365, market_price = 4.5}
}

-- Вычисляем подразумеваемую волатильность для каждого опциона
local ivs = implied_volatilities_for_series(S, r, options)

-- Выводим результаты
for _, iv in ipairs(ivs) do
&nbsp;&nbsp;&nbsp;&nbsp;print(string.format("Цена исполнения: %.2f, Время до экспирации: %.2f лет, Подразумеваемая волатильность: %.4f%%",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iv.K, iv.T, iv.implied_volatility * 100))
end
</pre>
=============

====code====
<pre>Что получилось:
Подразумеваемая волатильность: 42.0108
Цена исполнения: 95.00, Время до экспирации: 0.08 лет, Подразумеваемая волатильность: 21.5971%
Цена исполнения: 100.00, Время до экспирации: 0.08 лет, Подразумеваемая волатильность: 42.0108%
Цена исполнения: 105.00, Время до экспирации: 0.08 лет, Подразумеваемая волатильность: 46.9254%
Цена исполнения: 110.00, Время до экспирации: 0.16 лет, Подразумеваемая волатильность: 48.9867%</pre>
============= <br />
			<i>27.12.2024 15:24:34, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77137/topic8841/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77137/topic8841/</guid>
			<pubDate>Fri, 27 Dec 2024 15:24:34 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Подразумеваемая волатильность</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77136/topic8841/">Подразумеваемая волатильность</a></b> <i>Расчет подразумеваемой волатильности опционов</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Может это подойдет?
====code====
<pre>-- Функция для вычисления кумулятивной функции распределения нормального распределения (N(x))
function norm_cdf(x)
&nbsp;&nbsp;&nbsp;&nbsp;local t = 1 / (1 + 0.2316419 * math.abs(x))
&nbsp;&nbsp;&nbsp;&nbsp;local d = 0.3989422804014337 * math.exp(-0.5 * x * x)
&nbsp;&nbsp;&nbsp;&nbsp;local prob = d * t * (0.319381530 + t * (-0.356563782 + t * (1.781477937 + t * (-1.821255978 + t * 1.330274429) )))
&nbsp;&nbsp;&nbsp;&nbsp;if x &#62;= 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1 - prob
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return prob
&nbsp;&nbsp;&nbsp;&nbsp;end
end

-- Основная функция для расчета цены опциона по модели Блэка-Шоулза
function black_scholes_call_price(S, K, T, r, sigma)
&nbsp;&nbsp;&nbsp;&nbsp;local d1 = (math.log(S / K) + (r + 0.5 * sigma * sigma) * T) / (sigma * math.sqrt(T))
&nbsp;&nbsp;&nbsp;&nbsp;local d2 = d1 - sigma * math.sqrt(T)
&nbsp;&nbsp;&nbsp;&nbsp;return S * norm_cdf(d1) - K * math.exp(-r * T) * norm_cdf(d2)
end

-- Функция для нахождения подразумеваемой волатильности
function implied_volatility(S, K, T, r, market_price)
&nbsp;&nbsp;&nbsp;&nbsp;local low = 0.0001
&nbsp;&nbsp;&nbsp;&nbsp;local high = 2.0
&nbsp;&nbsp;&nbsp;&nbsp;local tolerance = 0.0001
&nbsp;&nbsp;&nbsp;&nbsp;local sigma = (low + high) / 2
&nbsp;&nbsp;&nbsp;&nbsp;local price = black_scholes_call_price(S, K, T, r, sigma)

&nbsp;&nbsp;&nbsp;&nbsp;-- Итерационный метод поиска
&nbsp;&nbsp;&nbsp;&nbsp;while math.abs(price - market_price) &#62; tolerance do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if price &#60; market_price then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low = sigma
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;high = sigma
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sigma = (low + high) / 2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;price = black_scholes_call_price(S, K, T, r, sigma)
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return sigma
end

-- Для примера использования
local S = 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Текущая цена актива
local K = 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Цена исполнения
local T = 30 / 365&nbsp;&nbsp;&nbsp;&nbsp; -- Время до экспирации (в годах)
local r = 0.05&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Безрисковая процентная ставка (5%)
local market_price = 5 -- Рыночная цена опциона call

local iv = implied_volatility(S, K, T, r, market_price)
print(string.format("Подразумеваемая волатильность: %.4f", iv * 100))
</pre>
============= <br />
			<i>27.12.2024 15:14:27, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77136/topic8841/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77136/topic8841/</guid>
			<pubDate>Fri, 27 Dec 2024 15:14:27 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Подразумеваемая волатильность</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message77090/topic8841/">Подразумеваемая волатильность</a></b> <i>Расчет подразумеваемой волатильности опционов</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Буду признателен, если кто-то сможет поделиться кодом расчета подразумеваемой волатильности (по отдельному опциону или серии). <br />
			<i>24.12.2024 15:32:07, Иван Ру.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message77090/topic8841/</link>
			<guid>http://forum.quik.ru/messages/forum10/message77090/topic8841/</guid>
			<pubDate>Tue, 24 Dec 2024 15:32:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
