<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: OnMoneyLimit шлет четыре события вместо одного]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме OnMoneyLimit шлет четыре события вместо одного форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sun, 19 Apr 2026 04:50:18 +0300</pubDate>
		<item>
			<title>OnMoneyLimit шлет четыре события вместо одного</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message28193/topic3224/">OnMoneyLimit шлет четыре события вместо одного</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день.<br /><br />Сообщаем информацию по поводу OnMoneyLimit. <br /><br />Да, проблема обнаружена. К сожалению, мы не можем предложить временного решения этой<br /> &nbsp; &nbsp; &nbsp;ошибки, но постараемся устранить ее в одной из ближайших версий<br /> &nbsp; &nbsp; &nbsp;серверного ПО QUIK. <br />
			<i>14.12.2017 09:27:08, Egor Zaytsev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message28193/topic3224/</link>
			<guid>http://forum.quik.ru/messages/forum10/message28193/topic3224/</guid>
			<pubDate>Thu, 14 Dec 2017 09:27:08 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>OnMoneyLimit шлет четыре события вместо одного</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27800/topic3224/">OnMoneyLimit шлет четыре события вместо одного</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Ясно. По OnOrder и OnTrade я фиксирую, что абсолютно одинаковые сообщения могут приходить. <br />
			<i>20.11.2017 11:44:30, electron.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27800/topic3224/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27800/topic3224/</guid>
			<pubDate>Mon, 20 Nov 2017 11:44:30 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>OnMoneyLimit шлет четыре события вместо одного</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27798/topic3224/">OnMoneyLimit шлет четыре события вместо одного</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день.<br /><br />По поводу onTrade и OnOrder на форуме уже вопрос обсуждался. <br /><br />Например по OnOrder,вызывается не только кода заявка приезжает, но и при любых<br />других изменениях относящихся к заявке. Речь не только про изменения<br />видимых параметров, есть еще и служебные параметры. Например, в<br />ситуации когда ответ на транзакцию приезжает позже тела транзакции.<br /><br />Более подробно по ссылкам: <noindex><a href="https://forum.quik.ru/messages/forum10/message24910/topic2839/#message24910" target="_blank" rel="nofollow">https://forum.quik.ru/messages/forum10/message24910/topic2839/#message24910</a></noindex><br /><br />С вопросом по OnMoneyLimit разбираемся, в ближайшее время постараемся дать ответ. <br />
			<i>20.11.2017 10:11:27, Egor Zaytsev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27798/topic3224/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27798/topic3224/</guid>
			<pubDate>Mon, 20 Nov 2017 10:11:27 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>OnMoneyLimit шлет четыре события вместо одного</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27787/topic3224/">OnMoneyLimit шлет четыре события вместо одного</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Егор, по-видимому, проблема шире.<br />Событий от OnTrade и OnOrder приходят дважды. Взять к примеру OnTrade - по документации он должен приходить при изменении параметров сделки. Но вот скрипт - <br />
