<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Как работать с битовыми флагами?]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Как работать с битовыми флагами? форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Fri, 17 Apr 2026 19:20:57 +0300</pubDate>
		<item>
			<title>Как работать с битовыми флагами?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message68994/topic7861/">Как работать с битовыми флагами?</a></b> <i>Как получить бит из битогового флага?</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_rgNZhPyU" href="/user/15905/" bx-tooltip-user-id="15905">awkozlov</a> написал:<br /> 
====code====
<pre>&nbsp;&nbsp; function&nbsp;&nbsp; CntTradesSellPosition (zCLASSCODE,zSECCODE)
cnt =&nbsp;&nbsp;0 
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;TableName =&nbsp;&nbsp;'trades' 
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;rows_total&nbsp;&nbsp;=&nbsp;&nbsp; getNumberOf (TableName)
&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&nbsp;r = rows_total -&nbsp;&nbsp;1 ,&nbsp;&nbsp;0 ,&nbsp;&nbsp;-&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;do 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;table_row =&nbsp;&nbsp;getItem (TableName,r)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --message(tostring(table_row.flags));stop() 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp;&nbsp;table_row.class_code =&nbsp;&nbsp;= zCLASSCODE&nbsp;&nbsp;and&nbsp;&nbsp;table_row.sec_code =&nbsp;&nbsp;= zSECCODE&nbsp;&nbsp;and&nbsp;&nbsp;table_row.flags =&nbsp;&nbsp;=&nbsp;&nbsp;36&nbsp;&nbsp; then&nbsp;&nbsp; -- сделка продажа 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cnt = cnt +&nbsp;&nbsp;1 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end 
&nbsp;&nbsp;&nbsp;&nbsp;end 
 return&nbsp;&nbsp;cnt
 end&nbsp;&nbsp; </pre>
=============
 <br />Пишу как самоучка, но мне как-то сложно (невозможно) вытаскивать из битовых флагов эти нужные значения, которые там закодированы в двоичной системе.<br />В частности мне нужно определить только тип заявки ордера Buy или Sell.<br /><br />Я так и не нашёл нигде пример алгоритма получения этих битовых значений, поэтому беру 10-тичные числа, но это кривовато, ибо по причине изменения других свойств и числа будут другие.<br />Вот я методом научного тыка определил коды для продаж &nbsp;и второй флаг (бит) принимает разные значения:<br />64 = 1000000<br />36 = 100100<br />28 = 11100<br />1048604 = 100000000000000011100 - Продажа от стоплосса<br /><br />Прошу, измените мой код, чтобы он нормально обрабатывал эти битовые флаги.<br />=============<br /><br />Отвечу, если кому-то еще актуально.<br />Есть отдельный набор функций &quot;Функции для работы с битовыми масками в структурах данных&quot;. В документации по QLUA, обычно идет в комплекте с терминалом.<br />Для проверки статуса/состояния нужного флага, используется функция &quot;<B>BOOLEAN bit.test(NUMBER х, NUMBER n)</B>&quot;. И код приобретает простой вид:<br /><br /><br /><span class="bx-font" style="font-family:quotCourier Newquot">function CntTradesSellPosition(zCLASSCODE,zSECCODE)cnt=0</span><br /><span class="bx-font" style="font-family:quotCourier Newquot"> &nbsp; local TableName=&#39;trades&#39;</span><br /><span class="bx-font" style="font-family:quotCourier Newquot"> &nbsp; local rows_total = getNumberOf(TableName)</span><br /><span class="bx-font" style="font-family:quotCourier Newquot"> &nbsp; for r=rows_total-1, 0, -1 &nbsp;do</span><br /><span class="bx-font" style="font-family:quotCourier Newquot"> &nbsp; &nbsp; &nbsp;local table_row=getItem(TableName,r)</span><br /><span class="bx-font" style="font-family:quotCourier Newquot"> &nbsp; &nbsp; &nbsp;--message(tostring(table_row.flags));stop()</span><br /><span class="bx-font" style="font-family:quotCourier Newquot"> &nbsp; &nbsp; &nbsp;if table_row.class_code==zCLASSCODE and table_row.sec_code==zSECCODE and </span><B><span class="bx-font" style="font-family:quotCourier Newquot"><U>bit.test(table_row.flags, 2)</U></span></B><span class="bx-font" style="font-family:quotCourier Newquot"> then -- сделка продажа</span><br /><span class="bx-font" style="font-family:quotCourier Newquot"> &nbsp; &nbsp; &nbsp; &nbsp; cnt=cnt+1</span><br /><span class="bx-font" style="font-family:quotCourier Newquot"> &nbsp; &nbsp; &nbsp;end</span><br /><span class="bx-font" style="font-family:quotCourier Newquot"> &nbsp; end</span><br /><span class="bx-font" style="font-family:quotCourier Newquot">return cnt</span><br /><span class="bx-font" style="font-family:quotCourier Newquot">end</span> <br />
			<i>07.04.2023 16:35:11, VDV.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message68994/topic7861/</link>
			<guid>http://forum.quik.ru/messages/forum10/message68994/topic7861/</guid>
			<pubDate>Fri, 07 Apr 2023 16:35:11 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как работать с битовыми флагами?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message67853/topic7861/">Как работать с битовыми флагами?</a></b> <i>Как получить бит из битогового флага?</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_GRgCmFOd" href="/user/3226/" bx-tooltip-user-id="3226">Игорь Б</a>, в <noindex><a href="https://lua.org.ru/manual_ru.html" target="_blank" rel="nofollow">документации LUA</a></noindex> сказано:<br />====quote====<br />Библиотека bit32 стала нежелательной. Легко загрузить совместимую внешнюю библиотеку или лучше заменить её функции соответствующими битовыми операторами. (Помните, что bit32 оперирует с 32-битными целыми, а битовые операторы Lua 5.3 оперируют с целыми Lua, которые по умолчанию имеют 64 бита.) <br />=============<br />Так что ваш вариант хоть и рабочий, но использовать его не рекомендуется.<br /><br />У меня, например, проверка происходит примерно так:
