<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Доска опцинов из QLUA]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Доска опцинов из QLUA форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sun, 03 May 2026 11:44:43 +0300</pubDate>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message48007/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день.<br /><br />Выложите скрипт, которым получаете параметры.<br />На скриншотах не видны параметры спроса и предложения из ттт. <br />
			<i>26.08.2020 11:57:47, Egor Zaytsev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message48007/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message48007/topic4401/</guid>
			<pubDate>Wed, 26 Aug 2020 11:57:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message47960/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_Co15xJnE" href="/user/19/" bx-tooltip-user-id="19">Egor Zaytsev</a> написал:<br />Добрый день.<br />К какому именно параметру и по какому инструменту обращаетесь? <br /><br />В таблице текущих торгов нет параметра &quot;Цена базового инструмента&quot;, параметр есть в таблице &quot;доска опционов&quot;<br />Если обращение идет к BID, OFFER то именно цену спроса и предложения должна система выдавать.<br />Если у Вас по другому, то просьба выложить скриншот таблицы текущие торги, чтобы было видно инструмент, параметр спроса и предложения, скрипт который запускаете и результат, который получаете.<br />=============<br />[FILE ID=6871] <br />Видите, &quot;расчетная цена&quot; идет цена БА, что и вызвало проблему.<br />Попробовал переделать скрипт, сделал первые трудные шаги в луа. Добавил обращение к bid и offer<br />Получилось вот что:<br />[FILE ID=6872] <br />До этого пробовал обращаться к &nbsp;last, то же самое.<br />Обращение идет к Optionbase,вроде все правильно. &nbsp;Ничего не понимаю <img src="http://forum.quik.ru/upload/main/smiles/5/icon_sad.png" border="0" data-code=":sad:" data-definition="SD" alt=":sad:" style="width:16px;height:16px;" title="Печально" class="bx-smile" /> &nbsp; <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=6871&" width="972" height="709" /><br /><img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=6872&" width="1155" height="596" /><br /><i>24.08.2020 22:47:13, Виктор.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message47960/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message47960/topic4401/</guid>
			<pubDate>Mon, 24 Aug 2020 22:47:13 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message47955/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день.<br />К какому именно параметру и по какому инструменту обращаетесь? <br /><br />В таблице текущих торгов нет параметра &quot;Цена базового инструмента&quot;, параметр есть в таблице &quot;доска опционов&quot;<br />Если обращение идет к BID, OFFER то именно цену спроса и предложения должна система выдавать.<br />Если у Вас по другому, то просьба выложить скриншот таблицы текущие торги, чтобы было видно инструмент, параметр спроса и предложения, скрипт который запускаете и результат, который получаете. <br />
			<i>24.08.2020 18:19:41, Egor Zaytsev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message47955/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message47955/topic4401/</guid>
			<pubDate>Mon, 24 Aug 2020 18:19:41 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message47938/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_rHcISVRr" href="/user/19/" bx-tooltip-user-id="19">Egor Zaytsev</a> написал:<br />Добрый день.<br /><br /><br />Есть гипотеза, что &nbsp;такого инструмента нет в терминале. Проверьте, &nbsp;видите ли Вы значения по этому инструменту в терминале, когда ошибка проявляется. И еще проверьте, что возвращает result = getParamEx(&quot;SPBOPT&quot;,&quot;GD1550BL9&quot;,BID).<br />=============<br />Скажите, вместо цены опциона, скрипт выдает цену БА. Можно как-нибудь пофиксить на цену собственно инструмента? <br />
			<i>22.08.2020 00:12:13, Виктор.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message47938/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message47938/topic4401/</guid>
			<pubDate>Sat, 22 Aug 2020 00:12:13 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message47846/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_feJZ7M24" href="/user/17/" bx-tooltip-user-id="17">Sergey Gorokhov</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/12743/" target="_blank" rel="nofollow">Андрей</a></noindex> написал:<br />Греками поделитесь, спасибо. <br />=============<br /> <br /> &nbsp; &nbsp; Скрытый текст &nbsp; &nbsp; &nbsp; &nbsp;
