<?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>Sun, 03 May 2026 01:57:23 +0300</pubDate>
		<item>
			<title>Таблица с измемениями открытого интереса</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message71040/topic8174/">Таблица с измемениями открытого интереса</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			По моему, график гораздо нагляднее, чем цифры.<br />И скрипт писать не нужно. <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=10956&" width="780" height="586" /><br /><i>31.07.2023 14:17:54, Ziveleos.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message71040/topic8174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message71040/topic8174/</guid>
			<pubDate>Mon, 31 Jul 2023 14:17:54 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Таблица с измемениями открытого интереса</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message70986/topic8174/">Таблица с измемениями открытого интереса</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_02cO5tgp" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />Добрый день, <noindex><a href="/user/16176/" target="_blank" rel="nofollow">Mariana</a></noindex>, <br />попробуйте так, ввел проверки на получение данных, ну и локализацию, а в целом понравилось, курс не прошел даром: 
====code====
<pre>&nbsp;&nbsp; local&nbsp;&nbsp;tostring = tostring;
 local&nbsp;&nbsp;is_run&nbsp;&nbsp;=&nbsp;&nbsp; true ;
 local&nbsp;&nbsp;instrument_list&nbsp;&nbsp;=&nbsp;&nbsp;{"BRQ3",&nbsp;&nbsp;"BRU3" ,&nbsp;&nbsp;"BRV3" ,&nbsp;&nbsp;"BRX3" ,&nbsp;&nbsp;"GDU3" ,&nbsp;&nbsp;"GDZ3" ,&nbsp;&nbsp;"HSU3" ,&nbsp;&nbsp;"HSZ3" ,&nbsp;&nbsp;"NAU3" ,&nbsp;&nbsp;"NAZ3" ,&nbsp;&nbsp;"NGQ3" ,&nbsp;&nbsp;"NGU3" ,&nbsp;&nbsp;"NGV3" ,&nbsp;&nbsp;"NGX3" ,&nbsp;&nbsp;"PDU3" ,&nbsp;&nbsp;"PDZ3" ,&nbsp;&nbsp;"PTU3" ,&nbsp;&nbsp;"PTZ3" ,&nbsp;&nbsp;"SFU3" ,&nbsp;&nbsp;"SFZ3" ,&nbsp;&nbsp;"SVU3" ,&nbsp;&nbsp;"SVZ3" }
 local&nbsp;&nbsp;nsecrefresh&nbsp;&nbsp;=&nbsp;&nbsp; 3 ;
 local&nbsp;&nbsp;class;

 function&nbsp;&nbsp; OnStop ()
&nbsp;&nbsp; is_run&nbsp;&nbsp;=&nbsp;&nbsp; false 
 end 

 function&nbsp;&nbsp; round (num, idp)
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;num&nbsp;&nbsp;=&nbsp;&nbsp;=&nbsp;&nbsp; nil&nbsp;&nbsp; then&nbsp;&nbsp; return&nbsp;&nbsp; nil&nbsp;&nbsp; end 
&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 


 function&nbsp;&nbsp; CreateTable ()
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;t_id&nbsp;&nbsp;=&nbsp;&nbsp; AllocTable (); 

&nbsp;&nbsp;&nbsp;&nbsp;AddColumn (t_id,&nbsp;&nbsp;0 ,&nbsp;&nbsp;"FUT" ,&nbsp;&nbsp;true , QTABLE_INT_TYPE,&nbsp;&nbsp;10 );
&nbsp;&nbsp;&nbsp;&nbsp;AddColumn (t_id,&nbsp;&nbsp;1 ,&nbsp;&nbsp;"OI" ,&nbsp;&nbsp;true , QTABLE_INT_TYPE,&nbsp;&nbsp;10 );
&nbsp;&nbsp;&nbsp;&nbsp;AddColumn (t_id,&nbsp;&nbsp;2 ,&nbsp;&nbsp;"OIINIT" ,&nbsp;&nbsp;true , QTABLE_INT_TYPE,&nbsp;&nbsp;10 );
&nbsp;&nbsp;&nbsp;&nbsp;AddColumn (t_id,&nbsp;&nbsp;3 ,&nbsp;&nbsp;"OICHG" ,&nbsp;&nbsp;true , QTABLE_INT_TYPE,&nbsp;&nbsp;10 );
&nbsp;&nbsp;&nbsp;&nbsp;AddColumn (t_id,&nbsp;&nbsp;4 ,&nbsp;&nbsp;"OICHG%" ,&nbsp;&nbsp;true , QTABLE_DOUBLE_TYPE,&nbsp;&nbsp;10 );

