<?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>Wed, 22 Apr 2026 19:56:00 +0300</pubDate>
		<item>
			<title>Расширение интерфейса QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum8/message40849/topic4897/">Расширение интерфейса QLUA</a></b> <i>Пользовательские пункты контекстного меню таблиц, функция открытия окна заявки с заранее заданными параметрами</i> в форуме <a href="http://forum.quik.ru/forum8/">Пожелания по развитию QUIK</a>. <br />
			Конечно, подобный функционал можно реализовать с помощью пользовательских таблиц, но для этого такой огород приходится городить)) <br />
			<i>28.11.2019 13:11:17, Анатолий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum8/message40849/topic4897/</link>
			<guid>http://forum.quik.ru/messages/forum8/message40849/topic4897/</guid>
			<pubDate>Thu, 28 Nov 2019 13:11:17 +0300</pubDate>
			<category>Пожелания по развитию QUIK</category>
		</item>
		<item>
			<title>Расширение интерфейса QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum8/message40848/topic4897/">Расширение интерфейса QLUA</a></b> <i>Пользовательские пункты контекстного меню таблиц, функция открытия окна заявки с заранее заданными параметрами</i> в форуме <a href="http://forum.quik.ru/forum8/">Пожелания по развитию QUIK</a>. <br />
			Прошу обратить внимание, что эти дополнения в интерфейс QLUA позволят с лёгкостью реализовать в скрипте QLUA ранее многократно и в разных формулировках запрашиваемую функцию &quot;автоматическое выставление стоп лосса и тейк профита с заранее заданными параметрами при создании заявки&quot;. Также будет, например, легко реализуема такая плюшка, как групповое изменение заявок - отмена, изменение (например, сдвиг) лимитных и стоп цен, коррекция параметров отступа и защитного спреда, изменение параметров рыночной цены, замена инструмента (например с TOD на TOM).<br />Вообще, интерфейс QLUA крайне беден в плане наличия средств интерактивного взаимодействия с пользователем. Да, я понимаю, что всё можно делать через файловый ввод-вывод: мониторить новые команды, считывать их и исполнять, но это не улучшает удобство, а главное - быстроту использования.<br /><br />Поэтому осмелюсь попросить ещё одну функцию взаимодействия скрипта QLUA с пользователем:<br />Возможность создания немодальных аналогов функции MessageBox из Win32 API. Модальные окошки не подойдут, так как могут потеряться и повесить какой-нибудь поток. Чтобы потерянные окна с запросами из скрипта несложно было найти как интерактивно, так и программно - предлагаю ввести новый тип таблиц - &quot;Запросы из скрипта&quot;. Доступ для чтения к ней из LUA предлагаю осуществить с помощью getItem() и других функций из этой группы. Должна быть возможность интерактивно открыть необработанный ранее по каким-то причинам пользователем запрос, отправленный из скрипта и сохранённый в данной таблице. Также должна быть возможность программного снятие переставшего быть актуальным запроса, отправленного ранее из скрипта. Как вариант, можно предусмотреть время действия для каждого из запросов пользователя. Из данного описания запрошенной функциональности следует, что должна быть применена асинхронная, событийно-ориентированная модель обработки ответов пользователя. Возможно, следует ввести дополнительный callback типа OnUserAnswer(request_id, answer).<br /><br />Примерные прототипы функций:
