<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[QUIK -> DDE &mdash; Возобновление работы скрипта после восстановления коннекта]]></title>
		<link>https://quik2dde.ru/viewtopic.php?id=283</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=283&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Возобновление работы скрипта после восстановления коннекта».]]></description>
		<lastBuildDate>Sun, 01 Mar 2020 11:49:11 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Возобновление работы скрипта после восстановления коннекта]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2574#p2574</link>
			<description><![CDATA[<div class="quotebox"><cite>kalikazandr пишет:</cite><blockquote><p>Т.е. по сути, торговая логика занимает всего 1% кода, остальные 99%, это проверки типов данных возвращаемых функциями qlua.dll</p></blockquote></div><p>не вижу смысла делать именно так, когда можно переопределить что угодно как угодно. например:<br /></p><div class="codebox"><pre><code>local __gql2 = getQuoteLevel2
getQuoteLevel2 = function(...) 
    local res = __gql2(...)
    if type(res) ~= &#039;table&#039; then return {} else return res end
end

function main()
    -- somewhere inside your code:
    table.tostring(getQuoteLevel2(&#039;TQBR&#039;, &#039;SBER&#039;))
    -- 
end</code></pre></div><p>надо пояснять, как это работает?</p><p>ps: можно в res что-то добавлять, типа res.result = true когда ок или res.result = false когда не ок и вообще, ввести любую систему проверки результата.<br />pps: в этом примере точечки ... важны. в отличие от предыдущего моего примера выше по обсуждению, где точечки обозначали что-то&nbsp; неопределенное</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Sun, 01 Mar 2020 11:49:11 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2574#p2574</guid>
		</item>
		<item>
			<title><![CDATA[Re: Возобновление работы скрипта после восстановления коннекта]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2572#p2572</link>
			<description><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><div class="codebox"><pre><code>res = getQuoteLevel2(...)
if type(res) == &#039;table&#039; then
    ...
end</code></pre></div></blockquote></div><p>Вот-вот, и точно так же проверять, если нет price/quantity в коллекции BID/ASK или они =0.<br />Т.е. по сути, торговая логика занимает всего 1% кода, остальные 99%, это проверки типов данных возвращаемых функциями qlua.dll</p>]]></description>
			<author><![CDATA[null@example.com (kalikazandr)]]></author>
			<pubDate>Sun, 01 Mar 2020 10:28:38 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2572#p2572</guid>
		</item>
		<item>
			<title><![CDATA[Re: Возобновление работы скрипта после восстановления коннекта]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2571#p2571</link>
			<description><![CDATA[<div class="quotebox"><cite>Nordman пишет:</cite><blockquote><p>Всем доброго времени суток,&nbsp; подскажите кто знает, возможно ли в QUIKе сделать две вещи:</p></blockquote></div><p>на самом деле, обе эти вещи не нужны. по первому пункту - связь может отвалиться в любой момент, во время исполнения любой ветки вашего алгоритма, и повлиять на это никак нельзя. по-этому нужно писать устойчивый код, и не путем проверки соединения пред каждой строкой, а правильно обрабатывая значения, которые возвращают функции квика в разных ситуациях. по второму пункту - на самом деле, нет особого смысла останавливать скрипт. при помощи вашей функции, вычисляющей рабочее время (и я бы добавил проверку статуса инструмента на предмет приостановок) вы можете просто переводить свой скрипт в глобальное состояние &quot;работаем&quot; или &quot;не работаем&quot; взводя какую-то глобальную переменную, при этом вам не нужно задавать такие гигантские sleep&#039;ы. sleep(1) - вполне достаточно, загрузка процессора будет близка к 0.</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Sun, 01 Mar 2020 09:57:50 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2571#p2571</guid>
		</item>
		<item>
			<title><![CDATA[Re: Возобновление работы скрипта после восстановления коннекта]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2570#p2570</link>
			<description><![CDATA[<div class="quotebox"><cite>kalikazandr пишет:</cite><blockquote><p>Действительно, арка не удосужилась возвращать из своих функций тот тип данных, который ожидается. Например функция getQuoteLevel2 может вернуть nil, table, string, вместо ожидаемого table.</p></blockquote></div><div class="codebox"><pre><code>res = getQuoteLevel2(...)
if type(res) == &#039;table&#039; then
    ...
end</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Sun, 01 Mar 2020 09:44:07 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2570#p2570</guid>
		</item>
		<item>
			<title><![CDATA[Re: Возобновление работы скрипта после восстановления коннекта]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2569#p2569</link>
			<description><![CDATA[<p>Действительно, арка не удосужилась возвращать из своих функций тот тип данных, который ожидается. Например функция getQuoteLevel2 может вернуть nil, table, string, вместо ожидаемого table.<br />Что бы не делать лишние проверки на nil, а потом на 0, то вот так:<br /></p><div class="codebox"><pre><code>function calculate(class_code, sec_code)
  local last = tonumber(getParamEx(class_code, sec_code, &quot;last&quot;).param_value) or 0
  if last == 0 then return end --last не может быть 0, дальше считать нет смысла
  ...some code...
end</code></pre></div><div class="quotebox"><cite>Nordman пишет:</cite><blockquote><p>функция времени у меня 100% рабочая много раз проверял багов там быть не может</p></blockquote></div><p>что-то с трудом верится... может в ней есть циклы, ожидающие чего-то?</p>]]></description>
			<author><![CDATA[null@example.com (kalikazandr)]]></author>
			<pubDate>Sat, 29 Feb 2020 21:09:48 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2569#p2569</guid>
		</item>
		<item>
			<title><![CDATA[Re: Возобновление работы скрипта после восстановления коннекта]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2323#p2323</link>
			<description><![CDATA[<p>Ответ на оба ваши вопроса - нет.<br />Никакой штатной возможности в квике не предусмотрено.<br />Проверяйте в скрипте все потенциально проблемные места. Да, занудно, а что делать.<br />Либо назначайте обработчик ошибок, хотя это тоже не так чтобы гладко. Проверка - вернее.</p><p>Про перезапуск скрипта после ошибки - на форуме квика висит пожелание, но пожелания там, как известно, разработчиков не парят.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Tue, 12 Feb 2019 04:40:31 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2323#p2323</guid>
		</item>
		<item>
			<title><![CDATA[Возобновление работы скрипта после восстановления коннекта]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2321#p2321</link>
			<description><![CDATA[<p>Всем доброго времени суток,&nbsp; подскажите кто знает, возможно ли в QUIKе сделать две вещи:<br />1. Автоматическое возобновление работы скрипта после разрыва связи с сервером и ее восстановления квиком, а то бывает рвется связь, скрипт останавливается - по той причине что в в этот момент не смог получить какие нибудь данные с сервера, но скрипт то об этом не знает а просто данные которые он запрашивал по причине их неполучения с сервера имеют значение nil, в результате из за этого скрипт отваливается с ошибкой, и после реконнекта квика с сервером он уже сам не запустится, и квик его тоже не собирается запускать, а пихать через строчку if isconnected()==1&nbsp; then .... тоже не дело, в цикле main() я то такую строчку сделал но вот если команды внутри цикла уже начали выполнятся то обрыв связи и отвал скрипта.<br />2. Возможно ли приостанавливать скрипт по временным условиям (нерабочие часы и дни биржи) и также возобновлять его работу по этим условиям (наступление времени торговой сессии)</p><p>Вообще я такую временную приостановку в цикле main() сделал</p><p>&nbsp; &nbsp; while isConnected()~=1 or нерабочее время do</p><p>&nbsp; &nbsp; sleep (60000)</p><p>&nbsp; &nbsp; end</p><p>где нерабочее время - функция путем нехитрых вычислений и системного времени выдающая true или false<br />но в итоге в нерабочее время весь квик просто зависает с курсором в виде крутящегося кругляшка а на следующий день при наступлении рабочего времени не развисает<br />функция времени у меня 100% рабочая много раз проверял багов там быть не может</p>]]></description>
			<author><![CDATA[null@example.com (Nordman)]]></author>
			<pubDate>Mon, 11 Feb 2019 17:34:52 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2321#p2321</guid>
		</item>
	</channel>
</rss>