&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;t&nbsp;&nbsp;=&nbsp;&nbsp; CreateWindow (t_id);
&nbsp;&nbsp;&nbsp;&nbsp;SetWindowCaption (t_id,&nbsp;&nbsp;"Open Interest Change" );
&nbsp;&nbsp;&nbsp;&nbsp;SetWindowPos (t_id,&nbsp;&nbsp;100 ,&nbsp;&nbsp;100 ,&nbsp;&nbsp;252 ,&nbsp;&nbsp;532 );
&nbsp;&nbsp; 
&nbsp;&nbsp; class&nbsp;&nbsp;=&nbsp;&nbsp; "SPBFUT" 

&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&nbsp;k,v&nbsp;&nbsp;in&nbsp;&nbsp;pairs(instrument_list)&nbsp;&nbsp;do 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InsertRow&nbsp;&nbsp;(t_id, k)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;sec&nbsp;&nbsp;=&nbsp;&nbsp;tostring(v)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;mdparam&nbsp;&nbsp;=&nbsp;&nbsp; getParamEx (class, sec,&nbsp;&nbsp;"NUMCONTRACTS" )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp; true oi&nbsp;&nbsp;=&nbsp;&nbsp;mdparam.param_value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp; true oi_str&nbsp;&nbsp;=&nbsp;&nbsp; string.format ( "%d" ,&nbsp;&nbsp;true oi)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetCell&nbsp;&nbsp;(t_id, k,&nbsp;&nbsp;0 , sec)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetCell&nbsp;&nbsp;(t_id, k,&nbsp;&nbsp;1 ,&nbsp;&nbsp;true oi_str)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetCell&nbsp;&nbsp;(t_id, k,&nbsp;&nbsp;2 ,&nbsp;&nbsp;true oi_str)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;chg&nbsp;&nbsp;=&nbsp;&nbsp; 0 ;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetCell&nbsp;&nbsp;(t_id, k,&nbsp;&nbsp;3 , tostring(chg))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;chg_pc&nbsp;&nbsp;=&nbsp;&nbsp; 0 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetCell&nbsp;&nbsp;(t_id, k,&nbsp;&nbsp;4 , tostring(chg_pc))
&nbsp;&nbsp;&nbsp;&nbsp;end 

&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;t_id
 end ;

 function&nbsp;&nbsp; RefreshTable (t_id)
