<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Описание полей в методе on_trans_reply]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Описание полей в методе on_trans_reply форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Tue, 03 Nov 2026 13:00:49 +0300</pubDate>
		<item>
			<title>Описание полей в методе on_trans_reply</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message83308/topic9400/">Описание полей в методе on_trans_reply</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_2gsUX9QV" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />Дествительно не подумал и повелся на маркетинговые мифы о &quot;Си-скоростях&quot;. Любое значение Lua — это сложная структура TValue, и побитовые операторы в Lua 5.4 действительно не являются прямыми ассемблерными инструкциями ЦП. <br /><br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex>, &nbsp;Спасибо за замечание и системное погружение в исходный Си-код языка. Это позволяет строить более осознанную архитектуру, понимая такт процессора.<br /><br />Вывод Lua = Таблица, Lua ~= Ассемблер. <br /><br />Несмотря на то, что на уровне исполнения это вызов функций ВМ, оператор &amp; в Lua 5.4.1 работает быстрее, чем вызов старой внешней библиотеки bit.band(flags, 0x4). Следовательно вывод что встроенный оператор &amp; всё же предпочтительнее для Квика сохраняется и это главное!<br />=============<br />Согласен. &nbsp; <br />
			<i>30.10.2026 18:21:42, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message83308/topic9400/</link>
			<guid>http://forum.quik.ru/messages/forum10/message83308/topic9400/</guid>
			<pubDate>Fri, 30 Oct 2026 18:21:42 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Описание полей в методе on_trans_reply</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message83307/topic9400/">Описание полей в методе on_trans_reply</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Дествительно не подумал и повелся на маркетинговые мифы о "Си-скоростях". Любое значение Lua — это сложная структура TValue, и побитовые операторы в Lua 5.4 действительно не являются прямыми ассемблерными инструкциями ЦП. <br /><br /><a class="blog-p-user-name" id="bp_1T04TeLC" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;Спасибо за замечание и системное погружение в исходный Си-код языка. Это позволяет строить более осознанную архитектуру, понимая такт процессора.<br /><br />Вывод Lua = Таблица, Lua ~= Ассемблер. <br /><br />Несмотря на то, что на уровне исполнения это вызов функций ВМ, оператор & в Lua 5.4.1 работает быстрее, чем вызов старой внешней библиотеки bit.band(flags, 0x4). Следовательно вывод что встроенный оператор & всё же предпочтительнее для Квика сохраняется и это главное! <br />
			<i>30.10.2026 10:58:47, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message83307/topic9400/</link>
			<guid>http://forum.quik.ru/messages/forum10/message83307/topic9400/</guid>
			<pubDate>Fri, 30 Oct 2026 10:58:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Описание полей в методе on_trans_reply</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message83306/topic9400/">Описание полей в методе on_trans_reply</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_438BHtrt" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />Поскольку поддержка отмалчивается, проведу разбор самостоятельно, для себя и таких как я (хотя и слабо разбираюсь в этом), а что делать?<br /><br />1. Опечатка в тексте руководства ARQA Technologies очевидна, авторы справки перепутали номера битов и шестнадцатеричные (HEX) маски. Авторы опечатались в HEX-записи. Они хотели написать бит 20 (маска 0x100000) и бит 21 (маска 0x200000). Но почему то написали 0x21 и 0x22? <br />Видимо механически скопировали номера битов, забыв перевести их в степени двойки и ошибочно записав номера битов 20 и 21 как 0x20 / 0x21, а затем сдвинули индексы? <br /> Доверять HEX-значениям 0x21 и 0x22 из этой справки нельзя — они полностью неверны. <br /><br />2. Ловушка Истины или почему 0 в Lua — это true? Это главная концептуальная ловушка для программистов, переходящих на Lua с языков Си, C++ или Python.<br />В отличие от Си/Python, где 0 — это false, любое другое число — это true. <br />В Lua (всех версий), логическим ложным значением (false) признаются исключительно два ключевых слова: false и nil. Всё остальное, включая число 0, пустую строку &quot;&quot; и пустую таблицу {}, интерпретатором Lua всегда признается истиной (true)!<br /><br />Так как в терминал QUIK v11+ при работе на чистом Lua 5.4.1, встроенная библиотека bit (которая была внешней .dll в старых версиях) является устаревшей. Появилась возможность использовать родные поразрядные Си-операторы Lua 5.4.1, которые работают на уровне процессора и не тратят время на вызовы функций. <br />Собствено на этом можно и закончить. Хотя про это много уже писалось повторюсь. Вот золотой стандарт проверки флагов, который гарантирует отсутствие ложных срабатываний (как памятка):<br /><br />Вариант 1. Проверка через родной оператор Lua 5.4.1 (&amp;) — Рекомендуемый HFT-выбор. Оператор &amp; (побитовое И) возвращает значение маски (например, 4) или 0. Проверяем строго через ~= 0:<br />-- Проверяем Бит №2 заявки/сделки (маска 2^2 = 4, то есть 0x4)<br />-- На Мосбирже: flags &amp; 0x4 ~= 0 означает &quot;Сделка на ПРОДАЖУ&quot;<br />local is_sell = (flags &amp; 0x4) ~= 0 <br />if is_sell then<br /> &nbsp; &nbsp;-- Блок выполнится строго если бит присутствует (результат операции равен 4)<br />end<br /><br />Вариант 2. Проверка через встроенную функцию bit.test в старых скриптах. Если используете функцию bit.test, она сама под капотом делает сравнение и возвращает чистый булев тип (true или false). Здесь оператор ~= 0 не нужен:<br />-- В функцию передается не маска, а чистый НОМЕР БИТА (начиная с 0)<br />local is_sell = bit.test(flags, 2) -- Возвращает true или false<br />if is_sell then<br /> &nbsp; &nbsp;-- Код безопасен, так как is_sell — это честный boolean<br />end<br />=============<br />поясню почему в луа все значения true кроме nil, &nbsp;<br />Это связано с тем что все данные в луа содержат в неявном виде свой тип <br /> Поэтому &nbsp;если значение типа не равно нулю то это true а если равно нулю то это false &nbsp;<br />У nil значение типа равно нулю.<br />--------------------------------------<br /><B>Утверждение :</B><br />&quot;Появилась возможность использовать родные поразрядные Си-операторы Lua 5.4.1, которые работают на уровне процессора и не тратят время на вызовы функций.&quot; &nbsp;<B> ошибочно.</B><br />Так как значения переменных это не значения СИ а структуры, то для применения бинарных операций &nbsp;вызываются &nbsp;функции в соответствии с сохраненным типом переменных.<br />Поэтому бинарные логические и сдвиговые операции на символьном уровне записываются как в СИ но на уровне исполнения это вызов функций. <br />---------------------------------- &nbsp; <br />
			<i>30.10.2026 09:42:02, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message83306/topic9400/</link>
			<guid>http://forum.quik.ru/messages/forum10/message83306/topic9400/</guid>
			<pubDate>Fri, 30 Oct 2026 09:42:02 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Описание полей в методе on_trans_reply</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message83305/topic9400/">Описание полей в методе on_trans_reply</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Поскольку поддержка отмалчивается, проведу разбор самостоятельно, для себя и таких как я (хотя и слабо разбираюсь в этом), а что делать?<br /><br />1. Опечатка в тексте руководства ARQA Technologies очевидна, авторы справки перепутали номера битов и шестнадцатеричные (HEX) маски. Авторы опечатались в HEX-записи. Они хотели написать бит 20 (маска 0x100000) и бит 21 (маска 0x200000). Но почему то написали 0x21 и 0x22? <br />Видимо механически скопировали номера битов, забыв перевести их в степени двойки и ошибочно записав номера битов 20 и 21 как 0x20 / 0x21, а затем сдвинули индексы? <br /><B>Доверять HEX-значениям 0x21 и 0x22 из этой справки нельзя — они полностью неверны.</B><br /><br />2. Ловушка Истины или почему 0 в Lua — это true? Это главная концептуальная ловушка для программистов, переходящих на Lua с языков Си, C++ или Python.<br />В отличие от Си/Python, где 0 — это false, любое другое число — это true. <br />В Lua (всех версий), логическим ложным значением (false) признаются исключительно два ключевых слова: false и nil. Всё остальное, включая число 0, пустую строку "" и пустую таблицу {}, интерпретатором Lua всегда признается истиной (true)!<br /><br />Так как в терминал QUIK v11+ при работе на чистом Lua 5.4.1, встроенная библиотека bit (которая была внешней .dll в старых версиях) является устаревшей. Появилась возможность использовать родные поразрядные Си-операторы Lua 5.4.1, которые работают на уровне процессора и не тратят время на вызовы функций. <br />Собствено на этом можно и закончить. Хотя про это много уже писалось повторюсь. Вот золотой стандарт проверки флагов, который гарантирует отсутствие ложных срабатываний (как памятка):<br /><br />Вариант 1. Проверка через родной оператор Lua 5.4.1 (&) — Рекомендуемый HFT-выбор. Оператор & (побитовое И) возвращает значение маски (например, 4) или 0. Проверяем строго через ~= 0:<br />-- Проверяем Бит №2 заявки/сделки (маска 2^2 = 4, то есть 0x4)<br />-- На Мосбирже: flags & 0x4 ~= 0 означает "Сделка на ПРОДАЖУ"<br />local is_sell = (flags & 0x4) ~= 0 <br />if is_sell then<br /> &nbsp; &nbsp;-- Блок выполнится строго если бит присутствует (результат операции равен 4)<br />end<br /><br />Вариант 2. Проверка через встроенную функцию bit.test в старых скриптах. Если используете функцию bit.test, она сама под капотом делает сравнение и возвращает чистый булев тип (true или false). Здесь оператор ~= 0 не нужен:<br />-- В функцию передается не маска, а чистый НОМЕР БИТА (начиная с 0)<br />local is_sell = bit.test(flags, 2) -- Возвращает true или false<br />if is_sell then<br /> &nbsp; &nbsp;-- Код безопасен, так как is_sell — это честный boolean<br />end <br />
			<i>30.10.2026 09:17:35, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message83305/topic9400/</link>
			<guid>http://forum.quik.ru/messages/forum10/message83305/topic9400/</guid>
			<pubDate>Fri, 30 Oct 2026 09:17:35 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Описание полей в методе on_trans_reply</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message83302/topic9400/">Описание полей в методе on_trans_reply</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Похоже опять несоответствие в справке?<br /><br />Для флагов транзакций напечатано &quot;бит 20 (0x21) и бит 21 (0x22)&quot;. <br /><br />Математические маски битов 20 и 21 — 0x100000 и 0x200000; <br />по самой справке нельзя однозначно установить, где именно опечатка?<br /><br />справка QLua - версия руководства 13.1;<br /><br /><br />И еще одно. Как проверять флаг? Для корректного целого flags заявки или собственной сделки:<br /><br />