====code====
<pre>registerUserAnswerCallback(FUNCTION user_answer_callback)
unregisterUserAnswerCallback()
OnUserAnswer(NUMBER request_id, STRING answer)
NUMBER MessageBoxNonModal(STRING message_str, TABLE options, NUMBER icon_code, NUMBER timeout_in_seconds) -- возвращает request_id
CancelMessageBox(NUMBER request_id)</pre>
=============
<br />TABLE options - таблица, содержащая набор пар &lt;текстовое представление опции&gt; и &lt;идентификатор ответа&gt;, например:
====code====
<pre>options =
{
&nbsp;&nbsp;&nbsp;&nbsp;{"Да", 1},
&nbsp;&nbsp;&nbsp;&nbsp;{"Нет", 0},
&nbsp;&nbsp;&nbsp;&nbsp;{"Не понял", -1}
}</pre>
=============
<br />Надписи на кнопках формируются из текстовое представления опции, в качестве поля answer &nbsp;в callback передается идентификатор ответа.<br /><br />Разумеется, при остановке скрипта по любым причинам все MessageBox, с ним связанные - закрываются, а следы в таблице &quot;висящих&quot; запросов скрипта (pending requests) - подчищаются.<br /><br />Спасибо за внимание ;-) <br />
			<i>28.11.2019 12:42:51, Анатолий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum8/message40848/topic4897/</link>
			<guid>http://forum.quik.ru/messages/forum8/message40848/topic4897/</guid>
			<pubDate>Thu, 28 Nov 2019 12:42:51 +0300</pubDate>
			<category>Пожелания по развитию QUIK</category>
		</item>
		<item>
			<title>Расширение интерфейса QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum8/message40829/topic4897/">Расширение интерфейса QLUA</a></b> <i>Пользовательские пункты контекстного меню таблиц, функция открытия окна заявки с заранее заданными параметрами</i> в форуме <a href="http://forum.quik.ru/forum8/">Пожелания по развитию QUIK</a>. <br />
			Здравствуйте! <br /> <br /> Ваши пожелания зарегистрированы. &nbsp;Мы постараемся рассмотреть их и &nbsp;сообщить Вам результаты анализа. Впоследствии, по результатам анализа, &nbsp;будет приниматься решение о реализации пожеланий в будущих версиях ПО. <br />
			<i>27.11.2019 11:42:16, Egor Zaytsev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum8/message40829/topic4897/</link>
			<guid>http://forum.quik.ru/messages/forum8/message40829/topic4897/</guid>
			<pubDate>Wed, 27 Nov 2019 11:42:16 +0300</pubDate>
			<category>Пожелания по развитию QUIK</category>
		</item>
		<item>
			<title>Расширение интерфейса QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum8/message40827/topic4897/">Расширение интерфейса QLUA</a></b> <i>Пользовательские пункты контекстного меню таблиц, функция открытия окна заявки с заранее заданными параметрами</i> в форуме <a href="http://forum.quik.ru/forum8/">Пожелания по развитию QUIK</a>. <br />
			Код коряво вставился...<br />Дублирую здесь<br />
