<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: 7 часов, кто больше?]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме 7 часов, кто больше? форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sat, 02 May 2026 14:09:09 +0300</pubDate>
		<item>
			<title>7 часов, кто больше?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64744/topic7532/">7 часов, кто больше?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_RY6rUEp8" href="/user/807/" bx-tooltip-user-id="807">Павел Bosco</a>, И что? Подтверждаю каждую запятую в своих текстах - в т.ч. двухлетней давности. Что сказать-то хотели? И я никогда НЕ спрашивал, зачем собственно нужен sleep - я спрашивал ЧО ВАЩЕ ЗДЕСЬ ТВАРИЦЦА?! <br />
			<i>01.08.2022 18:58:48, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64744/topic7532/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64744/topic7532/</guid>
			<pubDate>Mon, 01 Aug 2022 18:58:48 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>7 часов, кто больше?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64743/topic7532/">7 часов, кто больше?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			чтоб не искать - <br />2 года назад<br /><noindex><a href="https://forum.quik.ru/messages/forum10/message49035/topic5852/#message49035" target="_blank" rel="nofollow">https://forum.quik.ru/messages/forum10/message49035/topic5852/#message49035</a></noindex><br />(ответ - в примере прямо над вопросом!)<br /><br />в этом году<br /><noindex><a href="https://forum.quik.ru/messages/forum10/message64731/topic5823/#message64731" target="_blank" rel="nofollow">https://forum.quik.ru/messages/forum10/message64731/topic5823/#message64731</a></noindex> <br />
			<i>01.08.2022 18:35:36, Павел Bosco.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64743/topic7532/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64743/topic7532/</guid>
			<pubDate>Mon, 01 Aug 2022 18:35:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>7 часов, кто больше?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64741/topic7532/">7 часов, кто больше?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			два года назад вы спрашивали<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_imlUasco" href="/user/14299/" bx-tooltip-user-id="14299">Владимир</a> написал:<br />Господа, объясните мне, дураку, на кой вам всё это надо? Торговля на бирже - процесс медленный, вдумчивый, процессы длятся месяцами, даже годами, и потому задержка на минуту, час, день, неделю существенно на результат не влияет. Вы что, делаете сотни и тысячи сделок в час? Но ведь даже в этом случае времени просто ВАГОН! Одно ядро, два, десять, тысяча, C или Lua - ну какая разница?! Не понимаю...<br />=============<br /><br />в посте где было объяснение, зачем собственно нужен sleep<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_9kwHPeXn" href="/user/14299/" bx-tooltip-user-id="14299">Владимир</a> написал:<br />Поставил туда sleep(1) и - О, ЧУДО!<br />...<br />ЧО ВАЩЕ ЗДЕСЬ ТВАРИЦЦА?!<br />=============<br /><br />но прошло ещё пару дней, и снова на ту же тему<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_8Q0mGnY4" href="/user/14299/" bx-tooltip-user-id="14299">Владимир</a> написал:<br />Нафига вам всё это нужно, господа? Я потратил недели две, чтобы вынести всё, что можно, в поток main и уже практически забыл про вылеты скрипта или отвисания Квика. Не говоря уже о том, что я буквально с первого же дня постулировал: никаких библиотек, никаких других языков - скрипт должен работать на любой версии Квика и любой версии языка. И никаких стаканов, никаких свечей, никаких графиков, никаких сокетов. А все вопросы синхронизации/блокировки выполняются самим скриптом, у которого для этого заведены соответствующие стеки и флаги. Ведь наша задача - получить рабочую версию торговой программы, а не вести бесконечную борьбу с глюками всех мастей и размеров.<br />=============<br /><br />то есть понимание за два года и явное столкновение с проблемой так и не пришло. <br />
			<i>01.08.2022 18:30:52, Павел Bosco.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64741/topic7532/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64741/topic7532/</guid>
			<pubDate>Mon, 01 Aug 2022 18:30:52 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>7 часов, кто больше?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64715/topic7532/">7 часов, кто больше?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			О, сколько нам открытий чудных!..<br /><br />Сегодня попробовал прогнать алгоритм по историческим данным - не работает. С чего бы вдруг? Всегда работал, и вот опять. И изменения в коде были вроде как косметические. Причём внешне делает вид, что работает, но считав первые 70 строк из файла данных, остальные читать не хочет (их там порядка 6 миллионов). Чем занимается - непонятно. Стал разбираться - глаза на лоб: локальная переменная в main портится! Та самая, которая внутри бесконечного цикла крутится. Она у меня изменяется от 1 до 8 и управляет вызовом обработчиков. Для балансировки нагрузки на процессор обработчики вызываются со сдвигом: 4 раза в секунду – обработчик стека прерываний. Каждое нечётное срабатывание (2 раза в секунду) – обработчик стека заявок, каждое второе и шестое – секундный (не пересекаясь с 0.5-секундным), каждое восьмое – 2-секундный (не пересекаясь ни с секундным ни с 0.5-секундным). Всё это тыщу лет как отлажено и всегда работало без нареканий. Отключил все модули - работает. Стал подключать по одному - затыкается. И память вдруг стала жрать со страшной силой, раз в 10 больше, чем обычно. Стал выводить значение счётчика - ОБА-НА!