====code====
<pre>if(tbl&#91;'flags'&#93;&#62;&#62;2&#38;1==1)then
&nbsp;&nbsp;-- Продажа (бит 2 равен 1)
else
&nbsp;&nbsp;-- Покупка (бит 2 равен 0)
end</pre>
============= <br />
			<i>06.01.2023 18:46:59, BlaZed.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message67853/topic7861/</link>
			<guid>http://forum.quik.ru/messages/forum10/message67853/topic7861/</guid>
			<pubDate>Fri, 06 Jan 2023 18:46:59 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как работать с битовыми флагами?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message67849/topic7861/">Как работать с битовыми флагами?</a></b> <i>Как получить бит из битогового флага?</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_NLpeBp0t" href="/user/15905/" bx-tooltip-user-id="15905">awkozlov</a> написал:<br /> 
====code====
<pre>&nbsp;&nbsp; function&nbsp;&nbsp; CntTradesSellPosition (zCLASSCODE,zSECCODE)
cnt =&nbsp;&nbsp;0 
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;TableName =&nbsp;&nbsp;'trades' 
&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;&nbsp;rows_total&nbsp;&nbsp;=&nbsp;&nbsp; getNumberOf (TableName)
&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&nbsp;r = rows_total -&nbsp;&nbsp;1 ,&nbsp;&nbsp;0 ,&nbsp;&nbsp;-&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;do 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local&nbsp;&nbsp;table_row =&nbsp;&nbsp;getItem (TableName,r)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --message(tostring(table_row.flags));stop() 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp;&nbsp;table_row.class_code =&nbsp;&nbsp;= zCLASSCODE&nbsp;&nbsp;and&nbsp;&nbsp;table_row.sec_code =&nbsp;&nbsp;= zSECCODE&nbsp;&nbsp;and&nbsp;&nbsp;table_row.flags =&nbsp;&nbsp;=&nbsp;&nbsp;36&nbsp;&nbsp; then&nbsp;&nbsp; -- сделка продажа 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cnt = cnt +&nbsp;&nbsp;1 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end 
&nbsp;&nbsp;&nbsp;&nbsp;end 
 return&nbsp;&nbsp;cnt
 end&nbsp;&nbsp; </pre>
=============
 <br />Пишу как самоучка, но мне как-то сложно (невозможно) вытаскивать из битовых флагов эти нужные значения, которые там закодированы в двоичной системе.<br />В частности мне нужно определить только тип заявки ордера Buy или Sell.<br /><br />Я так и не нашёл нигде пример алгоритма получения этих битовых значений, поэтому беру 10-тичные числа, но это кривовато, ибо по причине изменения других свойств и числа будут другие.<br />Вот я методом научного тыка определил коды для продаж &nbsp;и второй флаг (бит) принимает разные значения:<br />64 = 1000000<br />36 = 100100<br />28 = 11100<br />1048604 = 100000000000000011100 - Продажа от стоплосса<br /><br />Прошу, измените мой код, чтобы он нормально обрабатывал эти битовые флаги.<br />=============<br /><br />В документации в скобках указано значение в 16 формате для каждого бита (до 8 это тоже самое что и в 10 формате)<br />если надо несколько бит то складывайте эти значения<br />Флаги для таблиц «Заявки», «Заявки на внебиржевые <br />сделки»<br /><p><span class="bx-font" style="font-size:;"> </span></p><p><span class="bx-font" style="font-size:;"> </span></p><table class="data-table"><tr><th>Флаг установлен</th><th>Значение</th></tr><tr><td>бит 0 (0x1) </td><td>Заявка активна, иначе – не активна </td></tr><tr><td>бит 1 (0x2) </td><td>Заявка снята. Если флаг не установлен и значение бита «0» равно «0», то &nbsp;заявка исполнена </td></tr><tr><td>бит 2 (0x4) </td><td>Заявка на продажу, иначе – на покупку </td></tr><tr><td>бит 3 (0x8) </td><td>Заявка лимитированная, иначе – рыночная </td></tr><tr><td>бит 4 (0x10) </td><td>Исполнить заявку по разным ценам </td></tr><tr><td>бит 5 (0x20) </td><td>Исполнить заявку немедленно или снять (FILL OR KILL) </td></tr><tr><td>бит 6 (0x40) </td><td>Заявка маркет-мейкера. Для адресных заявок – заявка отправлена контрагенту &nbsp;</td></tr><tr><td>бит 7 (0x80) </td><td>Скрытая заявка </td></tr><tr><td>бит 8 (0x100) </td><td>Снять остаток </td></tr><tr><td>бит 9 (0x200) </td><td>Айсберг-заявка </td></tr><tr><td>бит 10 (0x400) </td><td>Заявка отклонена торговой системой </td></tr><tr><td>бит 20 (0x100000) </td><td>Поле «linkedorder» заполняется номером стоп-заявки </td></tr></table><p></p> <br />
			<i>06.01.2023 12:53:29, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message67849/topic7861/</link>
			<guid>http://forum.quik.ru/messages/forum10/message67849/topic7861/</guid>
			<pubDate>Fri, 06 Jan 2023 12:53:29 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как работать с битовыми флагами?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message67848/topic7861/">Как работать с битовыми флагами?</a></b> <i>Как получить бит из битогового флага?</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			if bit.band(table_row.flags,0x4)~=0 then --если заявка на продажу иначе на покупку <br />
			<i>06.01.2023 12:43:36, Игорь Б.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message67848/topic7861/</link>
			<guid>http://forum.quik.ru/messages/forum10/message67848/topic7861/</guid>
			<pubDate>Fri, 06 Jan 2023 12:43:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как работать с битовыми флагами?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message67846/topic7861/">Как работать с битовыми флагами?</a></b> <i>Как получить бит из битогового флага?</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			====code====
<pre>function CntTradesSellPosition(zCLASSCODE,zSECCODE)
cnt=0
&nbsp;&nbsp;&nbsp;local TableName='trades'
&nbsp;&nbsp;&nbsp;local rows_total = getNumberOf(TableName)
&nbsp;&nbsp;&nbsp;for r=rows_total-1, 0, -1&nbsp;&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local table_row=getItem(TableName,r)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--message(tostring(table_row.flags));stop()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if table_row.class_code==zCLASSCODE and table_row.sec_code==zSECCODE and table_row.flags==36 then -- сделка продажа
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt=cnt+1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
return cnt
end</pre>
=============
<br />Пишу как самоучка, но мне как-то сложно (невозможно) вытаскивать из битовых флагов эти нужные значения, которые там закодированы в двоичной системе.<br />В частности мне нужно определить только тип заявки ордера Buy или Sell.<br /><br />Я так и не нашёл нигде пример алгоритма получения этих битовых значений, поэтому беру 10-тичные числа, но это кривовато, ибо по причине изменения других свойств и числа будут другие.<br />Вот я методом научного тыка определил коды для продаж &nbsp;и второй флаг (бит) принимает разные значения:<br />64 = 1000000<br />36 = 100100<br />28 = 11100<br />1048604 = 100000000000000011100 - Продажа от стоплосса<br /><br />Прошу, измените мой код, чтобы он нормально обрабатывал эти битовые флаги. <br />
			<i>06.01.2023 11:26:40, awkozlov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message67846/topic7861/</link>
			<guid>http://forum.quik.ru/messages/forum10/message67846/topic7861/</guid>
			<pubDate>Fri, 06 Jan 2023 11:26:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
