<?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>Sat, 02 May 2026 16:53:54 +0300</pubDate>
		<item>
			<title>Ошибка при чтении стакана</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message29081/topic3372/">Ошибка при чтении стакана</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_F31yFRzl" href="/user/9815/" bx-tooltip-user-id="9815">kroki</a> написал:<br /><br />====quote====<br /> _sk_ &nbsp; написал:<br />А зачем Вам &quot;дальний край&quot; стакана value.tbl.bid&#91;indexBid&#93;.price ? Обычно value.tbl.bid&#91;1&#93;.price более важное значение.<br />=============<br />Это место как раз правильное. &nbsp;Стакан тупо упорядочен по цене, об удобстве никто не думал, поэтому лучшее предложение в начале массива offer (наименьшая цена), а лучший спрос - в конце массива bid (наибольшая цена).<br />=============<br /><br />Спасибо <a class="blog-p-user-name" id="bp_GMbxypXo" href="/user/9815/" bx-tooltip-user-id="9815">kroki</a> , Вы совершенно верно описали мой резон. Замечание ваше перепроверю на практике. <br />Я обнаруживал забавное явление. Моя программа дважды в секунду считывает стакан и ведет подсчет неудачных попыток считывания. Я обнаружил, что даже на ликвидных акциях приблизительно в одном случае из двухста попытка считать стакан оказывается неудачной, точнее приходят пустые данные. В любых ситуациях, даже при широком канале. Интересно, с чем это связано? <br />
			<i>12.02.2018 02:30:22, Иван Ру.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message29081/topic3372/</link>
			<guid>http://forum.quik.ru/messages/forum10/message29081/topic3372/</guid>
			<pubDate>Mon, 12 Feb 2018 02:30:22 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при чтении стакана</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message29039/topic3372/">Ошибка при чтении стакана</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_w4HmMtUl" href="/user/115/" bx-tooltip-user-id="115">_sk_</a> написал:<br />А зачем Вам &quot;дальний край&quot; стакана value.tbl.bid&#91;indexBid&#93;.price ? Обычно value.tbl.bid&#91;1&#93;.price более важное значение.<br />=============<br />Это место как раз правильное. &nbsp;Стакан тупо упорядочен по цене, об удобстве никто не думал, поэтому лучшее предложение в начале массива offer (наименьшая цена), а лучший спрос - в конце массива bid (наибольшая цена). <br />
			<i>07.02.2018 19:58:27, kroki.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message29039/topic3372/</link>
			<guid>http://forum.quik.ru/messages/forum10/message29039/topic3372/</guid>
			<pubDate>Wed, 07 Feb 2018 19:58:27 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при чтении стакана</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message29036/topic3372/">Ошибка при чтении стакана</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В документации есть нюанс, в который трудно поверить, но тем не менее работает именно так, как написано. &nbsp;Читаем внимательно про <B>getQuoteLevel2()</B>:<br /><br />====quote====<br />При отсутствии и спроса и предложения функция возвращает таблицу без параметров bid и offer.<br /><br />=============<br />Имеется ввиду, что нет ни спроса, ни предложения. &nbsp;Буквально. &nbsp;Если же предложение есть, а спроса нет, то:<br />====quote====<br />bid_count &nbsp;STRING &nbsp;Количество котировок покупки. <B>При отсутствии спроса возвращается значение «0»</B><br /><br />=============<br />и<br />====quote====<br />bid &nbsp;TABLE &nbsp;Котировки спроса (покупки). <B>При отсутствии спроса возвращается пустая строка</B><br /><br />=============<br />Внезапно!<br /><br />В вашем случа видимо происходит следующее (кстати, <B>Subscribe_Level_II_Quotes()</B> можно и нужно делать только один раз, а ни при каждом вызове):