&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&nbsp;k,v&nbsp;&nbsp;in&nbsp;&nbsp;pairs(instrument_list)&nbsp;&nbsp;do 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;sec&nbsp;&nbsp;=&nbsp;&nbsp;tostring(v)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;mdparam&nbsp;&nbsp;=&nbsp;&nbsp; getParamEx (class, sec,&nbsp;&nbsp;"NUMCONTRACTS" )

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp; true oi&nbsp;&nbsp;=&nbsp;&nbsp;mdparam&nbsp;&nbsp;and&nbsp;&nbsp;mdparam.param_value&nbsp;&nbsp;or&nbsp;&nbsp; 0 ;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp; true oi_str&nbsp;&nbsp;=&nbsp;&nbsp; string.format ( "%d" ,&nbsp;&nbsp;true oi);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetCell&nbsp;&nbsp;(t_id, k,&nbsp;&nbsp;1 ,&nbsp;&nbsp;true oi_str)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;initoi&nbsp;&nbsp;=&nbsp;&nbsp; GetCell (t_id, k,&nbsp;&nbsp;2 ).image;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;chg&nbsp;&nbsp;=&nbsp;&nbsp; true oi&nbsp;&nbsp;-&nbsp;&nbsp;initoi;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;chg_str&nbsp;&nbsp;=&nbsp;&nbsp; string.format ( "%d" , chg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetCell&nbsp;&nbsp;(t_id, k,&nbsp;&nbsp;3 , chg_str)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;initoi_val&nbsp;&nbsp;=&nbsp;&nbsp;tonumber(initoi);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;chg_pc&nbsp;&nbsp;=&nbsp;&nbsp;initoi_val~ =&nbsp;&nbsp;0&nbsp;&nbsp; and&nbsp;&nbsp;round(chg / initoi_val&nbsp;&nbsp;*&nbsp;&nbsp; 100 , 2 )&nbsp;&nbsp;or&nbsp;&nbsp; 0 ;&nbsp;&nbsp; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetCell&nbsp;&nbsp;(t_id, k,&nbsp;&nbsp;4 , tostring(chg_pc))
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;
 end ;

 function&nbsp;&nbsp; main ()
&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;table_id&nbsp;&nbsp;=&nbsp;&nbsp;CreateTable()

&nbsp;&nbsp;&nbsp;&nbsp; while&nbsp;&nbsp;is_run&nbsp;&nbsp;do 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep (nsecrefresh *&nbsp;&nbsp;1000 )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RefreshTable(table_id)
&nbsp;&nbsp;&nbsp;&nbsp; end 
 end 
&nbsp;&nbsp;</pre>
=============
 <br />=============<br />Спасибо большое, все понятно. Мне очень поможет ваш код, чтобы писать свое более правильно. По поводу получение instrument_list - буду изучать, но чуть попозже, пока реализация со строкой инструментов в коде мне достаточно удобна <br />
			<i>27.07.2023 17:47:20, Mariana.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message70986/topic8174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message70986/topic8174/</guid>
			<pubDate>Thu, 27 Jul 2023 17:47:20 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Таблица с измемениями открытого интереса</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message70985/topic8174/">Таблица с измемениями открытого интереса</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_shl0fpaI" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/16176/" target="_blank" rel="nofollow">Mariana</a></noindex> написал:<br />Здравствуйте,<br /><br />Я хотела бы научиться писать небольшие вспомогательные програмки на QLUA, опыт програмирования у меня очень небольшой, когда-то давно был курс в университете. Я смогла написать следующую программу, которая выполняет следующее:<br />при запуске формируется таблица с фьючерсами, запоминается в отдельной колонке открытый интересе в момент создания таблицы.<br />Далее, каждые несколько секунд берется текущий открытый интерес и вычисляется изменение открытого интереса. Эти данные выводятся в отдельную колонку.<br /><br />На текущий момент, больше всего я не понимаю, как работать с типами данных, почему-то чтобы выводились данные в колонку - их нужно преобразовывать в строки, иначе у меня выводятся нули. <br />К сожалению, мне очень не хватает рабочих примеров, чтобы быстрее обучиться.<br /><br />Хотя код рабочий, я буду признательна, если кто-то сможет подправить код с точки зрения приведения типов. Хочется чтобы в столбцах OI, OIINIT, OICHG, OICHG% были не строки, а числа.<br /><br />И еще один вопрос, можно ли добавить столбы<br />- которые брали бы открытый интерес на начало дня (на 10 утра по Москве, либо на 19:00 предыдущего дня - любой вариант подходит)<br />- которые брали открытый интерес который был 15 минут назад (получается, это поле должно динамически обновлятьс, достаточно раз в минуту например)<br /><br />=============<br /> Ликбез.<br />Скрипты пишем не на QLUA, а на Lua. QLua- это библиотека функций для Lua. Эти функции позволяют скрипту обмениваться данными с терминалом QUIK.<br />Поэтому про типы и как писать скрипты на луа надо читать в литературе по программированию на луа.<br /> <noindex><a href="https://jevico.github.io/" target="_blank" rel="nofollow">https://jevico.github.io/</a></noindex> <br /> <noindex><a href="https://eligovision.ru/media/upload/lua.pdf" target="_blank" rel="nofollow">https://eligovision.ru/media/upload/lua.pdf</a></noindex> <br /> <noindex><a href="https://chenweixiang.github.io/docs/Programming_in_Lua_4th_Edition.pdf" target="_blank" rel="nofollow">https://chenweixiang.github.io/docs/Programming_in_Lua_4th_Edition.pdf</a></noindex> <br />-----------------------<br />Относительно типа выводимых данных в таблицу.<br />Чем Вам мешает сохранение чисел в формате строк? <br />В данной реализации отображения таблицы используется формат строки для &nbsp;хранения отображаемых данных, <br />поэтому надо явно делать из чисел строки. Так сделали разработчики, поэтому надо делать именно так.<br />----------------------<br />Изучите библиотеку QLUA и делайте так, как написано в документации. Примите это как догму и не пытайтесь угадать &quot;почему&quot; так сделали разработчики библиотеки.<br />-----------------<br />QUIK - это программа для подачи поручений брокеру в текущий торговый день. <br />Поэтому в ней отображается текущая информация. Если Вам надо информацию прошлых дней то ее надо сохранять в файлах и потом считывать и отображать.<br />Т е вам надо сделать запись в файл &nbsp;OI, OIINIT, OICHG, OICHG% &nbsp;и считывать значения при запуске QUIK.<br />Хранить данные Вы можете и в двоичном виде как числа, преобразовывать в строку надо лишь для &nbsp;отображения на экране.<br />=============<br />Спасибо за советы.<br />По поводу данных типа строки - мне показалось это неудобным и каким-то костылем, хотя бы потому что надо преобразовывать постоянно данные. Ну и сортировка например в таблице не работает. Но я поняла, что это такая особенность.<br />По поводу сохранения данных - тоже понятно, постараюсь реализовать. <br />
			<i>27.07.2023 17:43:39, Mariana.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message70985/topic8174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message70985/topic8174/</guid>
			<pubDate>Thu, 27 Jul 2023 17:43:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Таблица с измемениями открытого интереса</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message70960/topic8174/">Таблица с измемениями открытого интереса</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Получение instrument_list &nbsp;лучше автоматизировать, примеры есть на сайте. Я думаю что и проверка на sec нужна. <br />
			<i>27.07.2023 09:25:07, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message70960/topic8174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message70960/topic8174/</guid>
			<pubDate>Thu, 27 Jul 2023 09:25:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Таблица с измемениями открытого интереса</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message70959/topic8174/">Таблица с измемениями открытого интереса</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день, <a class="blog-p-user-name" id="bp_yIRvc3LB" href="/user/16176/" bx-tooltip-user-id="16176">Mariana</a>, <br />попробуйте так, ввел проверки на получение данных, ну и локализацию, а в целом понравилось, курс не прошел даром:
====code====
<pre>local tostring=tostring;
local is_run = true;
local instrument_list = {"BRQ3", "BRU3", "BRV3", "BRX3", "GDU3", "GDZ3", "HSU3", "HSZ3", "NAU3", "NAZ3", "NGQ3", "NGU3", "NGV3", "NGX3", "PDU3", "PDZ3", "PTU3", "PTZ3", "SFU3", "SFZ3", "SVU3", "SVZ3"}
local nsecrefresh = 3;
local class;

function OnStop()
&nbsp;&nbsp; is_run = false
end

function round(num, idp)
&nbsp;&nbsp; if num == nil then return nil end
&nbsp;&nbsp; local mult = 10^(idp or 0)
&nbsp;&nbsp; return math.floor(num * mult + 0.5) / mult
end


function CreateTable()
&nbsp;&nbsp; local t_id = AllocTable(); 

&nbsp;&nbsp; AddColumn(t_id, 0, "FUT", true, QTABLE_INT_TYPE, 10);
&nbsp;&nbsp; AddColumn(t_id, 1, "OI", true, QTABLE_INT_TYPE, 10);
&nbsp;&nbsp; AddColumn(t_id, 2, "OIINIT", true, QTABLE_INT_TYPE, 10);
&nbsp;&nbsp; AddColumn(t_id, 3, "OICHG", true, QTABLE_INT_TYPE, 10);
&nbsp;&nbsp; AddColumn(t_id, 4, "OICHG%", true, QTABLE_DOUBLE_TYPE, 10);

&nbsp;&nbsp; local t = CreateWindow(t_id);
&nbsp;&nbsp; SetWindowCaption(t_id, "Open Interest Change");
&nbsp;&nbsp; SetWindowPos(t_id, 100, 100, 252, 532);
&nbsp;&nbsp; 
&nbsp;&nbsp; class = "SPBFUT"

&nbsp;&nbsp; for k,v in pairs(instrument_list) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InsertRow (t_id, k)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local sec = tostring(v)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local mdparam = getParamEx(class, sec, "NUMCONTRACTS")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local trueoi = mdparam.param_value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local trueoi_str = string.format("%d", trueoi)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 0, sec)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 1, trueoi_str)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 2, trueoi_str)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local chg = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 3, tostring(chg))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local chg_pc = 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 4, tostring(chg_pc))
&nbsp;&nbsp; end