====code====
<pre>openNewOrderWindow({
&nbsp;&nbsp;&nbsp;&nbsp;&#91;"CLIENT_CODE"&#93;="777777",
&nbsp;&nbsp;&nbsp;&nbsp;&#91;"ACCOUNT"&#93;="MB0007777777",
&nbsp;&nbsp;&nbsp;&nbsp;&#91;"EXECUTION_CONDITION"&#93;="PUT_IN_QUEUE"
&nbsp;&nbsp;&nbsp;&nbsp;&#91;"TRANS_ID"&#93;="777777"
&nbsp;&nbsp;&nbsp;&nbsp;&#91;"CLASSCODE"&#93;="CETS"
&nbsp;&nbsp;&nbsp;&nbsp;&#91;"SECCODE"&#93;="USD000UTSTOM"
&nbsp;&nbsp;&nbsp;&nbsp;&#91;"ACTION"&#93;="NEW_ORDER"
&nbsp;&nbsp;&nbsp;&nbsp;&#91;"OPERATION"&#93;="B"
&nbsp;&nbsp;&nbsp;&nbsp;&#91;"TYPE"&#93;="L"
&nbsp;&nbsp;&nbsp;&nbsp;&#91;"PRICE"&#93;="63.3000"
&nbsp;&nbsp;&nbsp;&nbsp;&#91;"QUANTITY"&#93;="12"})</pre>
=============
<br />
====code====
<pre>registerUserMenuItem("quotes", "Создать заявку и стоп заявку", USER_MAKE_ORDER_AND_STOP_ORDER, UserMenuItemCallback)

function UserMenuItemCallback(table_class, menu_item_id, table_line)
&nbsp;&nbsp;&nbsp;&nbsp;if (table_class == "quotes") then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (menu_item_id == USER_MAKE_ORDER_AND_STOP_ORDER) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--подготовить данные для транзакций
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elseif (menu_menu_item_id == USER_ANOTHER_FUNCTION) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--сделать ещё что-нибудь полезное
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("Не реализовано")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;elseif (table_class == "orders") then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--что-то сделать на радость всем
&nbsp;&nbsp;&nbsp;&nbsp;end
end</pre>
============= <br />
			<i>27.11.2019 00:08:12, Анатолий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum8/message40827/topic4897/</link>
			<guid>http://forum.quik.ru/messages/forum8/message40827/topic4897/</guid>
			<pubDate>Wed, 27 Nov 2019 00:08:12 +0300</pubDate>
			<category>Пожелания по развитию QUIK</category>
		</item>
		<item>
			<title>Расширение интерфейса QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum8/message40826/topic4897/">Расширение интерфейса QLUA</a></b> <i>Пользовательские пункты контекстного меню таблиц, функция открытия окна заявки с заранее заданными параметрами</i> в форуме <a href="http://forum.quik.ru/forum8/">Пожелания по развитию QUIK</a>. <br />
			<p></p><p>Предложения касаются дополнений к программному интерфейсу QLUA.</p><p>1)</p><p>Реализовать функцию, создающую окно ввода новых заявок. В функцию в качестве параметра должна передаваться таблица, аналогичная таблице, передаваемой в качестве параметра в функцию sendTransaction(). Таким образом можно будет в скрипте заранее заполнить нужные параметры.</p><p>Справка по функции:</p><p>Функция предназначена для Открытия окна ввода новой заявки. </p><p>Формат вызова: </p>
====code====
<pre>NUMBER openNewOrderWindow(TABLE transaction)</pre>
=============
<p>Функция возвращает 1, если пользователь нажал &quot;ОК&quot;, 0 - в ином случае</p><p>Параметр transaction - таблица, аналогичная по составу таблице, передаваемой в функцию sendTransaction().</p><p>Пример:</p><p></p>
====code====
<pre>openNewOrderWindow ({&nbsp;&nbsp;&nbsp;&nbsp;&#91;"CLIENT_CODE"&#93;="777777",&nbsp;&nbsp;&nbsp;&nbsp;&#91;"ACCOUNT"&#93;="MB0007777777",&nbsp;&nbsp;&nbsp;&nbsp;&#91;"EXECUTION_CONDITION"&#93;="PUT_IN_QUEUE"&nbsp;&nbsp;&nbsp;&nbsp;&#91;"TRANS_ID"&#93;="777777"&nbsp;&nbsp;&nbsp;&nbsp;&#91;"CLASSCODE"&#93;="CETS"&nbsp;&nbsp;&nbsp;&nbsp;&#91;"SECCODE"&#93;="USD000UTSTOM"&nbsp;&nbsp;&nbsp;&nbsp;&#91;"ACTION"&#93;="NEW_ORDER"&nbsp;&nbsp;&nbsp;&nbsp;&#91;"OPERATION"&#93;="B"&nbsp;&nbsp;&nbsp;&nbsp;&#91;"TYPE"&#93;="L"&nbsp;&nbsp;&nbsp;&nbsp;&#91;"PRICE"&#93;="63.3000"&nbsp;&nbsp;&nbsp;&nbsp;&#91;"QUANTITY"&#93;="12"})</pre>
=============
<p></p><p>2)</p><p>Реализовать возможность добавления пользовательского пункта меню в контекстное меню каждого вида стандартных таблиц QUIK. При выборе пользователем этого пункта меню должен вызывается callback в пользовательском скрипте, в который должно передаваться имя класса окна (например, “quotes”, ”trades” и т.п.), идентификатор пользовательского пункта меню и таблица, содержащая значения текущей строки стандартной таблицы интерфейса QUIK. Регистрация callback пользовательского скрипта может производиться одновременно с регистрацией в QUIK параметров пункта меню.</p><p>Пример:</p><p>Где-то в коде инициализации:</p>
====code====
<pre>registerUserMenuItem("quotes", "Создать заявку и стоп заявку", USER_MAKE_ORDER_AND_STOP_ORDER, UserMenuItemCallback)</pre>
=============
<p>В результате вызова этой функции в контекстное меню всех таблиц котировок должен добавиться пункт меню &quot;Создать заявку и стоп-заявку&quot;. При выборе пользователем этого пункта меню должен вызваться callback:</p><p></p>
====code====
<pre>function UserMenuItemCallback(table_class, menu_item_id, table_line)&nbsp;&nbsp;&nbsp;&nbsp;if (table_class == "quotes") then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (menu_item_id == USER_MAKE_ORDER_AND_STOP_ORDER) then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trans1 = PrepareOrderTransaction(table_line) --подготовить данные для заявки&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trans2 = PrepareOrderTransaction(table_line) --подготовить данные для заявки&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessOrders({trans1, trans2})&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elseif (menu_menu_item_id == USER_ANOTHER_FUNCTION) then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--сделать ещё что-нибудь полезное&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("Не реализовано")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;elseif (table_class == "orders") then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--что-то сделать на радость всем&nbsp;&nbsp;&nbsp;&nbsp;endend </pre>
=============
<p>Примерные прототипы функций:</p><p></p>
====code====
<pre>NUMBER registerUserMenuItem(STRING table_class, STRING menu_item_text, NUMBER menu_item_id, FUNCTION callback)UserMenuItemCallback(STRING table_class, NUMBER menu_item_id, TABLE table_line)</pre>
=============
<p></p><p>Реализация этих двух пунктов позволит существенно разнообразить возможности и увеличить гибкость пользовательского интерфейса QUIK с помощью скриптов QLUA.</p> <br />
			<i>27.11.2019 00:03:09, Анатолий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum8/message40826/topic4897/</link>
			<guid>http://forum.quik.ru/messages/forum8/message40826/topic4897/</guid>
			<pubDate>Wed, 27 Nov 2019 00:03:09 +0300</pubDate>
			<category>Пожелания по развитию QUIK</category>
		</item>
	</channel>
</rss>