====code====
<pre>if indexBid ~= nil then&nbsp;&nbsp;-- 0 ~= nil - истина
&nbsp;&nbsp; if value.tbl.bid then&nbsp;&nbsp;-- пустая строка в Lua это истина
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bidPrice = tonumber(value.tbl.bid&#91;indexBid&#93;.price)&nbsp;&nbsp;-- пытаемся индексировать не таблицу, а строку - ошибка </pre>
============= <br />
			<i>07.02.2018 19:40:12, kroki.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message29036/topic3372/</link>
			<guid>http://forum.quik.ru/messages/forum10/message29036/topic3372/</guid>
			<pubDate>Wed, 07 Feb 2018 19:40:12 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при чтении стакана</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message29029/topic3372/">Ошибка при чтении стакана</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Ещё (у меня очень редко) бывает, что терминал глючит и тогда корректный lua-код начинает работать некорректно. Ощущение, что при долгой или интенсивной работе терминала изредка происходят какие-то внутренние ошибки, после чего ссылки на некоторые функции и поля таблиц портятся. Чтобы этого избежать, перезапускаю терминал раз в 2-3 дня.<br /><br />Надеюсь, что в Вашем случае это, всё-таки, ошибка программиста, и можно это исправить. Попробуйте переписать код так, чтобы не было вот таких фрагментов:
====code====
<pre>value.tbl.bid&#91;indexBid&#93;.price</pre>
=============
а были примерно такие:
====code====
<pre>local tbl = value.tbl
local bids = tbl.bid
local price = bids&#91;indexBid&#93;.price
</pre>
=============
Это позволит локализовать ошибку и избавит от многократных обращений к таблицам (см. повторяющиеся фрагменты типа value.tbl.bid, это, к тому же, замедляет код).<br /><br />Также, если indexBid равен 0 или nil, то стакан частично или полностью пустой.<br /><br />А зачем Вам &quot;дальний край&quot; стакана value.tbl.bid&#91;indexBid&#93;.price ? Обычно value.tbl.bid&#91;1&#93;.price более важное значение. <br />
			<i>07.02.2018 14:38:00, _sk_.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message29029/topic3372/</link>
			<guid>http://forum.quik.ru/messages/forum10/message29029/topic3372/</guid>
			<pubDate>Wed, 07 Feb 2018 14:38:00 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при чтении стакана</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message29025/topic3372/">Ошибка при чтении стакана</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_XLnSL5Qj" href="/user/1833/" bx-tooltip-user-id="1833">vgi</a> написал:<br />Может так?<br /><br />if value and value.tbl and value.tbl.bid and value.tbl.bid&#91;indexBid&#93; then<br /> &nbsp; &nbsp; bidPrice = tonumber(value.tbl.bid&#91;indexBid&#93;.price) <br />end<br /><br />После этого bidPrice будет либо числом либо nil.<br />=============<br />Пробовал, все-равно ошибка периодически проскакивает. Все-таки хочу понять - как ее обрабатывать, чтобы скрипт не падал, буду изучать ссылку приведенную выше. &nbsp; <br />
			<i>07.02.2018 10:54:24, Иван Ру.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message29025/topic3372/</link>
			<guid>http://forum.quik.ru/messages/forum10/message29025/topic3372/</guid>
			<pubDate>Wed, 07 Feb 2018 10:54:24 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при чтении стакана</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message29020/topic3372/">Ошибка при чтении стакана</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Может так?<br /><br />if value and value.tbl and value.tbl.bid and value.tbl.bid[indexBid] then<br /> &nbsp; &nbsp; bidPrice = tonumber(value.tbl.bid[indexBid].price) <br />end<br /><br />После этого bidPrice будет либо числом либо nil. <br />
			<i>07.02.2018 08:42:26, vgi.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message29020/topic3372/</link>
			<guid>http://forum.quik.ru/messages/forum10/message29020/topic3372/</guid>
			<pubDate>Wed, 07 Feb 2018 08:42:26 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при чтении стакана</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message29018/topic3372/">Ошибка при чтении стакана</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В lua есть 2 функции, pcall и xpcall, для перехвата ошибок, которые могут возникнуть при исполнении кода. Посмотрите в документации к языку lua. Например, здесь <noindex><a href="http://www.lua.ru/doc/5.1.html" target="_blank" rel="nofollow">http://www.lua.ru/doc/5.1.html</a></noindex> даётся описание обеих этих функций. <br />
			<i>07.02.2018 06:40:37, _sk_.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message29018/topic3372/</link>
			<guid>http://forum.quik.ru/messages/forum10/message29018/topic3372/</guid>
			<pubDate>Wed, 07 Feb 2018 06:40:37 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка при чтении стакана</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message29015/topic3372/">Ошибка при чтении стакана</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В последнее время в робот периодически выдает ошибку чтения стакана и падаете.<br />Не может прочитать поле price вот в таком коде (ошибка &quot;attempt to index field &amp;&quot; &nbsp;в строках bidPrice = ... ; offerPrice = ...). Не спрашиваю как ее избежать, как ее обработать чтобы скрипт не падал? Как видите опробовал уже и разные проверочные условия, почему-то все-равно проскакивает...<br /><br /><br />function bidoffCalc(value) -- value -- таблица-объект с данными об инструменте, включая ссылку на базовый актив и его параметры (tShares.value)<br /> Subscribe_Level_II_Quotes(value.cod, value.sec)<br /> value.tbl = &nbsp;getQuoteLevel2(value.cod, value.sec)	--считываем стакан	<br />	-- расчитываем bid ask<br /> local indexBid = tonumber(value.tbl.bid_count);<br /> local indexAsk = tonumber(value.tbl.offer_count);<br /> local bidPrice = 0 <br /> local offerPrice = 0 <br /> &nbsp;if indexBid ~= nil then<br /> &nbsp; if value.tbl.bid then<br /> &nbsp; &nbsp;bidPrice = tonumber(value.tbl.bid&#91;indexBid&#93;.price) &nbsp;-- !!!!!!!!!!! где-то здесь появляться ссылка на несуществующую переменную выпадает ошибка attemp to index<br /> &nbsp; end<br /> &nbsp;end<br />	if indexAsk ~= nil then <br /> if value.tbl.offer then -- если существует соответствующее значение<br /> &nbsp; offerPrice = tonumber(value.tbl.offer&#91;1&#93;.price) <br /> &nbsp;end<br /> end		<br /> return bidPrice, offerPrice -- NUMBER		<br />end <br />
			<i>06.02.2018 20:28:19, Иван Ру.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message29015/topic3372/</link>
			<guid>http://forum.quik.ru/messages/forum10/message29015/topic3372/</guid>
			<pubDate>Tue, 06 Feb 2018 20:28:19 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
