<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Отправка транзакций из OnParam]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Отправка транзакций из OnParam форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sat, 02 May 2026 19:49:43 +0300</pubDate>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39046/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_QdUBlmWo" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />Увы, приходится объявлять переменную paper как глобальную, потому что sec внутри fn не видна. <br />=============<br />Потому что у Вас функции get_position и fn объявлены на одном уровне, а переменная sec это локальная переменная функции get_position, сделайте вот так, и должно работать:<br />
====code====
<pre>function get_position (sec)

&nbsp;&nbsp;function fn(t)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if stop_search then return nil end --stop_search - это флаг. Изначально равен nil

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if t.sec_code == sec and t.client_code==client_code and t.limit_kind==2 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop_search=true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;end

&nbsp;&nbsp; stop_search=nil --убиваем флаг, выставленный на прежних запусках функции.
&nbsp;&nbsp; tbl_indxs=SearchItems('depo_limits', 0, getNumberOf("depo_limits")-1, fn)&nbsp;&nbsp; 
&nbsp;&nbsp; if tbl_indxs then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;limit = getItem("depo_limits", tbl_indxs&#91;1&#93;) --найден 1 индекс, его и берём.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local lot=lot&#91;sec&#93;--lot&#91;sec&#93; ранее определена
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return limit.currentbal/lot,limit.locked_buy/lot, limit.locked_sell/lot, limit.awg_position_price
&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0,0,0,0
&nbsp;&nbsp; end
end
</pre>
============= <br />
			<i>24.07.2019 19:04:46, Nikolay Pavlov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39046/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39046/topic4637/</guid>
			<pubDate>Wed, 24 Jul 2019 19:04:46 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39044/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Вот рабочий вариант, внедрённый в робота. Увы, приходится объявлять переменную paper как глобальную, потому что sec внутри fn не видна. <br />
====code====
<pre>function fn(t)

&nbsp;&nbsp;&nbsp;&nbsp;if stop_search then return nil end --stop_search - это флаг. Изначально равен nil

&nbsp;&nbsp;&nbsp;&nbsp;if t.sec_code == paper and t.client_code==client_code and t.limit_kind==2 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop_search=true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false
&nbsp;&nbsp;&nbsp;&nbsp;end

end

function get_position (sec)
&nbsp;&nbsp;&nbsp;paper=sec
&nbsp;&nbsp;&nbsp;stop_search=nil --убиваем флаг, выставленный на прежних запусках функции.
&nbsp;&nbsp;&nbsp;tbl_indxs=SearchItems('depo_limits', 0, getNumberOf("depo_limits")-1, fn)&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;if tbl_indxs then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;limit = getItem("depo_limits", tbl_indxs&#91;1&#93;) --найден 1 индекс, его и берём.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local lot=lot&#91;sec&#93;--lot&#91;sec&#93; ранее определена
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return limit.currentbal/lot,limit.locked_buy/lot, limit.locked_sell/lot, limit.awg_position_price
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0,0,0,0
&nbsp;&nbsp;&nbsp;end
end</pre>
============= <br />
			<i>24.07.2019 18:15:35, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39044/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39044/topic4637/</guid>
			<pubDate>Wed, 24 Jul 2019 18:15:35 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39042/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_KW9Wpd4h" href="/user/459/" bx-tooltip-user-id="459">Nikolay Pavlov</a>, <br />посмотрите пожалуйста, это оно?<br />
====code====
<pre>function fn(t)
&nbsp;&nbsp;&nbsp;if stop_search then return nil end --stop_search - это флаг. Изначально равен nil
&nbsp;&nbsp;&nbsp;&nbsp;if t.sec_code == sec and t.client_code==client_code and t.limit_kind==2 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop_search=true
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false
&nbsp;&nbsp;&nbsp;&nbsp;end
end


function get_position (sec)
&nbsp;&nbsp;&nbsp;stop_search=nil --убиваем флаг, выставленный на прежних запусках функции.
&nbsp;&nbsp;&nbsp;tbl_indxs=SearchItems('depo_limits', 0, getNumberOf("depo_limits")-1, fn)
&nbsp;&nbsp;&nbsp;limit = getItem("depo_limits", tbl_indxs&#91;1&#93;) --найден 1 индекс, его и берём.
&nbsp;&nbsp;&nbsp;local lot=lot&#91;sec&#93;--lot&#91;sec&#93; ранее определена
&nbsp;&nbsp;&nbsp;return limit.currentbal/lot,limit.locked_buy/lot, limit.locked_sell/lot, limit.awg_position_price
end</pre>
============= <br />
			<i>24.07.2019 17:32:59, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39042/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39042/topic4637/</guid>
			<pubDate>Wed, 24 Jul 2019 17:32:59 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39030/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_766emIVd" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />и второй вопрос, как мне в функцию fn передать переменную sec?<br />=============<br />Добрый день.<br />По первому вопросу s_mike Вам дал исчерпывающий ответ. По второму вопросу про переменную sec, достаточно ее объявить на уровень выше объявления функции fn, она будет видна внутри функции fn, это можно сделать на глобальном уровне, или же непосредственно перед вызовом функции SearchItems, например:<br />
====code====
<pre>sec='SBER'
client_code='12345'

function main()
&nbsp;&nbsp;
&nbsp;&nbsp;function fn(t)
&nbsp;&nbsp;&nbsp;&nbsp;if t.sec_code == sec and t.client_code==client_code and t.limit_kind==2 then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;end

&nbsp;&nbsp;--или здесь...
&nbsp;&nbsp;--sec='SBER'
&nbsp;&nbsp;--client_code='12345'

&nbsp;&nbsp;tbl_indxs=SearchItems('depo_limits', 0, getNumberOf("depo_limits")-1, fn)

end
</pre>
============= <br />
			<i>24.07.2019 07:12:12, Nikolay Pavlov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39030/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39030/topic4637/</guid>
			<pubDate>Wed, 24 Jul 2019 07:12:12 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39009/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Если пользовательская функция сравнения в search items возвращает nil, &nbsp;то поиск прерывается и текущий элемент в таблице результатов не попадает. <br /><br />значит, &nbsp;необходимо перед вызовом searchitems создать флаг <br /> ин иницализировать его скажем в nil, при нахождении вашего единственного элемента таблицы изменить флаг на true. <br /><br /> при этом в самом начале пользовательский функции сравнения проверять этот флаг. &nbsp;Если он true, &nbsp;значит на пред итерации был найден ваш элемент и необходимо прервать поиск - вернуть nil из функции сравнения. &nbsp; <br />
			<i>22.07.2019 19:55:17, s_mike@rambler.ru.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39009/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39009/topic4637/</guid>
			<pubDate>Mon, 22 Jul 2019 19:55:17 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39007/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_8vRbqOfr" href="/user/459/" bx-tooltip-user-id="459">Nikolay Pavlov</a>, <br />спрошу про другой случай.<br />Я знаю, что в нужной мне таблице только один элемент с нужным параметром. Например, я ищу в depo_limits текущий остаток по SBER. Как мне в SearchItems оборвать поиск сразу после того как SBER был найден?<br /><br />Я делаю что-то в таком духе:<br />
====code====
<pre>function fn(t)
&nbsp;&nbsp;&nbsp;&nbsp;if t.sec_code == sec and t.client_code==client_code and t.limit_kind==2 then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false
&nbsp;&nbsp;&nbsp;&nbsp;end
end

tbl_indxs=SearchItems('depo_limits', 0, getNumberOf("depo_limits")-1, fn)</pre>
=============
<br />и второй вопрос, как мне в функцию fn передать переменную sec? <br />
			<i>22.07.2019 15:39:30, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39007/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39007/topic4637/</guid>
			<pubDate>Mon, 22 Jul 2019 15:39:30 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38961/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Конечно же должно быть обращение к таблице 'orders'
====code====
<pre>function fn (ord_sec_code, ord_flags)
&nbsp;&nbsp; if table_contains(ticker_list, ord_sec_code) and orderflags2table(ord_flags).active&nbsp;&nbsp;then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true
&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false
&nbsp;&nbsp; end
end

tbl=SearchItems('orders', 0, getNumberOf("orders")-1, fn, "sec_code,flags")</pre>
============= <br />
			<i>19.07.2019 08:06:39, Nikolay Pavlov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38961/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38961/topic4637/</guid>
			<pubDate>Fri, 19 Jul 2019 08:06:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38960/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Так же стоит обратить внимание на то, что написано в документации по функции SearchItems<br /><br /><ul><li>fn – функция обратного вызова, возвращающая одно из следующих <br />значений: <ul><li>true – текущий индекс учитывается в результате;<br /><li>false – текущий индекс не учитывается в результате;<br /><li>nil – поиск прерывается, функция SearchItems возвращает таблицу с индексами, <br />найденными ранее, включая текущий индекс.<br /></ul></ul>Так что Вам лучше переписать функцию fn, вот пример чтобы выбрать все активные заявки из Вашего списка ticker_list (если функцию table_contains() так же переписать на поиск по ключу, как я писал выше, все должно отрабатывать быстро):<br />
====code====
<pre>function fn (ord_sec_code, ord_flags)
&nbsp;&nbsp; if table_contains(ticker_list, ord_sec_code) and orderflags2table(ord_flags).active&nbsp;&nbsp;then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true
&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false
&nbsp;&nbsp; end
end

tbl=SearchItems('trades', 0, getNumberOf("trades")-1, fn, "sec_code,flags")</pre>
============= <br />
			<i>19.07.2019 08:04:56, Nikolay Pavlov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38960/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38960/topic4637/</guid>
			<pubDate>Fri, 19 Jul 2019 08:04:56 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38959/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_JLyDiQd7" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />19,21,22 - это номера моих сделок с Башнефтью. С учётом сдвига всё верно. Но как получить все поля по этим сделкам?<br />=============<br />Функция возвращает только индексы заявок, которые удовлетворяют условиям Вашей функции fn(), дальше нужные заявки нужно забрать функцией row=getItem(&quot;orders&quot;,i), где i, это индекс из таблицы, которую вернула функция SearchItems. <br />
			<i>19.07.2019 07:56:43, Nikolay Pavlov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38959/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38959/topic4637/</guid>
			<pubDate>Fri, 19 Jul 2019 07:56:43 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38957/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_QRnhGRgb" href="/user/459/" bx-tooltip-user-id="459">Nikolay Pavlov</a>, <br />спасибо за совет!<br />вопрос по SearchItems. Никогда с ней не работал.<br /><br />Хочу получить мои сделки за сегодня по BANEP<br />
====code====
<pre>function fn (t)
&nbsp;&nbsp;&nbsp;if t.sec_code=='BANEP' then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true
&nbsp;&nbsp;&nbsp;end
end

tbl=SearchItems('trades', 0, getNumberOf("trades")-1, fn, "qty,class_code, sec_code")</pre>
=============
в результате таблица tbl выглядит так:<br />====quote====<br />1=0;2=1;3=2;4=3;5=4;6=5;7=6;8=7;9=8;10=9;11=10;12=11;13=12;14=13;15=14;16=15;17=16;18=17;19=18;20=19;21=20;22=21;23=22;24=23;25=24;26=25;27=26;28=27;29=28;30=29;31=30;32=31;33=32;34=33;35=34;36=35;37=36;38=37;39=38;40=39;41=40;42=41;43=42;44=43;45=44;46=45;47=46;48=47;49=48;50=49;51=50;52=51;53=52;54=53;55=54;56=55;57=56;58=57;59=58;60=59;61=60;62=61;63=62;64=63;65=64;66=65;67=66;68=67;69=68;70=69;71=70;72=71;73=72;74=73;75=74;76=75;77=76;78=77;79=78;80=79;81=80;82=81;83=82;84=83;85=84;86=85;87=86;88=87;89=88;90=89;<br />=============<br />у меня за день и правда 90 сделок, но не понятно в чём толк этой функции?<br />----------------<br /><br />Если написать чуть-чуть иначе:<br />
====code====
<pre>function fn (t)
&nbsp;&nbsp;&nbsp;if t.sec_code=='BANEP' then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return t
&nbsp;&nbsp;&nbsp;end
end

tbl=SearchItems('trades', 0, getNumberOf("trades")-1, fn)</pre>
=============
<br />то он пишет такое:<br />====quote====<br />1=18;2=20;3=21;<br />=============<br />19,21,22 - это номера моих сделок с Башнефтью. С учётом сдвига всё верно. Но как получить все поля по этим сделкам? <br />
			<i>19.07.2019 07:40:15, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38957/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38957/topic4637/</guid>
			<pubDate>Fri, 19 Jul 2019 07:40:15 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38956/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_T4wlKmyS" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />посмотрел описание функции SearchItems. Почему вы её рекламируете по сравнению с Кодfor i=0,getNumberOf(&quot;orders&quot;)-1,1 doВ ней тоже задаётся список строчек &nbsp;с какой по какую искать. Если у меня за день 10 000 заявок, скрипт будет пробегать по всем. Разве не так?<br />=============<br />Данная функция сделает это гораздо быстрее. <br />
			<i>19.07.2019 07:31:29, Nikolay Pavlov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38956/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38956/topic4637/</guid>
			<pubDate>Fri, 19 Jul 2019 07:31:29 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38955/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_3Ka2x9tq" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />Разве что переделать тикер лист в Код'SBER'=1; 'GAZP' = 2; 'GMKN' = 3;тогда ваша функция сработает. Но и в этом случае она где-то там невидимо для меня будет перебирать всю таблицу в поисках ключа.Спасибо за помощь!<br />=============<br />Добрый день.<br />Вам нужно переделать ticker_list в набор вида:<br />
====code====
<pre>'SBER'=true; 'GAZP'=true; 'GMKN'=true;...
</pre>
=============
Для этого, Вам достаточно в месте, где Вы формируете таблицу ticker_list использовать вышеописанную функцию:<br />
====code====
<pre>function addToTable(table, key)
&nbsp;&nbsp;&nbsp;&nbsp;table&#91;key&#93; = true
end</pre>
=============
в этом случае, перебора никакого не будет, (даже &quot;где-то там невидимо...&quot;), т.к. обращение выполняется напрямую по ключу, это в разы быстрее чем перебирать все значения таблицы в цикле. Нужно просто вместо вашей старой функции table_contains использовать:<br />
====code====
<pre>function tableContains(table, key)
&nbsp;&nbsp;&nbsp;&nbsp;return table&#91;key&#93; ~= nil
end</pre>
============= <br />
			<i>19.07.2019 07:23:03, Nikolay Pavlov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38955/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38955/topic4637/</guid>
			<pubDate>Fri, 19 Jul 2019 07:23:03 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38953/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_8WZJ7Lcp" href="/user/459/" bx-tooltip-user-id="459">Nikolay Pavlov</a>, <br />переменная ticker_list из моего примера:
====code====
<pre>1=SBER;2=GAZP;3=GMKN;4=LKOH;................</pre>
=============
Ключ - число, значение - тикер.<br />Ваш совет:
====code====
<pre>function tableContains(table, key)&nbsp;&nbsp;&nbsp;&nbsp;
return table&#91;key&#93; ~= nil
end</pre>
=============
не подойдёт в чистом виде.<br />Разве что переделать тикер лист в 
====code====
<pre>'SBER'=1; 'GAZP' = 2; 'GMKN' = 3;</pre>
=============
тогда ваша функция сработает. Но и в этом случае она где-то там невидимо для меня будет перебирать всю таблицу в поисках ключа.<br />Спасибо за помощь! <br />
			<i>19.07.2019 07:13:40, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38953/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38953/topic4637/</guid>
			<pubDate>Fri, 19 Jul 2019 07:13:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38952/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_RyFSTpM8" href="/user/459/" bx-tooltip-user-id="459">Nikolay Pavlov</a>, <br />посмотрел описание функции SearchItems. Почему вы её рекламируете по сравнению с 
====code====
<pre>for i=0,getNumberOf("orders")-1,1 do</pre>
=============
В ней тоже задаётся список строчек &nbsp;с какой по какую искать. Если у меня за день 10 000 заявок, скрипт будет пробегать по всем. Разве не так? <br />
			<i>19.07.2019 07:02:22, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38952/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38952/topic4637/</guid>
			<pubDate>Fri, 19 Jul 2019 07:02:22 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38944/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_DNyZ24Mx" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />Я запускаю CleanActive из OnStop и из самого начала функции main. Это очень часто вешает квик, приходится его убивать через окно с процессами.<br />=============<br />Добрый день.<br />Функция OnStop() это тоже функция обратного вызова, соответственно тяжелые и долгие операции в ней будут подвешивать терминал. Допустим у Вас на момент остановки скрипта в терминале 10 000 заявок, при этом большинство из них сняты (делаю вывод из вашего описания из #1 поста), тогда в функции CleanActive() скрипт будет пробегать по всем заявкам, это 10 000 итераций, так же в таблице ticker_list у Вас, допустим, 50 инструментов, линейный пробег по всем еще увеличивает количество итераций (берем среднее значение=25, т.к. не обязательно, что инструмент row.sec_code будет самым последним), итого 10 000 * 25=250 000 итераций. Пока все эти циклы будут выполняться, терминал будет ждать завершения OnStop() и соответственно висеть. Могу только посоветовать оптимизировать логику работы функции CleanActive - использовать функцию SearchItems для поиска всех активных заявок по инструментам из ticker_list. Так же можно убрать линейный забег в функции table_contains, этим Вы уже в разы уменьшите количество итераций, в интернете много примеров как это сделать, вот например:<br />
====code====
<pre>function addToTable(table, key)
&nbsp;&nbsp;&nbsp;&nbsp;table&#91;key&#93; = true
end

function removeFromTable(table, key)
&nbsp;&nbsp;&nbsp;&nbsp;table&#91;key&#93; = nil
end

function tableContains(table, key)
&nbsp;&nbsp;&nbsp;&nbsp;return table&#91;key&#93; ~= nil
end</pre>
=============
<br />Если будут затруднения с использованием функции SearchItems, пишите. <br />
			<i>18.07.2019 13:07:36, Nikolay Pavlov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38944/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38944/topic4637/</guid>
			<pubDate>Thu, 18 Jul 2019 13:07:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38943/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			функция для снятия всех заявок. <br />в неё передаётся таблица с тикерами.<br />
====code====
<pre>function CleanActive (ticker_list) --переписать её, чтобы искать с конца.
&nbsp;&nbsp;&nbsp;local row={}
&nbsp;&nbsp;&nbsp;for i=0,getNumberOf("orders")-1,1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row=getItem("orders",i)&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local sec=row.sec_code
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if table_contains(ticker_list, sec) and orderflags2table(row.flags).active then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res,ms=killOrder(tostring(row.order_num),sec,row.class_code)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
end</pre>
=============

====code====
<pre>function table_contains(table, element)&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;for _, value in pairs(table) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if value == element then return true end
&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;return nil
end&nbsp;&nbsp;&nbsp;</pre>
=============
Я запускаю CleanActive из OnStop и из самого начала функции main. Это очень часто вешает квик, приходится его убивать через окно с процессами. <br />
			<i>18.07.2019 12:05:10, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38943/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38943/topic4637/</guid>
			<pubDate>Thu, 18 Jul 2019 12:05:10 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38941/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_uu15RbdO" href="/user/3905/" bx-tooltip-user-id="3905">Let_it_go</a> написал:<br />Заметил, что отправка транзакций - выставление и снятие заявок - трудоёмкая операция. <br />Торгую 50-ю акциями. Если у меня висит 50 заявок, то при их массовом одновременном снятии квик подвисает на несколько секунд. При быстром выставлении такого же числа заявок он тоже зависает.<br />Поэтому вопросы.<br />1. Наблюдения верны? Отправка транзакций - ресурсоёмкая процедура?<br />2. Хочу отправлять транзакции из OnParam. Это плохая идея? С точки зрения логики работы программы это было бы очень удобно. Сейчас у меня отправка заявок идёт в функции main, там в бесконечном цикле перебираются одна за другой 50 акций на соблюдение условия выставления/снятия. Хочу перенести этот блок в OnParam. <br />Заявок ставится много, они всё время перевыставляются. В день отправляется до 10 тысяч заявок, то есть с учётом снятия это 20 000 транзакций. &nbsp;<br />=============<br />Добрый день.<br /><br />1. Нет, отправка 50 транзакций не должна подвешивать рабочее место QUIK. <br /><br />2. Если в &nbsp;OnParam &nbsp;будут выполняться долгие циклы по перебору 50 инструментов и проверять не &nbsp;выполнилось ли условие для отправки транзакции, то тут могут наблюдаться зависания. <br /><br />Выложите свой скрипт, мы посмотрим. <br />
			<i>18.07.2019 07:49:09, Egor Zaytsev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38941/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38941/topic4637/</guid>
			<pubDate>Thu, 18 Jul 2019 07:49:09 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отправка транзакций из OnParam</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message38877/topic4637/">Отправка транзакций из OnParam</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Заметил, что отправка транзакций - выставление и снятие заявок - трудоёмкая операция. <br />Торгую 50-ю акциями. Если у меня висит 50 заявок, то при их массовом одновременном снятии квик подвисает на несколько секунд. При быстром выставлении такого же числа заявок он тоже зависает.<br />Поэтому вопросы.<br />1. Наблюдения верны? Отправка транзакций - ресурсоёмкая процедура?<br />2. Хочу отправлять транзакции из OnParam. Это плохая идея? С точки зрения логики работы программы это было бы очень удобно. Сейчас у меня отправка заявок идёт в функции main, там в бесконечном цикле перебираются одна за другой 50 акций на соблюдение условия выставления/снятия. Хочу перенести этот блок в OnParam. <br />Заявок ставится много, они всё время перевыставляются. В день отправляется до 10 тысяч заявок, то есть с учётом снятия это 20 000 транзакций. &nbsp; <br />
			<i>14.07.2019 08:09:51, Let_it_go.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message38877/topic4637/</link>
			<guid>http://forum.quik.ru/messages/forum10/message38877/topic4637/</guid>
			<pubDate>Sun, 14 Jul 2019 08:09:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
