<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[QUIK -> DDE &mdash; Возобновление работы скрипта после восстановления коннекта]]></title>
	<link rel="self" href="https://quik2dde.ru/extern.php?action=feed&amp;tid=283&amp;type=atom" />
	<updated>2020-03-01T11:49:11Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=283</id>
		<entry>
			<title type="html"><![CDATA[Re: Возобновление работы скрипта после восстановления коннекта]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2574#p2574" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2020-03-01T11:49:11Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2574#p2574</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Возобновление работы скрипта после восстановления коннекта]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2572#p2572" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2020-03-01T10:28:38Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2572#p2572</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Возобновление работы скрипта после восстановления коннекта]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2571#p2571" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2020-03-01T09:57:50Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2571#p2571</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Возобновление работы скрипта после восстановления коннекта]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2570#p2570" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2020-03-01T09:44:07Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2570#p2570</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Возобновление работы скрипта после восстановления коннекта]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2569#p2569" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2020-02-29T21:09:48Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2569#p2569</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Возобновление работы скрипта после восстановления коннекта]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2323#p2323" />
			<content type="html"><![CDATA[<p>Ответ на оба ваши вопроса - нет.<br />Никакой штатной возможности в квике не предусмотрено.<br />Проверяйте в скрипте все потенциально проблемные места. Да, занудно, а что делать.<br />Либо назначайте обработчик ошибок, хотя это тоже не так чтобы гладко. Проверка - вернее.</p><p>Про перезапуск скрипта после ошибки - на форуме квика висит пожелание, но пожелания там, как известно, разработчиков не парят.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2019-02-12T04:40:31Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2323#p2323</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Возобновление работы скрипта после восстановления коннекта]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2321#p2321" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Nordman]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3096</uri>
			</author>
			<updated>2019-02-11T17:34:52Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2321#p2321</id>
		</entry>
</feed>