====code====
<pre>function table.val_to_str ( v )
&nbsp;&nbsp;&nbsp;&nbsp;if "string" == type( v ) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v = string.gsub( v, "&#92;n", "&#92;&#92;n" )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if string.match( string.gsub(v,"&#91;^'&#92;"&#93;",""), '^"+$' ) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return "'" .. v .. "'"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return '"' .. string.gsub(v,'"', '&#92;&#92;"' ) .. '"'
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return "table" == type( v ) and table.tostring( v ) or
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tostring( v )
&nbsp;&nbsp;&nbsp;&nbsp;end
end

function table.key_to_str ( k )
&nbsp;&nbsp;&nbsp;&nbsp;if "string" == type( k ) and string.match( k, "^&#91;_%a&#93;&#91;_%a%d&#93;*$" ) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return k
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return "&#91;" .. table.val_to_str( k ) .. "&#93;"
&nbsp;&nbsp;&nbsp;&nbsp;end
end

function table.tostring( tbl )
&nbsp;&nbsp;&nbsp;&nbsp;local result, done = {}, {}
&nbsp;&nbsp;&nbsp;&nbsp;for k, v in ipairs( tbl ) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.ins ert( result, table.val_to_str( v ) )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done&#91; k &#93; = true
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;for k, v in pairs( tbl ) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if not done&#91; k &#93; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.ins ert( result,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.key_to_str( k ) .. "=" .. table.val_to_str( v ) )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return "{" .. table.concat( result, "," ) .. "}"
end

function OnTrade(te)
&nbsp;&nbsp;&nbsp;&nbsp;PrintDbgStr("new trade: "..table.tostring(te))
end

function OnOrder(oe)
&nbsp;&nbsp;&nbsp;&nbsp;PrintDbgStr("new order: " .. table.tostring(oe))
end

function main()
&nbsp;&nbsp;&nbsp;&nbsp;while true do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(1000)
&nbsp;&nbsp;&nbsp;&nbsp;end
end</pre>
=============
<br />Посылаю заявку в терминале на покупку одного лота - исполняется в одну сделку. Но в логах:<br />
====code====
<pre>&#91;2932&#93; new trade: {price=131.9,settle_date=0,trade_num=2367642180,lower_discount=0,exchange_comission=0,value=1319,qty=1,reporate=0,clearing_bank_accid="",class_code="QJSIM",userid="NC0011100000",tradenum=2367642180,flags=0,canceled_datetime={week_day=1,hour=0,ms=0,mcs=0,day=1,month=1,sec=0,year=1601,min=0},datetime={week_day=6,hour=1,ms=0,mcs=0,day=18,month=11,sec=22,year=2017,min=5},clearing_firmid="",kind=1,canceled_uid=0,ordernum=3456591012,sec_code="SBER",system_ref="",block_securities=0,repoterm=0,broker_comission=0,period=1,client_code="11309",linked_trade=0,firmid="NC0011100000",account="NL0011100043",yield=0,seccode="SBER",trans_id=0,upper_discount=0,repo2value=0,start_discount=0,tech_center_comission=0,trade_currency="SUR",accrued2=0,order_num=3456591012,repovalue=0,exchange_code="",accruedint=0,settle_currency="",cpfirmid="",uid=116882,brokerref="11309/",station_id="",price2=0,clearing_comission=0,settlecode="",bank_acc_id=""}
&#91;2932&#93; new trade: {price=131.9,settle_date=0,trade_num=2367642180,lower_discount=0,exchange_comission=0,value=1319,qty=1,reporate=0,clearing_bank_accid="",class_code="QJSIM",userid="NC0011100000",tradenum=2367642180,flags=0,canceled_datetime={week_day=1,hour=0,ms=0,mcs=0,day=1,month=1,sec=0,year=1601,min=0},datetime={week_day=6,hour=1,ms=0,mcs=0,day=18,month=11,sec=22,year=2017,min=5},clearing_firmid="",kind=1,canceled_uid=0,ordernum=3456591012,sec_code="SBER",system_ref="",block_securities=0,repoterm=0,broker_comission=0,period=1,client_code="11309",linked_trade=0,firmid="NC0011100000",account="NL0011100043",yield=0,seccode="SBER",trans_id=0,upper_discount=0,repo2value=0,start_discount=0,tech_center_comission=0,trade_currency="SUR",accrued2=0,order_num=3456591012,repovalue=0,exchange_code="",accruedint=0,settle_currency="",cpfirmid="",uid=116882,brokerref="11309/",station_id="",price2=0,clearing_comission=0,settlecode="",bank_acc_id=""}
&#91;2932&#93; new order: {withdraw_datetime={week_day=1,hour=0,ms=0,mcs=0,day=1,month=1,sec=0,year=1601,min=0},price=0,value_entry_type=0,balance=0,repo_value_balance=0,value=0,qty=1,passive_only_order=0,class_code="QJSIM",activation_time=0,userid="NC0011100000",expiry=-1,flags=16,linkedorder=0,ordernum=3456591012,sec_code="SBER",canceled_uid=0,side_qualifier=0,client_code="11309",visible=0,firmid="NC0011100000",datetime={week_day=6,hour=1,ms=0,mcs=0,day=18,month=11,sec=22,year=2017,min=5},yield=0,reject_reason="",capacity=0,acnt_type=0,repo2val ue=0,start_discount=0,min_qty=0,ext_order_flags=0,exec_type=0,order_num=3456591012,repovalue=0,repoterm=0,accruedint=0,account="NL0011100043",seccode="SBER",uid=0,brokerref="11309/",exchange_code="",settlecode="",price2=0,trans_id=0,bank_acc_id=""}
&#91;2932&#93; new order: {withdraw_datetime={week_day=1,hour=0,ms=0,mcs=0,day=1,month=1,sec=0,year=1601,min=0},price=0,value_entry_type=0,balance=0,repo_value_balance=0,value=0,qty=1,passive_only_order=0,class_code="QJSIM",activation_time=0,userid="NC0011100000",expiry=-1,flags=16,linkedorder=0,ordernum=3456591012,sec_code="SBER",canceled_uid=0,side_qualifier=0,client_code="11309",visible=0,firmid="NC0011100000",datetime={week_day=6,hour=1,ms=0,mcs=0,day=18,month=11,sec=22,year=2017,min=5},yield=0,reject_reason="",capacity=0,acnt_type=0,repo2val ue=0,start_discount=0,min_qty=0,ext_order_flags=0,exec_type=0,order_num=3456591012,repovalue=0,repoterm=0,accruedint=0,account="NL0011100043",seccode="SBER",uid=116882,brokerref="11309/",exchange_code="",settlecode="",price2=0,trans_id=0,bank_acc_id=""}
</pre>
=============
<br />События в OnTrade полностью одинаковы.<br />События в OnOrder отличаются только тем, что в первом uid = 0, а во втором uid = идентификатору моего пользователя. Что тоже непонятно, заявка же посылалась изначально моим пользователем.<br />Ключевой вопрос - зачем два события приходят, если они одинаковые?<br /><br />Если что, это демо QUIK от ARQA. <br />
			<i>19.11.2017 01:14:15, electron.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27787/topic3224/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27787/topic3224/</guid>
			<pubDate>Sun, 19 Nov 2017 01:14:15 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>OnMoneyLimit шлет четыре события вместо одного</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27779/topic3224/">OnMoneyLimit шлет четыре события вместо одного</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте, вот
====code====
<pre>function table.val_to_str ( v )
&nbsp;&nbsp;&nbsp;&nbsp;if "string" == type( v ) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v = string.gsub( v, "&#92;n", "&#92;&#92;n" )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if string.match( string.gsub(v,"&#91;^'&#92;"&#93;",""), '^"+$' ) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return "'" .. v .. "'"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return '"' .. string.gsub(v,'"', '&#92;&#92;"' ) .. '"'
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return "table" == type( v ) and table.tostring( v ) or
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tostring( v )
&nbsp;&nbsp;&nbsp;&nbsp;end
end

function table.key_to_str ( k )
&nbsp;&nbsp;&nbsp;&nbsp;if "string" == type( k ) and string.match( k, "^&#91;_%a&#93;&#91;_%a%d&#93;*$" ) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return k
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return "&#91;" .. table.val_to_str( k ) .. "&#93;"
&nbsp;&nbsp;&nbsp;&nbsp;end
end

function table.tostring( tbl )
&nbsp;&nbsp;&nbsp;&nbsp;local result, done = {}, {}
&nbsp;&nbsp;&nbsp;&nbsp;for k, v in ipairs( tbl ) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.insert( result, table.val_to_str( v ) )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done&#91; k &#93; = true
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;for k, v in pairs( tbl ) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if not done&#91; k &#93; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.insert( result,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.key_to_str( k ) .. "=" .. table.val_to_str( v ) )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return "{" .. table.concat( result, "," ) .. "}"
end

function OnMoneyLimit(bt)
&nbsp;&nbsp;&nbsp;&nbsp;PrintDbgStr(table.tostring(bt))
end


function main()
&nbsp;&nbsp;&nbsp;&nbsp;while true do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(1000)
&nbsp;&nbsp;&nbsp;&nbsp;end
end</pre>
============= <br />
			<i>17.11.2017 18:08:47, electron.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27779/topic3224/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27779/topic3224/</guid>
			<pubDate>Fri, 17 Nov 2017 18:08:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>OnMoneyLimit шлет четыре события вместо одного</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27778/topic3224/">OnMoneyLimit шлет четыре события вместо одного</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день.<br /><br />Алексей, можете полный скрипт выложить. <br />
			<i>17.11.2017 17:58:49, Egor Zaytsev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27778/topic3224/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27778/topic3224/</guid>
			<pubDate>Fri, 17 Nov 2017 17:58:49 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>OnMoneyLimit шлет четыре события вместо одного</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27751/topic3224/">OnMoneyLimit шлет четыре события вместо одного</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Суть проблемы - подписываюсь на изменение денежного лимита, совершаю одну сделку и OnMoneyLimit срабатывает аж четыре раза.<br />
====code====
<pre>function OnMoneyLimit(bt)
&nbsp;&nbsp;&nbsp;&nbsp;-- просто выводит все поля таблицы
&nbsp;&nbsp;&nbsp;&nbsp;PrintDbgStr(table.tostring(bt))
end</pre>
=============
<br />Логи такие (первое событие чуть отличается от след. трех одинаковых):
====code====
<pre>&#91;2932&#93; {leverage=2,currentbal=280000.67,limit_kind=0,client_code="11309",openlimit=0,firmid="NC0011100000",locked_margin_value=0,currcode="SUR",openbal=281330.93,locked=1448.19,locked_value_coef=0.29,currentlimit=0,tag="EQTV"}
&#91;2932&#93; {leverage=2,currentbal=278672.11,limit_kind=0,client_code="11309",openlimit=0,firmid="NC0011100000",locked_margin_value=0,currcode="SUR",openbal=281330.93,locked=0,locked_value_coef=0,currentlimit=0,tag="EQTV"}
&#91;2932&#93; {leverage=2,currentbal=278672.11,limit_kind=0,client_code="11309",openlimit=0,firmid="NC0011100000",locked_margin_value=0,currcode="SUR",openbal=281330.93,locked=0,locked_value_coef=0,currentlimit=0,tag="EQTV"}
&#91;2932&#93; {leverage=2,currentbal=278672.11,limit_kind=0,client_code="11309",openlimit=0,firmid="NC0011100000",locked_margin_value=0,currcode="SUR",openbal=281330.93,locked=0,locked_value_coef=0,currentlimit=0,tag="EQTV"}
</pre>
=============
<br />Ответьте, пожалуйста, на вопросы:<br />1) Согласно документации, OnMoneyLimit вызывается только при <B>изменении</B> денежного лимита. Тогда почему первое события в currentbal содержит <B>старое</B> значение лимита?<br />2) Почему 3 след. события одинаковые? Я подозреваю, что это связано с режимами T0, T1, T2, но ведь limit_kind там 0 ?<br /><br /><br />QUIK последний 7.14. <br />
			<i>17.11.2017 00:28:56, Алексей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27751/topic3224/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27751/topic3224/</guid>
			<pubDate>Fri, 17 Nov 2017 00:28:56 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