====code====
<pre>1213456178121345617812134
RUR: 0.00+50000.00=50000.00/0.00 V=50000.00
USD: 0.00+0.00=0.00/0.00 V=0.00
EUR: 0.00+0.00=0.00/0.00 V=0.00
FUT: 0.00+20000.00=20000.00/0.00 V=20000.00
RES: 0.00+0.00=0.00/0.00 V=0.00
</pre>
=============
Отрубил всё к чертям собачьим, даже обнуление счётчика, и тут меня ожидал удар ниже пояса:
====code====
<pre>277995
277996
RUR: 0.00+50000.00=50000.00/0.00 V=50000.00
277997
277998
277999
278000
USD: 0.00+0.00=0.00/0.00 V=0.00
278001
278002
EUR: 0.00+0.00=0.00/0.00 V=0.00
278003
278004
278005
278006
FUT: 0.00+20000.00=20000.00/0.00 V=20000.00
278007
278008
278009
RES: 0.00+0.00=0.00/0.00 V=0.00
278010
278011
</pre>
=============
Или, если оставить обнуление и только его:
====code====
<pre>123456781
RUR: 0.00+50000.00=50000.00/0.00 V=50000.00
234
USD: 0.00+0.00=0.00/0.00 V=0.00
5678
EUR: 0.00+0.00=0.00/0.00 V=0.00
12345
FUT: 0.00+20000.00=20000.00/0.00 V=20000.00
6781
RES: 0.00+0.00=0.00/0.00 V=0.00
2
</pre>
=============
Теперь поясняю, что это значит: по OnStop у меня сбрасывается на диск дамп состояния портфеля и в лог выводится состояние кошелька по каждой валюте - вот это самое, что мы видим. Выводится, повторяю, В КОЛЛБЕКЕ: function OnStop()local i;for i=0,4 do F:write(string.format(&quot;%s: %1.2f+%1.2f=... А значение счётчика выводится В МЕЙНЕ! Получается, что OnStop в цикле между своими F:write отдаёт управление в main, а потом каким-то образом снова захватывает его себе или как? У меня просто крыша едет, в голове не укладывается, как вообще может такое происходить.<br /><br />И тут меня осенило: в боевом режиме в цикле мейна стоит sleep(250), а при работе по историческим данным этой задержки нет (в результате чего двухмесячный тиковый массив пролетает за пару минут). Поставил туда sleep(1) и - О, ЧУДО!
====code====
<pre>1234567812345
RUR: 0.00+50000.00=50000.00/0.00 V=50000.00
USD: 0.00+0.00=0.00/0.00 V=0.00
EUR: 0.00+0.00=0.00/0.00 V=0.00
FUT: 0.00+20000.00=20000.00/0.00 V=20000.00
RES: 0.00+0.00=0.00/0.00 V=0.00
</pre>
=============
Версия Квика СТАРАЯ, много раз по историческим данным работала, в Интернет вообще не входил, биржа не работает. Кто-нить может подсказать, ЧО ВАЩЕ ЗДЕСЬ ТВАРИЦЦА?! <br />
			<i>31.07.2022 12:25:15, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64715/topic7532/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64715/topic7532/</guid>
			<pubDate>Sun, 31 Jul 2022 12:25:15 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>7 часов, кто больше?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64707/topic7532/">7 часов, кто больше?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_krfGbt3h" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a>, Я уже писал &quot;зачем так усердно бороться с колбеками&quot; и что не проще и не надежней &quot;самому обрабатывать записи в таблице trades&quot; - ошибки встречаются и там и там. Кстати, последний колбек, который пришёл через 7 часов, был именно &quot;после восстановления соединения с брокером&quot; вместе с несколькими десятками других. Здесь В ПРИНЦИПЕ нет предсказуемого поведения - четверть, если не треть кода моего скрипта посвящена компенсации разных глюков, и это вечный процесс - новые версии Квика штампуются как горячие пирожки. И Вы далеко не всегда сможете &quot;по старинке найти новую запись в таблице&quot;. Как правило - да, но и коллбеки, как правило, приходят с верными данными, и работать с ними несравненно удобнее, быстрее и даже надёжнее, чем рыскать по таблицам Квика. <br />
			<i>30.07.2022 15:53:11, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64707/topic7532/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64707/topic7532/</guid>
			<pubDate>Sat, 30 Jul 2022 15:53:11 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>7 часов, кто больше?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64706/topic7532/">7 часов, кто больше?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Зачем так усердно бороться с колбеками, когда проще и, главное, надежней самому обрабатывать записи в таблице trades. Хотя, возможно, каждый должен пройти этот путь сам. Мне хватило одного раза, в самом начале, получив все колбеки за день, после восстановления соединения с брокером.<br /><br />Технология Event-Driven, Asynchronous Callbacks хороша, когда поведение предсказуемо. А когда нет, то я уже как-нибудь сам, по старинке, найду новую запись в таблице. <br />
			<i>30.07.2022 15:25:07, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64706/topic7532/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64706/topic7532/</guid>
			<pubDate>Sat, 30 Jul 2022 15:25:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>7 часов, кто больше?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message64705/topic7532/">7 часов, кто больше?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Фрагмент лога от 28 июля:
====code====
<pre>10:15:01&nbsp;&nbsp;&nbsp;Заявка на продажу TID=43851120
10:15:02&nbsp;&nbsp;&nbsp;Продажа по заявке TID=43851120
10:15:03&nbsp;&nbsp;&nbsp;Дубль заявки TID=43851120
10:15:03&nbsp;&nbsp;&nbsp;Дубль заявки TID=43851120
10:15:23&nbsp;&nbsp;&nbsp;Удаляем паспорт заявки TID=43851120
17:26:02&nbsp;&nbsp;&nbsp;Не нашли - левая сделка TID=43851120
</pre>
=============
И это, собственно, ерунда - скрипт информацию о сделке скрипт всё-таки получил, дубли отфильтровал (двумя способами), но портфель и кошелёк изменились так, как надо. А вот потери сделок из-за глюков в данных, получаемых в OnTrade, реально ДОСТАЛИ! Даже специально написанный для компенсации этих глюков нечёткий поиск не всегда помогает! Решил пойти на крайние меры: задублировал ID транзакции ещё и в поле COMMENT, которое рассчитываю получить в коллбеке в поле brokerref. Надеюсь, хоть одно из двух полей хоть в одном из трёх или четырёх прерываниях на одно событие будет всё-таки передано правильно, господа разработчики? <br />
			<i>30.07.2022 14:15:39, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message64705/topic7532/</link>
			<guid>http://forum.quik.ru/messages/forum10/message64705/topic7532/</guid>
			<pubDate>Sat, 30 Jul 2022 14:15:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