&nbsp;&nbsp; return t_id
end;

function RefreshTable(t_id)
&nbsp;&nbsp; for k,v in pairs(instrument_list) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local sec = tostring(v)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local mdparam = getParamEx(class, sec, "NUMCONTRACTS")

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local trueoi = mdparam and mdparam.param_value or 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local trueoi_str = string.format("%d", trueoi);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 1, trueoi_str)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local initoi = GetCell(t_id, k, 2).image;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local chg = trueoi - initoi;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local chg_str = string.format("%d", chg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 3, chg_str)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local initoi_val = tonumber(initoi);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local chg_pc = initoi_val~=0 and round(chg / initoi_val * 100,2) or 0;&nbsp;&nbsp; 

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 4, tostring(chg_pc))
&nbsp;&nbsp; end&nbsp;&nbsp; 
end;

function main()
&nbsp;&nbsp;&nbsp;&nbsp;local table_id = CreateTable()

&nbsp;&nbsp;&nbsp;&nbsp;while is_run do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(nsecrefresh*1000)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RefreshTable(table_id)
&nbsp;&nbsp;&nbsp;&nbsp;end
end
</pre>
============= <br />
			<i>27.07.2023 09:22:20, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message70959/topic8174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message70959/topic8174/</guid>
			<pubDate>Thu, 27 Jul 2023 09:22:20 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Таблица с измемениями открытого интереса</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message70957/topic8174/">Таблица с измемениями открытого интереса</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_1ellL6cp" href="/user/16176/" bx-tooltip-user-id="16176">Mariana</a> написал:<br />Здравствуйте,<br /><br />Я хотела бы научиться писать небольшие вспомогательные програмки на QLUA, опыт програмирования у меня очень небольшой, когда-то давно был курс в университете. Я смогла написать следующую программу, которая выполняет следующее:<br />при запуске формируется таблица с фьючерсами, запоминается в отдельной колонке открытый интересе в момент создания таблицы.<br />Далее, каждые несколько секунд берется текущий открытый интерес и вычисляется изменение открытого интереса. Эти данные выводятся в отдельную колонку.<br /><br />На текущий момент, больше всего я не понимаю, как работать с типами данных, почему-то чтобы выводились данные в колонку - их нужно преобразовывать в строки, иначе у меня выводятся нули. <br />К сожалению, мне очень не хватает рабочих примеров, чтобы быстрее обучиться.<br /><br />Хотя код рабочий, я буду признательна, если кто-то сможет подправить код с точки зрения приведения типов. Хочется чтобы в столбцах OI, OIINIT, OICHG, OICHG% были не строки, а числа.<br /><br />И еще один вопрос, можно ли добавить столбы<br />- которые брали бы открытый интерес на начало дня (на 10 утра по Москве, либо на 19:00 предыдущего дня - любой вариант подходит)<br />- которые брали открытый интерес который был 15 минут назад (получается, это поле должно динамически обновлятьс, достаточно раз в минуту например)<br /><br /> <br />=============<br />Ликбез.<br />Скрипты пишем не на QLUA, а на Lua. QLua- это библиотека функций для Lua. Эти функции позволяют скрипту обмениваться данными с терминалом QUIK.<br />Поэтому про типы и как писать скрипты на луа надо читать в литературе по программированию на луа.<br /><noindex><a href="https://jevico.github.io/" target="_blank" rel="nofollow">https://jevico.github.io/</a></noindex><br /><noindex><a href="https://eligovision.ru/media/upload/lua.pdf" target="_blank" rel="nofollow">https://eligovision.ru/media/upload/lua.pdf</a></noindex><br /><noindex><a href="https://chenweixiang.github.io/docs/Programming_in_Lua_4th_Edition.pdf" target="_blank" rel="nofollow">https://chenweixiang.github.io/docs/Programming_in_Lua_4th_Edition.pdf</a></noindex><br />-----------------------<br />Относительно типа выводимых данных в таблицу.<br />Чем Вам мешает сохранение чисел в формате строк? <br />В данной реализации отображения таблицы используется формат строки для &nbsp;хранения отображаемых данных, <br />поэтому надо явно делать из чисел строки. Так сделали разработчики, поэтому надо делать именно так.<br />----------------------<br />Изучите библиотеку QLUA и делайте так, как написано в документации. Примите это как догму и не пытайтесь угадать &quot;почему&quot; так сделали разработчики библиотеки.<br />-----------------<br />QUIK - это программа для подачи поручений брокеру в текущий торговый день. <br />Поэтому в ней отображается текущая информация. Если Вам надо информацию прошлых дней то ее надо сохранять в файлах и потом считывать и отображать.<br />Т е вам надо сделать запись в файл &nbsp;OI, OIINIT, OICHG, OICHG% &nbsp;и считывать значения при запуске QUIK.<br />Хранить данные Вы можете и в двоичном виде как числа, преобразовывать в строку надо лишь для &nbsp;отображения на экране. <br />
			<i>27.07.2023 06:57:48, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message70957/topic8174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message70957/topic8174/</guid>
			<pubDate>Thu, 27 Jul 2023 06:57:48 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Таблица с измемениями открытого интереса</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message70942/topic8174/">Таблица с измемениями открытого интереса</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте,<br /><br />Я хотела бы научиться писать небольшие вспомогательные програмки на QLUA, опыт програмирования у меня очень небольшой, когда-то давно был курс в университете. Я смогла написать следующую программу, которая выполняет следующее:<br />при запуске формируется таблица с фьючерсами, запоминается в отдельной колонке открытый интересе в момент создания таблицы.<br />Далее, каждые несколько секунд берется текущий открытый интерес и вычисляется изменение открытого интереса. Эти данные выводятся в отдельную колонку.<br /><br />На текущий момент, больше всего я не понимаю, как работать с типами данных, почему-то чтобы выводились данные в колонку - их нужно преобразовывать в строки, иначе у меня выводятся нули. <br />К сожалению, мне очень не хватает рабочих примеров, чтобы быстрее обучиться.<br /><br />Хотя код рабочий, я буду признательна, если кто-то сможет подправить код с точки зрения приведения типов. Хочется чтобы в столбцах OI, OIINIT, OICHG, OICHG% были не строки, а числа.<br /><br />И еще один вопрос, можно ли добавить столбы<br />- которые брали бы открытый интерес на начало дня (на 10 утра по Москве, либо на 19:00 предыдущего дня - любой вариант подходит)<br />- которые брали открытый интерес который был 15 минут назад (получается, это поле должно динамически обновлятьс, достаточно раз в минуту например)<br /><br /><br />