====code====
<pre>&nbsp;&nbsp; --&#91;&#91; 
Что делает:
&nbsp;&nbsp; По Таблице текущих параметров строит таблицу опционов с расcчитанными греками
&nbsp;&nbsp; Формулы взяты отсюда:
&nbsp;&nbsp; http://en.wikipedia.org/wiki/Black%96Scholes
&nbsp;&nbsp; http://en.wikipedia.org/wiki/Greeks_%28finance% 29 
&nbsp;&nbsp; 
Как использовать:
&nbsp;&nbsp; откройте Таблицу Текущих Параметров (меню Таблицы&nbsp;&nbsp;-&nbsp;&nbsp;&#62;&nbsp;&nbsp;Текущая Таблица)
&nbsp;&nbsp; Укажите настройки, после чего, запустите скрипт (меню Таблицы&nbsp;&nbsp;-&nbsp;&nbsp;Lua&nbsp;&nbsp;-&nbsp;&nbsp;Доступные скрипты)
&nbsp;&nbsp; чтобы сохранить в CSV файл, текущее состояние таблицы, нужно нажать комбинацию клавиш Ctrl + S файл сохраняется в папку со скриптом, с именем HHHMMDD.csv
&#93;&#93;
 -------------------------------НАСТРОЙКИ------------------------------- 
RiskFree =&nbsp;&nbsp;0 / 100&nbsp;&nbsp; --безрисковая ставка %, Указывается вручную 

BaseClassCode&nbsp;&nbsp;=&nbsp;&nbsp; "SPBFUT"&nbsp;&nbsp; --Класс базового актива 
ClassCode&nbsp;&nbsp;=&nbsp;&nbsp; "SPBOPT"&nbsp;&nbsp; --Класс опционов 

 --Список базовых активов, через запятую, по которым отображать опционы: 
BaseSecList&nbsp;&nbsp;=&nbsp;&nbsp; "RIU7"&nbsp;&nbsp; --getClassSecurities(BaseClassCode) --все сразу 
 
 --Список опционов через запятую: 
SecList&nbsp;&nbsp;=&nbsp;&nbsp; getClassSecurities (ClassCode)&nbsp;&nbsp;--все сразу 

INTERVAL&nbsp;&nbsp;=&nbsp;&nbsp; 1000&nbsp;&nbsp; --Интервал обновления таблицы 

doLogging =&nbsp;&nbsp;false&nbsp;&nbsp; --включает запись в файл, формата csv.&nbsp;&nbsp;
log_file =&nbsp;&nbsp;getScriptPath ()&nbsp;&nbsp;..&nbsp;&nbsp; "&#92;&#92;Greek.csv"&nbsp;&nbsp; --путь к csv файлу&nbsp;&nbsp;

 ----------------------------------------------------------------------- 

 -------------------------------ТО ЧТО НИЖЕ, ТРОГАТЬ НЕ НАДО------------------------------------------------------------------ 
 --Параметры таблицы 
tbl&nbsp;&nbsp;=&nbsp;&nbsp;{
&#91; "caption" &#93; =&nbsp;&nbsp;"Greek" ,
&#91; 1 &#93; =&nbsp;&nbsp;"Название" ,
&#91; 2 &#93; =&nbsp;&nbsp;"Код опциона" ,
&#91; 3 &#93; =&nbsp;&nbsp;"Тип опциона" ,
&#91; 4 &#93; =&nbsp;&nbsp;"Баз. актив" ,
&#91; 5 &#93; =&nbsp;&nbsp;"Расчетная цена" ,
&#91; 6 &#93; =&nbsp;&nbsp;"Страйк" ,
&#91; 7 &#93; =&nbsp;&nbsp;"Волатильность" ,
&#91; 8 &#93; =&nbsp;&nbsp;"До исполнения" ,
&#91; 9 &#93; =&nbsp;&nbsp;"Дельта" ,
&#91; 10 &#93; =&nbsp;&nbsp;"Гамма(%)" ,
&#91; 11 &#93; =&nbsp;&nbsp;"Тэта" ,
&#91; 12 &#93; =&nbsp;&nbsp;"Вега" ,
&#91; 13 &#93; =&nbsp;&nbsp;"Ро" ,
&#91; "t_id" &#93; =&nbsp;&nbsp;0 
}

abTable&nbsp;&nbsp;=&nbsp;&nbsp;{}
BaseCol&nbsp;&nbsp;=&nbsp;&nbsp;{}
Sec2row&nbsp;&nbsp;=&nbsp;&nbsp;{}
file&nbsp;&nbsp;=&nbsp;&nbsp; nil 
Sep&nbsp;&nbsp;=&nbsp;&nbsp; ";" 
YearLen =&nbsp;&nbsp;365.0&nbsp;&nbsp; --Число дней в году 
WORK&nbsp;&nbsp;=&nbsp;&nbsp; true 
CALC&nbsp;&nbsp;=&nbsp;&nbsp; false 
G_ROW&nbsp;&nbsp;=&nbsp;&nbsp; -&nbsp;&nbsp;1 
 if&nbsp;&nbsp;(BaseSecList&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; "" )&nbsp;&nbsp;or&nbsp;&nbsp;(BaseSecList&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; nil )&nbsp;&nbsp;then 
&nbsp;&nbsp; BaseSecList&nbsp;&nbsp;=&nbsp;&nbsp; getClassSecurities (BaseClassCode)
 end 

 if&nbsp;&nbsp;(SecList&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; "" )&nbsp;&nbsp;or&nbsp;&nbsp;(SecList&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; nil )&nbsp;&nbsp;then 
&nbsp;&nbsp; SecList&nbsp;&nbsp;=&nbsp;&nbsp; getClassSecurities (ClassCode)
 end 

 -------------------------------ФУНКЦИИ------------------------------------------------------------------ 
 function&nbsp;&nbsp; Logging (str)&nbsp;&nbsp;--Пишет лог 
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;file~ =&nbsp;&nbsp;nil&nbsp;&nbsp; and&nbsp;&nbsp;doLogging&nbsp;&nbsp;then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file:write(str&nbsp;&nbsp;..&nbsp;&nbsp; "&#92;n" )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file:flush()
&nbsp;&nbsp;&nbsp;&nbsp;end 
 end 

 function&nbsp;&nbsp;N(x)&nbsp;&nbsp;--Нормальное среднее 
&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp;&nbsp;(x&nbsp;&nbsp;&#62;&nbsp;&nbsp; 10 )&nbsp;&nbsp;then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; 1 
&nbsp;&nbsp;&nbsp;&nbsp;elseif&nbsp;&nbsp;(x&nbsp;&nbsp;&#60;&nbsp;&nbsp; -&nbsp;&nbsp;10 )&nbsp;&nbsp;then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; 0 
&nbsp;&nbsp;&nbsp;&nbsp;else 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;t&nbsp;&nbsp;=&nbsp;&nbsp; 1&nbsp;&nbsp;/ ( 1&nbsp;&nbsp; +&nbsp;&nbsp; 0.2316419&nbsp;&nbsp; *&nbsp;&nbsp; math.abs (x))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;p&nbsp;&nbsp;=&nbsp;&nbsp; 0.3989423&nbsp;&nbsp; *&nbsp;&nbsp; math.exp ( -&nbsp;&nbsp;0.5&nbsp;&nbsp; *&nbsp;&nbsp;x&nbsp;&nbsp;*&nbsp;&nbsp;x)&nbsp;&nbsp;*&nbsp;&nbsp;t&nbsp;&nbsp;*&nbsp;&nbsp;(((( 1.330274&nbsp;&nbsp; *&nbsp;&nbsp;t&nbsp;&nbsp;-&nbsp;&nbsp; 1.821256 )&nbsp;&nbsp;*&nbsp;&nbsp;t&nbsp;&nbsp;+&nbsp;&nbsp; 1.781478 )&nbsp;&nbsp;*&nbsp;&nbsp;t&nbsp;&nbsp;-&nbsp;&nbsp; 0.3565638 )&nbsp;&nbsp;*&nbsp;&nbsp;t&nbsp;&nbsp;+&nbsp;&nbsp; 0.3193815 )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp;&nbsp;x&nbsp;&nbsp;&#62;&nbsp;&nbsp; 0&nbsp;&nbsp; then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p =&nbsp;&nbsp;1&nbsp;&nbsp;- p
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp;p&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;end 
 end 

 function&nbsp;&nbsp; pN (x)&nbsp;&nbsp;--производная от функции нормального среднего 
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp; math.exp ( -&nbsp;&nbsp;0.5&nbsp;&nbsp; *&nbsp;&nbsp;x&nbsp;&nbsp;*&nbsp;&nbsp;x) /&nbsp;&nbsp;math.sqrt ( 2&nbsp;&nbsp; *&nbsp;&nbsp;math.pi) 
 end 

 function&nbsp;&nbsp; Greek (tmpParam)
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;b&nbsp;&nbsp;=&nbsp;&nbsp;tmpParam.volatility /&nbsp;&nbsp;100&nbsp;&nbsp; --"b" волатильность доходности (квадратный корень из дисперсии) базисной акции. 
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;S&nbsp;&nbsp;=&nbsp;&nbsp;tmpParam.settleprice&nbsp;&nbsp;--"S" текущая цена базисной акции; 
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;Tt&nbsp;&nbsp;=&nbsp;&nbsp;tmpParam.DAYS_TO_MAT_DATE / YearLen&nbsp;&nbsp;--"T-t" время до истечения срока опциона (период опциона); 
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;K&nbsp;&nbsp;=&nbsp;&nbsp; tmpParam.strike&nbsp;&nbsp;--"K" цена исполнения опциона; 
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;r&nbsp;&nbsp;=&nbsp;&nbsp;RiskFree&nbsp;&nbsp;--"r" безрисковая процентная ставка; 
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;d1&nbsp;&nbsp;=&nbsp;&nbsp;( math.log (S / K)&nbsp;&nbsp;+&nbsp;&nbsp;(r&nbsp;&nbsp;+&nbsp;&nbsp;b&nbsp;&nbsp;*&nbsp;&nbsp;b&nbsp;&nbsp;*&nbsp;&nbsp; 0.5 )&nbsp;&nbsp;*&nbsp;&nbsp;Tt) / (b&nbsp;&nbsp;*&nbsp;&nbsp; math.sqrt (Tt))
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;d2&nbsp;&nbsp;=&nbsp;&nbsp;d1 - (b&nbsp;&nbsp;*&nbsp;&nbsp; math.sqrt (Tt))
&nbsp;&nbsp; 
 local&nbsp;&nbsp;Delta&nbsp;&nbsp;=&nbsp;&nbsp; 0 
 local&nbsp;&nbsp;Gamma&nbsp;&nbsp;=&nbsp;&nbsp; 0 
 local&nbsp;&nbsp;Theta&nbsp;&nbsp;=&nbsp;&nbsp; 0 
 local&nbsp;&nbsp;Vega&nbsp;&nbsp;=&nbsp;&nbsp; 0 
 local&nbsp;&nbsp;Rho&nbsp;&nbsp;=&nbsp;&nbsp; 0&nbsp;&nbsp;

 local&nbsp;&nbsp;e&nbsp;&nbsp;=&nbsp;&nbsp; math.exp ( -&nbsp;&nbsp;1&nbsp;&nbsp; *&nbsp;&nbsp;r&nbsp;&nbsp;*&nbsp;&nbsp;Tt)
&nbsp;&nbsp; 
&nbsp;&nbsp; Gamma&nbsp;&nbsp;=&nbsp;&nbsp;pN(d1) / (S&nbsp;&nbsp;*&nbsp;&nbsp;b&nbsp;&nbsp;*&nbsp;&nbsp; math.sqrt (Tt))
&nbsp;&nbsp; Vega&nbsp;&nbsp;=&nbsp;&nbsp;S&nbsp;&nbsp;*&nbsp;&nbsp;e&nbsp;&nbsp;*&nbsp;&nbsp;pN(d1)&nbsp;&nbsp;*&nbsp;&nbsp; math.sqrt (Tt)
&nbsp;&nbsp; 
&nbsp;&nbsp; Theta&nbsp;&nbsp;=&nbsp;&nbsp;( -&nbsp;&nbsp;1&nbsp;&nbsp; *&nbsp;&nbsp;S&nbsp;&nbsp;*&nbsp;&nbsp;b&nbsp;&nbsp;*&nbsp;&nbsp;e&nbsp;&nbsp;*&nbsp;&nbsp;pN(d1)) / ( 2&nbsp;&nbsp; *&nbsp;&nbsp; math.sqrt (Tt))

&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;tmpParam.Optiontype&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; "Call"&nbsp;&nbsp; then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delta&nbsp;&nbsp;=&nbsp;&nbsp;e&nbsp;&nbsp;*&nbsp;&nbsp;N(d1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Theta&nbsp;&nbsp;=&nbsp;&nbsp;Theta&nbsp;&nbsp;-&nbsp;&nbsp;(r&nbsp;&nbsp;*&nbsp;&nbsp;K&nbsp;&nbsp;*&nbsp;&nbsp;e&nbsp;&nbsp;*&nbsp;&nbsp;N(d2))&nbsp;&nbsp;+&nbsp;&nbsp;r&nbsp;&nbsp;*&nbsp;&nbsp;S&nbsp;&nbsp;*&nbsp;&nbsp;e&nbsp;&nbsp;*&nbsp;&nbsp;N(d1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----Theta = Theta - (r * K * e * N(d2)) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rho&nbsp;&nbsp;=&nbsp;&nbsp;K&nbsp;&nbsp;*&nbsp;&nbsp;Tt&nbsp;&nbsp;*&nbsp;&nbsp;e&nbsp;&nbsp;*&nbsp;&nbsp;N(d2)
&nbsp;&nbsp;&nbsp;&nbsp;else 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delta&nbsp;&nbsp;=&nbsp;&nbsp; -&nbsp;&nbsp;1&nbsp;&nbsp; *&nbsp;&nbsp;e&nbsp;&nbsp;*&nbsp;&nbsp;N( -&nbsp;&nbsp;1&nbsp;&nbsp;* d1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Theta&nbsp;&nbsp;=&nbsp;&nbsp;Theta&nbsp;&nbsp;+&nbsp;&nbsp;(r&nbsp;&nbsp;*&nbsp;&nbsp;K&nbsp;&nbsp;*&nbsp;&nbsp;e&nbsp;&nbsp;*&nbsp;&nbsp;N( -&nbsp;&nbsp;1&nbsp;&nbsp; *&nbsp;&nbsp;d2))&nbsp;&nbsp;-&nbsp;&nbsp;r&nbsp;&nbsp;*&nbsp;&nbsp;S&nbsp;&nbsp;*&nbsp;&nbsp;e&nbsp;&nbsp;*&nbsp;&nbsp;N( -&nbsp;&nbsp;1&nbsp;&nbsp; *&nbsp;&nbsp;d1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----Theta = Theta + (r * K * e * N(-1 * d2)) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rho&nbsp;&nbsp;=&nbsp;&nbsp; -&nbsp;&nbsp;1&nbsp;&nbsp; *&nbsp;&nbsp;K&nbsp;&nbsp;*&nbsp;&nbsp;Tt&nbsp;&nbsp;*&nbsp;&nbsp;e&nbsp;&nbsp;*&nbsp;&nbsp;N( -&nbsp;&nbsp;1&nbsp;&nbsp; *&nbsp;&nbsp;d2)
&nbsp;&nbsp;&nbsp;&nbsp;end 
&nbsp;&nbsp; 

&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;{
&nbsp;&nbsp; &#91; "Delta" &#93;&nbsp;&nbsp;=&nbsp;&nbsp;Delta,
&nbsp;&nbsp; &#91; "Gamma" &#93;&nbsp;&nbsp;=&nbsp;&nbsp; 100&nbsp;&nbsp; *&nbsp;&nbsp;Gamma,
&nbsp;&nbsp; &#91; "Theta" &#93;&nbsp;&nbsp;=&nbsp;&nbsp;Theta / YearLen,
&nbsp;&nbsp; &#91; "Vega" &#93;&nbsp;&nbsp;=&nbsp;&nbsp;Vega /&nbsp;&nbsp;100 ,
&nbsp;&nbsp; &#91; "Rho" &#93;&nbsp;&nbsp;=&nbsp;&nbsp;Rho /&nbsp;&nbsp;100 
&nbsp;&nbsp; }
 end 

 function&nbsp;&nbsp; GetRow (ID,row)&nbsp;&nbsp;--возвращает строку таблицы 
 local&nbsp;&nbsp;rows, col&nbsp;&nbsp;=&nbsp;&nbsp;GetTable Size (ID)
 local&nbsp;&nbsp;result&nbsp;&nbsp;=&nbsp;&nbsp; "" 
 if&nbsp;&nbsp;rows~ =&nbsp;&nbsp;nil&nbsp;&nbsp; and&nbsp;&nbsp;row &#60;&nbsp;&nbsp;= rows&nbsp;&nbsp;then 
&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&nbsp;i =&nbsp;&nbsp;1 ,col&nbsp;&nbsp;do 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result = result ..&nbsp;&nbsp;GetCell (ID,row,i).image&nbsp;&nbsp;..&nbsp;&nbsp;Sep
&nbsp;&nbsp;&nbsp;&nbsp;end 
 end 
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;result
 end 

 function&nbsp;&nbsp; CSV (T)&nbsp;&nbsp;--пишет таблицу в csv файл 
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;&nbsp; FTEXT (V)&nbsp;&nbsp;--ПРОВЕРЯЕМ КОРРЕКТНОСТЬ КОЛИЧЕСТВА СИМОЛОВ ПЕРЕМЕННОЙ 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V = tostring(V)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp;&nbsp;( string.len (V) =&nbsp;&nbsp;=&nbsp;&nbsp;1 )&nbsp;&nbsp;or&nbsp;&nbsp;( string.len (V) =&nbsp;&nbsp;=&nbsp;&nbsp;5 )&nbsp;&nbsp;then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; V =&nbsp;&nbsp;"0"&nbsp;&nbsp;..&nbsp;&nbsp;V
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp;V&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;end 
 local&nbsp;&nbsp;temp&nbsp;&nbsp;=&nbsp;&nbsp; os.date ( "*t" )
 local&nbsp;&nbsp;Fname&nbsp;&nbsp;=&nbsp;&nbsp;getScriptPath ()&nbsp;&nbsp;..&nbsp;&nbsp; "&#92; &#92;"&nbsp;&nbsp;&nbsp;&nbsp;..&nbsp;&nbsp;FTEXT(temp.year)&nbsp;&nbsp;..&nbsp;&nbsp;FTEXT(temp.month)&nbsp;&nbsp;..&nbsp;&nbsp;FTEXT(temp.day)&nbsp;&nbsp;..&nbsp;&nbsp; ".csv" 
&nbsp;&nbsp; CSVFile&nbsp;&nbsp;=&nbsp;&nbsp; io.open (Fname,&nbsp;&nbsp;"w+" )
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;CSVFile~ =&nbsp;&nbsp;nil&nbsp;&nbsp; then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;rows, col&nbsp;&nbsp;=&nbsp;&nbsp;GetTable Size (T.t_id)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for&nbsp;&nbsp;i =&nbsp;&nbsp;1 ,col&nbsp;&nbsp;do&nbsp;&nbsp; --расставляем заголовки 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CSVFile:write(T&#91;i&#93;&nbsp;&nbsp;..&nbsp;&nbsp;Sep)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSVFile:write( "&#92;n" )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for&nbsp;&nbsp;i =&nbsp;&nbsp;1 ,rows&nbsp;&nbsp;do&nbsp;&nbsp; --пишем таблицу 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CSVFile:write(GetRow(T.t_id,i) .. "&#92;n")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSVFile:flush()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSVFile:close()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; message ( "Файл успешно сохранен:&#92;n"&nbsp;&nbsp;.. Fname,&nbsp;&nbsp;1 )
&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; message ( "Ошибка при сохранении файла:&#92;n"&nbsp;&nbsp;.. Fname,&nbsp;&nbsp;3 )
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;
 end 

 function&nbsp;&nbsp; round (num, idp)&nbsp;&nbsp;--округляет до указанного количества знаков 
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;mult&nbsp;&nbsp;=&nbsp;&nbsp; 10 ^(idp&nbsp;&nbsp;or&nbsp;&nbsp; 0 )
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp; math.floor (num&nbsp;&nbsp;*&nbsp;&nbsp;mult&nbsp;&nbsp;+&nbsp;&nbsp; 0.5 ) / mult
 end&nbsp;&nbsp;

 function&nbsp;&nbsp; comma_value (n)&nbsp;&nbsp;--ставит разделители в числах 
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;left,num,right&nbsp;&nbsp;=&nbsp;&nbsp; string.match (n,'^(&#91;^%d&#93; * %d)(%d * )(. - )$')
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;left .. (num:reverse():gsub( '(%d%d%d)' ,'% 1&nbsp;&nbsp;'):reverse()) .. right
 end 

 function&nbsp;&nbsp; CreateDataSourceEX (Class,Sec,Par)
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;ds,err&nbsp;&nbsp;=&nbsp;&nbsp; CreateDataSource (Class, Sec, INTERVAL_TICK, Par)
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;ds =&nbsp;&nbsp;=&nbsp;&nbsp;nil&nbsp;&nbsp; then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; message ( "Ошибка при получении параметра "&nbsp;&nbsp;.. Par .. ":&#92;n" .. err,&nbsp;&nbsp;3 )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; false 
&nbsp;&nbsp;&nbsp;&nbsp;else 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds: SetEmptyCallback ()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while&nbsp;&nbsp;(ds: Size () =&nbsp;&nbsp;=&nbsp;&nbsp;0 )&nbsp;&nbsp;and&nbsp;&nbsp;(WORK)&nbsp;&nbsp;do 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep ( 100 )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; true 
&nbsp;&nbsp;&nbsp;&nbsp;end 
 end 

 function&nbsp;&nbsp; Stop ()
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;doLogging&nbsp;&nbsp;then&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file:close() 
&nbsp;&nbsp;&nbsp;&nbsp;end 
&nbsp;&nbsp; WORK&nbsp;&nbsp;=&nbsp;&nbsp; false 
 end 


 function&nbsp;&nbsp; Calculate (row,do_calc)
 if&nbsp;&nbsp;(row~ =&nbsp;&nbsp;nil )&nbsp;&nbsp;and&nbsp;&nbsp;(row &#62;&nbsp;&nbsp;=&nbsp;&nbsp;0 )&nbsp;&nbsp;and&nbsp;&nbsp;(do_calc)&nbsp;&nbsp;then 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;T = BaseCol&#91;row&#93;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;tmpParam&nbsp;&nbsp;= {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91; "Optiontype" &#93;&nbsp;&nbsp;=&nbsp;&nbsp;T.Optiontype,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91; "settleprice" &#93;&nbsp;&nbsp;=&nbsp;&nbsp; getParamEx (BaseClassCode,T.Optionbase,"settleprice").param_value +&nbsp;&nbsp;0 ,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91; "strike" &#93;&nbsp;&nbsp;=&nbsp;&nbsp; getParamEx (ClassCode,T.SecCode,"strike").param_value +&nbsp;&nbsp;0 ,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91; "volatility" &#93;&nbsp;&nbsp;=&nbsp;&nbsp; getParamEx (ClassCode,T.SecCode,"volatility").param_value +&nbsp;&nbsp;0 ,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91; "DAYS_TO_MAT_DATE" &#93;&nbsp;&nbsp;=&nbsp;&nbsp;T.DAYS_TO_MAT_DATE
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;tmpGreek&nbsp;&nbsp;=&nbsp;&nbsp;Greek(tmpParam)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (tbl.t_id, row,&nbsp;&nbsp;5 , comma_value(tmpParam.settleprice), tmpParam.settleprice)&nbsp;&nbsp;-- "Расчетная цена", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (tbl.t_id, row,&nbsp;&nbsp;6 , comma_value(tmpParam.strike), tmpParam.strike)&nbsp;&nbsp;--"Страйк", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (tbl.t_id, row,&nbsp;&nbsp;7 , tostring(tmpParam.volatility), tmpParam.volatility)&nbsp;&nbsp;-- "Волатильность", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (tbl.t_id, row,&nbsp;&nbsp;8 , tostring(tmpParam.DAYS_TO_MAT_DATE), tmpParam.DAYS_TO_MAT_DATE)&nbsp;&nbsp;--"До исполнения", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (tbl.t_id, row,&nbsp;&nbsp;9 , tostring(round(tmpGreek.Delta, 2 )), tmpGreek.Delta)&nbsp;&nbsp;--"Дельта", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (tbl.t_id, row,&nbsp;&nbsp;10 , tostring(round(tmpGreek.Gamma, 4 )), tmpGreek.Gamma)&nbsp;&nbsp;-- "Гамма(%)", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (tbl.t_id, row,&nbsp;&nbsp;11 , tostring(round(tmpGreek.Theta, 2 )), tmpGreek.Theta)&nbsp;&nbsp;-- "Тэта", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (tbl.t_id, row,&nbsp;&nbsp;12 , tostring(round(tmpGreek.Vega, 2 )), tmpGreek.Vega)&nbsp;&nbsp;-- "Вега", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (tbl.t_id, row,&nbsp;&nbsp;13 , tostring(round(tmpGreek.Rho, 2 )), tmpGreek.Rho)&nbsp;&nbsp;-- "Ро", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;doLogging&nbsp;&nbsp;then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Logging( os.date () ..&nbsp;&nbsp;Sep&nbsp;&nbsp;..&nbsp;&nbsp;GetRow(tbl.t_id,row))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end 
 end 
 return&nbsp;&nbsp; false 
 end 

 -------------------------------Колбэки------------------------------------------------------------------ 
 function&nbsp;&nbsp; f_cb (t_id,msg,par1,par2)&nbsp;&nbsp;--событие на нажатие клавиш 
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;(msg =&nbsp;&nbsp;= QTABLE_CHAR)&nbsp;&nbsp;and&nbsp;&nbsp;(par2 =&nbsp;&nbsp;=&nbsp;&nbsp;19 )&nbsp;&nbsp;then&nbsp;&nbsp; --сохранить в CSV файл текущее состояние таблицы нужно нажать комбинацию клавиш Ctrl+S 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSV(tbl)
&nbsp;&nbsp;&nbsp;&nbsp;end 
&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;(msg =&nbsp;&nbsp;= QTABLE_CLOSE)&nbsp;&nbsp;then&nbsp;&nbsp; --закрытие окна 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stop()
&nbsp;&nbsp;&nbsp;&nbsp;end 

&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;(msg =&nbsp;&nbsp;= QTABLE_VKEY)&nbsp;&nbsp;and&nbsp;&nbsp;(par2 =&nbsp;&nbsp;=&nbsp;&nbsp;116 )&nbsp;&nbsp;then&nbsp;&nbsp; --функция принудительного обновления таблицы при нажатии клавиши Ctrl+F5 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for&nbsp;&nbsp;SecCode&nbsp;&nbsp;in&nbsp;&nbsp; string.gmatch (SecList,&nbsp;&nbsp;"(&#91;^,&#93;+)" )&nbsp;&nbsp;do&nbsp;&nbsp; --перебираем опционы по очереди. 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calculate(Sec2row&#91;SecCode&#93;, true )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Highlight (tbl.t_id, Sec2row&#91;SecCode&#93;, QTABLE_NO_INDEX,&nbsp;&nbsp;RGB ( 255 , 0 , 0 ), QTABLE_DEFAULT_COLOR, INTERVAL)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;end 
 end 

 function&nbsp;&nbsp; OnStop ()
&nbsp;&nbsp; Stop()
&nbsp;&nbsp;&nbsp;&nbsp;DestroyTable (tbl.t_id)
 end 

 function&nbsp;&nbsp; OnInit ()
 local&nbsp;&nbsp;STR&nbsp;&nbsp;=&nbsp;&nbsp; "" 
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;doLogging&nbsp;&nbsp;then&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;&nbsp;=&nbsp;&nbsp; io.open (log_file,&nbsp;&nbsp;"w+" ) 
&nbsp;&nbsp;&nbsp;&nbsp;end 
&nbsp;&nbsp; tbl.t_id&nbsp;&nbsp;=&nbsp;&nbsp; AllocTable ()
&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&nbsp;i =&nbsp;&nbsp;1 , table.maxn (tbl)&nbsp;&nbsp;do&nbsp;&nbsp; --добавляем колонки 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp;&nbsp;i &#60;&nbsp;&nbsp;=&nbsp;&nbsp;4&nbsp;&nbsp; then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddColumn (tbl.t_id, i, tbl&#91;i&#93;,&nbsp;&nbsp;true , QTABLE_CACHED_STRING_TYPE,&nbsp;&nbsp;string.len (tbl&#91;i&#93;) *&nbsp;&nbsp;2 )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddColumn (tbl.t_id, i, tbl&#91;i&#93;,&nbsp;&nbsp;true , QTABLE_DOUBLE_TYPE,&nbsp;&nbsp;10 )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp;&nbsp;doLogging&nbsp;&nbsp;then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STR = STR .. tbl&#91;i&#93; .. Sep
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end 
&nbsp;&nbsp;&nbsp;&nbsp;end 
&nbsp;&nbsp; Logging( "Дата Время"&nbsp;&nbsp;..&nbsp;&nbsp;Sep&nbsp;&nbsp;..&nbsp;&nbsp;STR)
&nbsp;&nbsp;&nbsp;&nbsp;CreateWindow (tbl.t_id)
&nbsp;&nbsp;&nbsp;&nbsp;SetWindowCaption (tbl.t_id,tbl.caption)
&nbsp;&nbsp;&nbsp;&nbsp;SetTableNotificationCallback (tbl.t_id, f_cb)
 end 

 function&nbsp;&nbsp; OnParam (class, sec)
 if&nbsp;&nbsp;(class =&nbsp;&nbsp;= ClassCode)&nbsp;&nbsp;and&nbsp;&nbsp;(WORK)&nbsp;&nbsp;and&nbsp;&nbsp;( string.find (SecList,sec)~ =&nbsp;&nbsp;nil )&nbsp;&nbsp;then 
&nbsp;&nbsp; G_ROW&nbsp;&nbsp;=&nbsp;&nbsp;Sec2row&#91;sec&#93;
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;(G_ROW~ =&nbsp;&nbsp;nil )&nbsp;&nbsp;and&nbsp;&nbsp;(G_ROW &#62;&nbsp;&nbsp;=&nbsp;&nbsp;0 )&nbsp;&nbsp;then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Highlight (tbl.t_id, G_ROW, QTABLE_NO_INDEX,&nbsp;&nbsp;RGB ( 255 , 0 , 0 ), QTABLE_DEFAULT_COLOR, INTERVAL)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALC =&nbsp;&nbsp;true 
&nbsp;&nbsp;&nbsp;&nbsp;end 
 end 
 end 

 function&nbsp;&nbsp; main ()

WORK&nbsp;&nbsp;=&nbsp;&nbsp; false 
CALC =&nbsp;&nbsp;true 
&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&nbsp;SecCode&nbsp;&nbsp;in&nbsp;&nbsp; string.gmatch (SecList,&nbsp;&nbsp;"(&#91;^,&#93;+)" )&nbsp;&nbsp;do&nbsp;&nbsp; --перебираем опционы по очереди. 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;Optionbase =&nbsp;&nbsp;getParamEx (ClassCode,SecCode,"optionbase").param_image
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;Optiontype =&nbsp;&nbsp;getParamEx (ClassCode,SecCode,"optiontype").param_image
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp;&nbsp;( string.find (BaseSecList,Optionbase)~ =&nbsp;&nbsp;nil )&nbsp;&nbsp;then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;row&nbsp;&nbsp;=&nbsp;&nbsp; InsertRow (tbl.t_id, -&nbsp;&nbsp;1 )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;T = {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91; "Name" &#93;&nbsp;&nbsp;=&nbsp;&nbsp; getSecurityInfo (ClassCode,SecCode).name,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91; "SecCode" &#93;&nbsp;&nbsp;=&nbsp;&nbsp;SecCode,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91; "Optiontype" &#93;&nbsp;&nbsp;=&nbsp;&nbsp;Optiontype,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91; "Optionbase" &#93;&nbsp;&nbsp;=&nbsp;&nbsp;Optionbase,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91; "DAYS_TO_MAT_DATE" &#93;&nbsp;&nbsp;=&nbsp;&nbsp; getParamEx (ClassCode,SecCode,"DAYS_TO_MAT_DATE").param_value +&nbsp;&nbsp;0 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BaseCol&#91;row&#93; = T
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--заполняем статичные параметры 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sec2row&#91;SecCode&#93; = row
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (tbl.t_id, row,&nbsp;&nbsp;1 , BaseCol&#91;row&#93;.Name)&nbsp;&nbsp;-- "Название опциона", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (tbl.t_id, row,&nbsp;&nbsp;2 , BaseCol&#91;row&#93;.SecCode)&nbsp;&nbsp;--"Код опциона", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (tbl.t_id, row,&nbsp;&nbsp;3 , BaseCol&#91;row&#93;.Optiontype)&nbsp;&nbsp;-- "Тип опциона", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (tbl.t_id, row,&nbsp;&nbsp;4 , BaseCol&#91;row&#93;.Optionbase)&nbsp;&nbsp;--"Баз. актив", 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--заказ данных 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateDataSource EX(BaseClassCode,T.Optionbase,"settleprice")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateDataSource EX(ClassCode,T.SecCode,"strike")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateDataSource EX(ClassCode,T.SecCode,"volatility")

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--заполняем динамичные параметры 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALC = Calculate(row, true ) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end 
&nbsp;&nbsp;&nbsp;&nbsp;end 
WORK&nbsp;&nbsp;=&nbsp;&nbsp; true 
 while&nbsp;&nbsp;WORK&nbsp;&nbsp;do 
&nbsp;&nbsp; CALC = Calculate(G_ROW,CALC)
&nbsp;&nbsp;&nbsp;&nbsp;sleep (INTERVAL)
 end 
 end 


&nbsp;&nbsp;</pre>
=============
 <br /><br /> <br />====quote====<br /><noindex><a href="/user/12743/" target="_blank" rel="nofollow">Андрей</a></noindex> написал:<br />Но мне интересна цена и волатильность. &nbsp;<br />=============<br /> Цена и волатильность есть в таблице текущих торгов.<br />=============<br />Огромное спасибо! Решение проблемы вывода котировок по опционам наверное месяц искал! <br />
			<i>19.08.2020 12:32:46, Виктор.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message47846/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message47846/topic4401/</guid>
			<pubDate>Wed, 19 Aug 2020 12:32:46 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message45970/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			А можно каким-то образом получить в луа количество открытых позиций? <br />
			<i>05.06.2020 00:00:47, Виталий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message45970/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message45970/topic4401/</guid>
			<pubDate>Fri, 05 Jun 2020 00:00:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message43666/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день!<br /><br />Использую Ваш скрипт получения Греков. Сделал из него функцию и встроил к себе. Получилось не плохо. Но сейчас появилась задача получать греки не по всем опционами серии, а по конкретным.<br />Скрэт это прекрасно умеет, но как правильно его использовать, если этот список меняется. Например, я хочу выводит только те опционы с греками по которым у меня открыта позиция. Но позицию я могу менять. Покупать опционы, продавать и соответственно список будет меняться динамически. И в целом понятно как это сделать, но смущает функция CreateDataSource. У меня открыты потоки на определённые инструменты. И мне нужно как-то на старые закрыть , а на новые открыть. Или закрывать ничего не нужно, просто отрывать на новые? В общем, как-то я подзапутался.... &nbsp; <br />
			<i>15.04.2020 18:17:04, Андрей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message43666/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message43666/topic4401/</guid>
			<pubDate>Wed, 15 Apr 2020 18:17:04 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message43444/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Аппроксимация функции <noindex><a href="https://wikimedia.org/api/rest_v1/media/math/render/svg/32a01d971c5120525e1742519bd9c4d1ff8a5a91" target="_blank" rel="nofollow">стандартного нормального распределения</a></noindex>, переведено на луа с сей. Оригинал на сях<br />
====code====
<pre>double N(double x) {
&nbsp;&nbsp;double ax, t, d, p;
&nbsp;&nbsp;if (x&#62;10) return(1);
&nbsp;&nbsp;if(x&#60;-10) return(0);
&nbsp;&nbsp;ax=fabs(x);
&nbsp;&nbsp;t=1/(1+0.2316419∗ax);
&nbsp;&nbsp;d=0.3989423∗exp(-0.5∗x∗x);
&nbsp;&nbsp;p=d∗t∗((((1.330274∗t-1.821256)∗t+1.781478)∗t--0.3565638)∗t+0.3193815);
&nbsp;&nbsp;p=(x&#62;0) ? 1-p : p;
&nbsp;&nbsp;return(p);
}</pre>
============= <br />
			<i>08.04.2020 01:35:21, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message43444/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message43444/topic4401/</guid>
			<pubDate>Wed, 08 Apr 2020 01:35:21 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message43443/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день!<br /><br />Появилось желание пересчитать греки с учетом свои нужд. Полез в тело скрипта и появились вопросы.<br />Подскажите, пожалуйста, что это за функция? Что за константы в ней использованы? Можно увидеть формулу &quot;на бумаге&quot; <br />Заранее спасибо!<br />
====code====
<pre>function N(x) --Нормальное среднее
&nbsp;&nbsp;&nbsp;&nbsp;if (x &#62; 10) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1
&nbsp;&nbsp; elseif (x &#60; -10) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0
&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local t = 1 / (1 + 0.2316419 * math.abs(x))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local p = 0.3989423 * math.exp(-0.5 * x * x) * t * ((((1.330274 * t - 1.821256) * t + 1.781478) * t - 0.3565638) * t + 0.3193815)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if x &#62; 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p=1-p
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return p&nbsp;&nbsp; 
&nbsp;&nbsp; end
end


</pre>
============= <br />
			<i>07.04.2020 23:31:40, Андрей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message43443/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message43443/topic4401/</guid>
			<pubDate>Tue, 07 Apr 2020 23:31:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39923/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день.<br /><br /><br />Есть гипотеза, что &nbsp;такого инструмента нет в терминале. Проверьте, &nbsp;видите ли Вы значения по этому инструменту в терминале, когда ошибка проявляется. И еще проверьте, что возвращает result = getParamEx(&quot;SPBOPT&quot;,&quot;GD1550BL9&quot;,BID). <br />
			<i>27.09.2019 08:32:51, Egor Zaytsev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39923/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39923/topic4401/</guid>
			<pubDate>Fri, 27 Sep 2019 08:32:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39882/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			result = getParamEx(&quot;SPBOPT&quot;,&quot;GD1550BL9&quot;,BID).param_type &nbsp;- attempt to index a nil value <br />
			<i>25.09.2019 22:46:30, Женя Логинов.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39882/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39882/topic4401/</guid>
			<pubDate>Wed, 25 Sep 2019 22:46:30 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39880/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			почему так происходит? <br />
			<i>25.09.2019 21:50:02, Женя Логинов.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39880/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39880/topic4401/</guid>
			<pubDate>Wed, 25 Sep 2019 21:50:02 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39879/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			опять по &quot;дней до погашения&quot; получаю нули!!! в понедельник все отлично работало, сегодня опять не пойми что.. от чего это зависит? как только дата экспирации по опционам, так запросы перестают нормально работать. не только дни до погашения, но и тип опциона не получается
====code====
<pre>dtm = getParamEx("SPBOPT", option_code, "DAYS_TO_MAT_DATE").param_value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if tonumber(dtm) &#60; 36 and tonumber(dtm) &#62; 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date_mate = getSecurityInfo("SPBOPT", option_code).mat_date
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;option_type = getParamEx("SPBOPT", option_code, "optiontype").param_image
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date_mate = getSecurityInfo("SPBOPT", option_code).mat_date
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strike = getSecurityInfo("SPBOPT", option_code).option_strike
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.insert(ba_table&#91;ba_code&#93;, {strike, option_code, date_mate, option_type})
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;op:write(ba_code.. "," ..strike .. "," .. option_code .. "," .. date_mate .. "," ..option_type, "&#92;n")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end</pre>
============= <br />
			<i>25.09.2019 21:47:42, Женя Логинов.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39879/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39879/topic4401/</guid>
			<pubDate>Wed, 25 Sep 2019 21:47:42 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39829/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Спасибо. только получилось так:getParamEx(&quot;SPBOPT&quot;, option_code, &quot;optiontype&quot;).param_image <br />
			<i>23.09.2019 20:42:26, Женя Логинов.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39829/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39829/topic4401/</guid>
			<pubDate>Mon, 23 Sep 2019 20:42:26 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39814/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			====code====
<pre>getParamEx(class, sec, "optiontype")</pre>
============= <br />
			<i>23.09.2019 08:31:49, Старатель.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39814/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39814/topic4401/</guid>
			<pubDate>Mon, 23 Sep 2019 08:31:49 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39809/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_9y53Oeco" href="/user/1390/" bx-tooltip-user-id="1390">Женя Логинов</a> написал:<br />Снова здорово! как получить вид опциона (Call/put)? есть ли методы? спасибо.<br />=============<br />вид опциона зашит в его коде<br /><br /><noindex><a href="http://www.bot4sale.ru/blog-menu/qlua/466-parse-option-call.html" target="_blank" rel="nofollow">http://www.bot4sale.ru/blog-menu/qlua/466-parse-option-call.html</a></noindex> <br />
			<i>22.09.2019 22:40:15, s_mike@rambler.ru.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39809/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39809/topic4401/</guid>
			<pubDate>Sun, 22 Sep 2019 22:40:15 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39807/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Снова здорово! как получить вид опциона (Call/put)? есть ли методы? спасибо. <br />
			<i>22.09.2019 22:00:24, Женя Логинов.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39807/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39807/topic4401/</guid>
			<pubDate>Sun, 22 Sep 2019 22:00:24 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39803/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_ZiBFMCo2" href="/user/12743/" bx-tooltip-user-id="12743">Андрей</a> написал:<br />Всем привет!<br /><br />А как получить доступ к данным доски опционов из QLUA?<br />Не нашел эту таблицы в списке доступных.... &nbsp;<br />=============<br />можно через DDE, но халявы нет . <br />
			<i>22.09.2019 12:55:48, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39803/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39803/topic4401/</guid>
			<pubDate>Sun, 22 Sep 2019 12:55:48 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39774/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Не знаю в чем причина, но почему-то получилось. Спасибо. <br />
			<i>19.09.2019 21:08:47, Женя Логинов.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39774/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39774/topic4401/</guid>
			<pubDate>Thu, 19 Sep 2019 21:08:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39773/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			У меня в терминале не выбран ни один инструмент для заказа котировок и обезличенных сделок.<br />вот мой скрипт - получаю одни нули.
====code====
<pre>function main() 
&nbsp;&nbsp;&nbsp;op = io.open("D:&#92;&#92;market_orders&#92;&#92;codes.csv","w+")
&nbsp;&nbsp;&nbsp;io.output(op)
&nbsp;&nbsp;&nbsp;opt = getClassSecurities("SPBOPT")
&nbsp;&nbsp;&nbsp;for i in string.gmatch(opt, "%w+") do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;op:write(i, "&#92;n")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;op:write(getParamEx("SPBPOT", i, "DAYS_TO_MAT_DATE").param_value, "&#92;n")
&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;io.close()
end;</pre>
============= <br />
			<i>19.09.2019 21:00:05, Женя Логинов.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39773/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39773/topic4401/</guid>
			<pubDate>Thu, 19 Sep 2019 21:00:05 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39744/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_1XuY2q7r" href="/user/1390/" bx-tooltip-user-id="1390">Женя Логинов</a> написал:<br />почему в версии 7.27.2.1 на запрос DAYS_TO_MAT_DATE выдает nil? этот параметр уже нельзя запросить? в руководстве пользователя 7.27 этого параметра нет. хотя если строить таблиц текущих торгов, то столбец с количеством дней до погашения есть...<br />=============<br /><br />что я делаю не так?<br />[FILE ID=6114] <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=6114&" width="1160" height="503" /><br /><i>19.09.2019 10:38:44, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39744/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39744/topic4401/</guid>
			<pubDate>Thu, 19 Sep 2019 10:38:44 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39732/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			почему в версии 7.27.2.1 на запрос DAYS_TO_MAT_DATE выдает nil? этот параметр уже нельзя запросить? в руководстве пользователя 7.27 этого параметра нет. хотя если строить таблиц текущих торгов, то столбец с количеством дней до погашения есть... <br />
			<i>18.09.2019 22:07:14, Женя Логинов.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39732/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39732/topic4401/</guid>
			<pubDate>Wed, 18 Sep 2019 22:07:14 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message37140/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Спасибо большое за скрипт. <br />Про цену и Волатильность затупил. просто никогда их оттуда не брал. Тоже спасибо за информацию <br />
			<i>26.03.2019 14:54:17, Андрей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message37140/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message37140/topic4401/</guid>
			<pubDate>Tue, 26 Mar 2019 14:54:17 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message37137/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_a3zzSio0" href="/user/12743/" bx-tooltip-user-id="12743">Андрей</a> написал:<br />Греками поделитесь, спасибо. <br />=============<br /><br /><table class="forum-spoiler"><thead onclick="if (this.nextSibling.style.display=='none') { this.nextSibling.style.display=''; BX.addClass(this, 'forum-spoiler-head-open'); } else { this.nextSibling.style.display='none'; BX.removeClass(this, 'forum-spoiler-head-open'); } BX.onCustomEvent('BX.Forum.Spoiler:toggle', [{node: this}]); event.stopPropagation();"><tr><th><div>Скрытый текст</div></th></tr></thead><tbody class="forum-spoiler" style="display:none;"><tr><td>
====code====
<pre>
--&#91;&#91;
Что делает:
&nbsp;&nbsp; По Таблице текущих параметров строит таблицу опционов с расcчитанными греками
&nbsp;&nbsp; Формулы взяты отсюда:
&nbsp;&nbsp; http://en.wikipedia.org/wiki/Black%96Scholes
&nbsp;&nbsp; http://en.wikipedia.org/wiki/Greeks_%28finance%29
&nbsp;&nbsp; 
Как использовать:
&nbsp;&nbsp; откройте Таблицу Текущих Параметров (меню Таблицы -&#62; Текущая Таблица)
&nbsp;&nbsp; Укажите настройки, после чего, запустите скрипт (меню Таблицы - Lua - Доступные скрипты)
&nbsp;&nbsp; чтобы сохранить в CSV файл, текущее состояние таблицы, нужно нажать комбинацию клавиш Ctrl+S файл сохраняется в папку со скриптом, с именем HHHMMDD.csv
&#93;&#93;
-------------------------------НАСТРОЙКИ-------------------------------
RiskFree=0/100 --безрисковая ставка %, Указывается вручную

BaseClassCode = "SPBFUT" --Класс базового актива
ClassCode = "SPBOPT" --Класс опционов

--Список базовых активов, через запятую, по которым отображать опционы:
BaseSecList = "RIU7" --getClassSecurities(BaseClassCode) --все сразу
 
--Список опционов через запятую:
SecList = getClassSecurities(ClassCode) --все сразу

INTERVAL = 1000 --Интервал обновления таблицы

doLogging=false --включает запись в файл, формата csv. 
log_file=getScriptPath() .. "&#92;&#92;Greek.csv" --путь к csv файлу 

-----------------------------------------------------------------------

-------------------------------ТО ЧТО НИЖЕ, ТРОГАТЬ НЕ НАДО------------------------------------------------------------------
--Параметры таблицы
tbl = {
&#91;"caption"&#93;="Greek",
&#91;1&#93;="Название",
&#91;2&#93;="Код опциона",
&#91;3&#93;="Тип опциона",
&#91;4&#93;="Баз. актив",
&#91;5&#93;="Расчетная цена",
&#91;6&#93;="Страйк",
&#91;7&#93;="Волатильность",
&#91;8&#93;="До исполнения",
&#91;9&#93;="Дельта",
&#91;10&#93;="Гамма(%)",
&#91;11&#93;="Тэта",
&#91;12&#93;="Вега",
&#91;13&#93;="Ро",
&#91;"t_id"&#93;=0
}

abTable = {}
BaseCol = {}
Sec2row = {}
file = nil
Sep = ";"
YearLen=365.0 --Число дней в году
WORK = true
CALC = false
G_ROW = -1
if (BaseSecList == "") or (BaseSecList == nil) then
&nbsp;&nbsp;&nbsp;BaseSecList = getClassSecurities(BaseClassCode)
end

if (SecList == "") or (SecList == nil) then
&nbsp;&nbsp;&nbsp;SecList = getClassSecurities(ClassCode)
end

-------------------------------ФУНКЦИИ------------------------------------------------------------------
function Logging(str) --Пишет лог
&nbsp;&nbsp;&nbsp;if file~=nil and doLogging then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file:write(str .. "&#92;n")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file:flush()
&nbsp;&nbsp;&nbsp;end
end

function N(x) --Нормальное среднее
&nbsp;&nbsp;&nbsp;&nbsp;if (x &#62; 10) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1
&nbsp;&nbsp;&nbsp;elseif (x &#60; -10) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local t = 1 / (1 + 0.2316419 * math.abs(x))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local p = 0.3989423 * math.exp(-0.5 * x * x) * t * ((((1.330274 * t - 1.821256) * t + 1.781478) * t - 0.3565638) * t + 0.3193815)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if x &#62; 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p=1-p
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return p&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;end
end

function pN(x) --производная от функции нормального среднего
&nbsp;&nbsp;&nbsp;return math.exp(-0.5 * x * x) / math.sqrt(2 * math.pi) 
end

function Greek(tmpParam)
&nbsp;&nbsp;&nbsp;local b = tmpParam.volatility / 100 --"b" волатильность доходности (квадратный корень из дисперсии) базисной акции.
&nbsp;&nbsp;&nbsp;local S = tmpParam.settleprice --"S" текущая цена базисной акции;
&nbsp;&nbsp;&nbsp;local Tt = tmpParam.DAYS_TO_MAT_DATE / YearLen --"T-t" время до истечения срока опциона (период опциона);
&nbsp;&nbsp;&nbsp;local K =&nbsp;&nbsp;tmpParam.strike --"K" цена исполнения опциона;
&nbsp;&nbsp;&nbsp;local r = RiskFree --"r" безрисковая процентная ставка;
&nbsp;&nbsp;&nbsp;local d1 = (math.log(S / K) + (r + b * b * 0.5) * Tt) / (b * math.sqrt(Tt))
&nbsp;&nbsp;&nbsp;local d2 = d1-(b * math.sqrt(Tt))
&nbsp;&nbsp;&nbsp;
local Delta = 0
local Gamma = 0
local Theta = 0
local Vega = 0
local Rho = 0 

local e = math.exp(-1 * r * Tt)
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;Gamma = pN(d1) / (S * b * math.sqrt(Tt))
&nbsp;&nbsp;&nbsp;Vega = S * e * pN(d1) * math.sqrt(Tt)
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;Theta = (-1 * S * b * e * pN(d1)) / (2 * math.sqrt(Tt))

&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;if tmpParam.Optiontype == "Call" then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delta = e * N(d1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Theta = Theta - (r * K * e * N(d2)) + r * S * e * N(d1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----Theta = Theta - (r * K * e * N(d2))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rho = K * Tt * e * N(d2)
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delta = -1 * e * N(-1*d1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Theta = Theta + (r * K * e * N(-1 * d2)) - r * S * e * N(-1 * d1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----Theta = Theta + (r * K * e * N(-1 * d2))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rho = -1 * K * Tt * e * N(-1 * d2)
&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;return {
&nbsp;&nbsp;&nbsp;&#91;"Delta"&#93; = Delta,
&nbsp;&nbsp;&nbsp;&#91;"Gamma"&#93; = 100 * Gamma,
&nbsp;&nbsp;&nbsp;&#91;"Theta"&#93; = Theta / YearLen,
&nbsp;&nbsp;&nbsp;&#91;"Vega"&#93; = Vega / 100,
&nbsp;&nbsp;&nbsp;&#91;"Rho"&#93; = Rho / 100
&nbsp;&nbsp;&nbsp;}
end

function GetRow(ID,row) --возвращает строку таблицы
local rows, col = GetTableSize(ID)
local result = ""
if rows~=nil and row&#60;=rows then
&nbsp;&nbsp;&nbsp;for i=1,col do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=result..GetCell(ID,row,i).image .. Sep
&nbsp;&nbsp;&nbsp;end
end
&nbsp;&nbsp;&nbsp;return result
end

function CSV(T) --пишет таблицу в csv файл
&nbsp;&nbsp;&nbsp;function FTEXT(V) --ПРОВЕРЯЕМ КОРРЕКТНОСТЬ КОЛИЧЕСТВА СИМОЛОВ ПЕРЕМЕННОЙ
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V=tostring(V)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (string.len(V)==1) or (string.len(V)==5) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V="0".. V
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return V&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;end
local temp = os.date("*t")
local Fname =getScriptPath() .. "&#92;&#92;" .. FTEXT(temp.year) .. FTEXT(temp.month) .. FTEXT(temp.day) .. ".csv"
&nbsp;&nbsp;&nbsp;CSVFile = io.open(Fname, "w+")
&nbsp;&nbsp;&nbsp;if CSVFile~=nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local rows, col = GetTableSize(T.t_id)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i=1,col do --расставляем заголовки
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSVFile:write(T&#91;i&#93; .. Sep)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSVFile:write("&#92;n")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i=1,rows do --пишем таблицу
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSVFile:write(GetRow(T.t_id,i).."&#92;n")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSVFile:flush()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSVFile:close()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("Файл успешно сохранен:&#92;n"..Fname, 1)
&nbsp;&nbsp;&nbsp;else 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("Ошибка при сохранении файла:&#92;n"..Fname, 3)
&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;
end

function round(num, idp) --округляет до указанного количества знаков
&nbsp;&nbsp;&nbsp;local mult = 10^(idp or 0)
&nbsp;&nbsp;&nbsp;return math.floor(num * mult + 0.5) / mult
end 

function comma_value(n) --ставит разделители в числах
&nbsp;&nbsp;&nbsp;local left,num,right = string.match(n,'^(&#91;^%d&#93;*%d)(%d*)(.-)$')
&nbsp;&nbsp;&nbsp;return left..(num:reverse():gsub('(%d%d%d)','%1 '):reverse())..right
end

function CreateDataSourceEX(Class,Sec,Par)
&nbsp;&nbsp;&nbsp;local ds,err = CreateDataSource(Class, Sec, INTERVAL_TICK, Par)
&nbsp;&nbsp;&nbsp;if ds==nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("Ошибка при получении параметра "..Par..":&#92;n"..err, 3)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds:SetEmptyCallback()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (ds:Size()==0) and (WORK) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(100)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true
&nbsp;&nbsp;&nbsp;end
end

function Stop()
&nbsp;&nbsp;&nbsp;if doLogging then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file:close() 
&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;WORK = false
end


function Calculate(row,do_calc)
if (row~=nil) and (row&#62;=0) and (do_calc) then

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local T=BaseCol&#91;row&#93;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local tmpParam ={
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"Optiontype"&#93; = T.Optiontype,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"settleprice"&#93; = getParamEx(BaseClassCode,T.Optionbase,"settleprice").param_value+0,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"strike"&#93; = getParamEx(ClassCode,T.SecCode,"strike").param_value+0,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"volatility"&#93; = getParamEx(ClassCode,T.SecCode,"volatility").param_value+0,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"DAYS_TO_MAT_DATE"&#93; = T.DAYS_TO_MAT_DATE
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local tmpGreek = Greek(tmpParam)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell(tbl.t_id, row, 5, comma_value(tmpParam.settleprice), tmpParam.settleprice) -- "Расчетная цена",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell(tbl.t_id, row, 6, comma_value(tmpParam.strike), tmpParam.strike) --"Страйк",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell(tbl.t_id, row, 7, tostring(tmpParam.volatility), tmpParam.volatility) -- "Волатильность",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell(tbl.t_id, row, 8, tostring(tmpParam.DAYS_TO_MAT_DATE), tmpParam.DAYS_TO_MAT_DATE) --"До исполнения",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell(tbl.t_id, row, 9, tostring(round(tmpGreek.Delta,2)), tmpGreek.Delta) --"Дельта",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell(tbl.t_id, row, 10, tostring(round(tmpGreek.Gamma,4)), tmpGreek.Gamma) -- "Гамма(%)",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell(tbl.t_id, row, 11, tostring(round(tmpGreek.Theta,2)), tmpGreek.Theta) -- "Тэта",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell(tbl.t_id, row, 12, tostring(round(tmpGreek.Vega,2)), tmpGreek.Vega) -- "Вега",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell(tbl.t_id, row, 13, tostring(round(tmpGreek.Rho,2)), tmpGreek.Rho) -- "Ро",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if doLogging then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Logging(os.date().. Sep .. GetRow(tbl.t_id,row))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
end
return false
end

-------------------------------Колбэки------------------------------------------------------------------
function f_cb(t_id,msg,par1,par2) --событие на нажатие клавиш
&nbsp;&nbsp;&nbsp;if (msg==QTABLE_CHAR) and (par2==19) then --сохранить в CSV файл текущее состояние таблицы нужно нажать комбинацию клавиш Ctrl+S
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSV(tbl)
&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;if (msg==QTABLE_CLOSE) then --закрытие окна
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stop()
&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;if (msg==QTABLE_VKEY) and (par2==116) then --функция принудительного обновления таблицы при нажатии клавиши Ctrl+F5
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for SecCode in string.gmatch(SecList, "(&#91;^,&#93;+)") do --перебираем опционы по очереди.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Calculate(Sec2row&#91;SecCode&#93;,true)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Highlight(tbl.t_id, Sec2row&#91;SecCode&#93;, QTABLE_NO_INDEX, RGB(255,0,0), QTABLE_DEFAULT_COLOR, INTERVAL)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;end
end

function OnStop()
&nbsp;&nbsp;&nbsp;Stop()
&nbsp;&nbsp;&nbsp;DestroyTable(tbl.t_id)
end

function OnInit()
local STR = ""
&nbsp;&nbsp;&nbsp;if doLogging then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file = io.open(log_file, "w+") 
&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;tbl.t_id = AllocTable()
&nbsp;&nbsp;&nbsp;for i=1,table.maxn(tbl) do --добавляем колонки
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if i&#60;=4 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddColumn(tbl.t_id, i, tbl&#91;i&#93;, true, QTABLE_CACHED_STRING_TYPE, string.len(tbl&#91;i&#93;)*2)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddColumn(tbl.t_id, i, tbl&#91;i&#93;, true, QTABLE_DOUBLE_TYPE, 10)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if doLogging then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR=STR..tbl&#91;i&#93;..Sep
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;Logging("Дата Время".. Sep .. STR)
&nbsp;&nbsp;&nbsp;CreateWindow(tbl.t_id)
&nbsp;&nbsp;&nbsp;SetWindowCaption(tbl.t_id,tbl.caption)
&nbsp;&nbsp;&nbsp;SetTableNotificationCallback(tbl.t_id, f_cb)
end

function OnParam(class, sec)
if (class==ClassCode) and (WORK) and (string.find(SecList,sec)~=nil) then
&nbsp;&nbsp;&nbsp;G_ROW = Sec2row&#91;sec&#93;
&nbsp;&nbsp;&nbsp;if (G_ROW~=nil) and (G_ROW&#62;=0) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Highlight(tbl.t_id, G_ROW, QTABLE_NO_INDEX, RGB(255,0,0), QTABLE_DEFAULT_COLOR, INTERVAL)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALC=true
&nbsp;&nbsp;&nbsp;end
end
end

function main()

WORK = false
CALC=true
&nbsp;&nbsp;&nbsp;for SecCode in string.gmatch(SecList, "(&#91;^,&#93;+)") do --перебираем опционы по очереди.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local Optionbase=getParamEx(ClassCode,SecCode,"optionbase").param_image
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local Optiontype=getParamEx(ClassCode,SecCode,"optiontype").param_image
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (string.find(BaseSecList,Optionbase)~=nil) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local row = InsertRow(tbl.t_id,-1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local T={
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"Name"&#93; = getSecurityInfo(ClassCode,SecCode).name,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"SecCode"&#93; = SecCode,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"Optiontype"&#93; = Optiontype,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"Optionbase"&#93; = Optionbase,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#91;"DAYS_TO_MAT_DATE"&#93; = getParamEx(ClassCode,SecCode,"DAYS_TO_MAT_DATE").param_value+0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BaseCol&#91;row&#93;=T
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--заполняем статичные параметры
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sec2row&#91;SecCode&#93;=row
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell(tbl.t_id, row, 1, BaseCol&#91;row&#93;.Name) -- "Название опциона",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell(tbl.t_id, row, 2, BaseCol&#91;row&#93;.SecCode) --"Код опциона",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell(tbl.t_id, row, 3, BaseCol&#91;row&#93;.Optiontype) -- "Тип опциона",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell(tbl.t_id, row, 4, BaseCol&#91;row&#93;.Optionbase) --"Баз. актив",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--заказ данных
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateDataSourceEX(BaseClassCode,T.Optionbase,"settleprice")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateDataSourceEX(ClassCode,T.SecCode,"strike")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateDataSourceEX(ClassCode,T.SecCode,"volatility")

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--заполняем динамичные параметры
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALC=Calculate(row,true) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
WORK = true
while WORK do
&nbsp;&nbsp;&nbsp;CALC=Calculate(G_ROW,CALC)
&nbsp;&nbsp;&nbsp;sleep(INTERVAL)
end
end


</pre>
=============
</td></tr></tbody></table><br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_WXZr2As4" href="/user/12743/" bx-tooltip-user-id="12743">Андрей</a> написал:<br />Но мне интересна цена и волатильность. &nbsp;<br />=============<br />Цена и волатильность есть в таблице текущих торгов. <br />
			<i>26.03.2019 13:37:35, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message37137/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message37137/topic4401/</guid>
			<pubDate>Tue, 26 Mar 2019 13:37:35 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message37136/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Греками поделитесь, спасибо. Но мне интересна цена и волатильность. &nbsp; <br />
			<i>26.03.2019 13:27:10, Андрей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message37136/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message37136/topic4401/</guid>
			<pubDate>Tue, 26 Mar 2019 13:27:10 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message37135/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте,<br />Такой возможности нет.<br />Если нужны греки по опционам, у нас есть пример на LUA с расчетом греков. <br />
			<i>26.03.2019 13:14:04, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message37135/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message37135/topic4401/</guid>
			<pubDate>Tue, 26 Mar 2019 13:14:04 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Доска опцинов из QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message37129/topic4401/">Доска опцинов из QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Всем привет!<br /><br />А как получить доступ к данным доски опционов из QLUA?<br />Не нашел эту таблицы в списке доступных.... &nbsp; <br />
			<i>26.03.2019 12:15:30, Андрей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message37129/topic4401/</link>
			<guid>http://forum.quik.ru/messages/forum10/message37129/topic4401/</guid>
			<pubDate>Tue, 26 Mar 2019 12:15:30 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