====code====
<pre>local is_sell = bit.test(flags, 2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- 2: номер бита
local is_sell_54 = (flags &#38; 0x4) ~= 0&nbsp;&nbsp; -- 0x4: маска, Lua 5.4.1</pre>
=============
<br /><br />bit.band(flags, 0x4) возвращает 0 или 4, а не 0 или 1. <br />Проверять нужно через ~= 0. Кроме того, в Lua число 0 считается истинным, поэтому if bit.band(...) then — опасная проверка. <br />Почему Так? <br />
			<i>27.10.2026 16:27:27, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message83302/topic9400/</link>
			<guid>http://forum.quik.ru/messages/forum10/message83302/topic9400/</guid>
			<pubDate>Tue, 27 Oct 2026 16:27:27 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Описание полей в методе on_trans_reply</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message80669/topic9400/">Описание полей в методе on_trans_reply</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Похоже, документация не соответствует реальности. Во-первых, что за странные цифры в скобках - (0x21) и (0x22)?<br />А во-вторых, я записывал в лог значения полей в OnTransReply, и в flags вижу такие значения:<br />0x260001 - при выставлении заявки на продажу.<br />0x240001 - при выставлении заявки на покупку и снятии любой заявки.<br />Отличаются они в 22 бите. Но установлен этот бит только при выставлении заявки на продажу, не на покупку. <br />
			<i>25.12.2025 08:55:03, paluke.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message80669/topic9400/</link>
			<guid>http://forum.quik.ru/messages/forum10/message80669/topic9400/</guid>
			<pubDate>Thu, 25 Dec 2025 08:55:03 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Описание полей в методе on_trans_reply</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message80606/topic9400/">Описание полей в методе on_trans_reply</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день. <br /><br />Параметр <B>flags </B>для функции onTransReply содержит следующие значения:<br />- бит 20 (0x21) Служебная транзакция<br />- бит 21 (0x22) Транзакция на выставление заявки<br /><br />Параметр <B>canceled_uid </B>для функции onOrder содержит идентификатор пользователя, снявшего заявку.<br /><br />Все параметры и их описания вы сможете найти в мануале <noindex><a href="https://arqatech.com/upload/iblock/114/quik_lua.zip" target="_blank" rel="nofollow">Интерпретатор языка Lua</a></noindex> (ссылка кликабельна). <br />
			<i>22.12.2025 18:07:02, Oleg Kuzembaev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message80606/topic9400/</link>
			<guid>http://forum.quik.ru/messages/forum10/message80606/topic9400/</guid>
			<pubDate>Mon, 22 Dec 2025 18:07:02 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Описание полей в методе on_trans_reply</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message80604/topic9400/">Описание полей в методе on_trans_reply</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Когда снимаю заявку на срочном рынке (да и на фондовом), мне прилетает сообщение в callback on_trans_reply. В нем есть поле flags, смысл которого мне непонятен и документации я что то не нашел. Также есть поле cancalled_uid, которое всегда одно и то же. В чем его смысл? Оно прилетает в on_order <br />
			<i>22.12.2025 17:20:45, Андрей Кусков.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message80604/topic9400/</link>
			<guid>http://forum.quik.ru/messages/forum10/message80604/topic9400/</guid>
			<pubDate>Mon, 22 Dec 2025 17:20:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