====code====
<pre>is_run = true
instrument_list = {"BRQ3", "BRU3", "BRV3", "BRX3", "GDU3", "GDZ3", "HSU3", "HSZ3", "NAU3", "NAZ3", "NGQ3", "NGU3", "NGV3", "NGX3", "PDU3", "PDZ3", "PTU3", "PTZ3", "SFU3", "SFZ3", "SVU3", "SVZ3"}
nsecrefresh = 3

function OnStop()
&nbsp;&nbsp;&nbsp;is_run = false
end

function round(num, idp)
&nbsp;&nbsp;&nbsp;if num == nil then return nil end
&nbsp;&nbsp;&nbsp;local mult = 10^(idp or 0)
&nbsp;&nbsp;&nbsp;return math.floor(num * mult + 0.5) / mult
end


function CreateTable()
&nbsp;&nbsp;&nbsp;t_id = AllocTable(); 

&nbsp;&nbsp;&nbsp;AddColumn(t_id, 0, "FUT", true, QTABLE_INT_TYPE, 10);
&nbsp;&nbsp;&nbsp;AddColumn(t_id, 1, "OI", true, QTABLE_INT_TYPE, 10);
&nbsp;&nbsp;&nbsp;AddColumn(t_id, 2, "OIINIT", true, QTABLE_INT_TYPE, 10);
&nbsp;&nbsp;&nbsp;AddColumn(t_id, 3, "OICHG", true, QTABLE_INT_TYPE, 10);
&nbsp;&nbsp;&nbsp;AddColumn(t_id, 4, "OICHG%", true, QTABLE_DOUBLE_TYPE, 10);

&nbsp;&nbsp;&nbsp;t = CreateWindow(t_id);
&nbsp;&nbsp;&nbsp;SetWindowCaption(t_id, "Open Interest Change");
&nbsp;&nbsp;&nbsp;SetWindowPos(t_id, 100, 100, 252, 532);
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;class = "SPBFUT"

&nbsp;&nbsp;&nbsp;for k,v in pairs(instrument_list) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InsertRow (t_id, k)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sec = tostring(v)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mdparam = getParamEx(class, sec, "NUMCONTRACTS")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trueoi = mdparam.param_value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trueoi_str = string.format("%d", trueoi)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 0, sec)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 1, trueoi_str)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 2, trueoi_str)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chg = 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 3, tostring(chg))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chg_pc = 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 4, tostring(chg_pc))
&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;return t_id
end;

function RefreshTable (t_id)
&nbsp;&nbsp;&nbsp;for k,v in pairs(instrument_list) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sec = tostring(v)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mdparam = getParamEx(class, sec, "NUMCONTRACTS")

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trueoi = mdparam.param_value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trueoi_str = string.format("%d", trueoi)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 1, trueoi_str)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initoi = GetCell(t_id, k, 2).image
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chg = trueoi - initoi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chg_str = string.format("%d", chg)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 3, chg_str)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initoi_val = tonumber(initoi)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chg_pc = round(chg / initoi_val * 100,2)&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCell (t_id, k, 4, tostring(chg_pc))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;
end;


function main()
&nbsp;&nbsp;&nbsp;table_id = CreateTable()

&nbsp;&nbsp;&nbsp; while is_run do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(nsecrefresh*1000)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RefreshTable (table_id)
&nbsp;&nbsp;&nbsp; end
end
</pre>
============= <br />
			<i>26.07.2023 17:42:40, Mariana.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message70942/topic8174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message70942/topic8174/</guid>
			<pubDate>Wed, 26 Jul 2023 17:42:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
