<?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; StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
		<link>https://quik2dde.ru/viewtopic.php?id=61</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=61&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «StaticVar: Обмен данными между Lua-скриптами в QUIK».]]></description>
		<lastBuildDate>Fri, 27 Sep 2024 12:03:42 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4358#p4358</link>
			<description><![CDATA[<p>Я использую версию 5.4.1.<br />Скрипт предоставить могу. Он несложный.<br />Но я тут сделал одно наблюдение. Я обычно запускаю quik на виртуальной машине с Windows 10. И если в это же время на этом же компьютере (точнее на ноутбуке) запущена ещё одна (вторая) виртуальная машина, например, с Windows 7, то эта ошибка начинает появляться где-то раз в час. Если вторая виртуальная машина работает под Windows XP, т.е. меньше запрашивает памяти, чем Windows 7 (2Гб против 8Гб), то эта ошибка появляется несколько реже. Если же вторая виртуальная машина вообще не запущена, то эта ошибка появляется совсем редко (но всё равно появляется). Хотя возможно вторая виртуальная машина несильно влияет на частоту появления этой ошибки – надо ещё понаблюдать.<br />А вот появляется ли эта ошибка, когда quik запущен не на виртуальной, а на реальной машине, сказать не могу. Последние дня два я погонял этот скрипт на реальной машине – этой ошибки не возникало вообще.<br />Т.е. пока, на данный момент, из всего этого можно сделать вывод, что появление этой ошибки связано не только со скриптом, но и с особенностями работы виртуальной машины.<br />Хотя по логике, всё должно работать одинаково – что на виртуальной машине, что на реальной.<br />Но это всё конечно предположение.<br />Может есть какое-то ограничение на количество этих статических переменных?</p>]]></description>
			<author><![CDATA[null@example.com (igor)]]></author>
			<pubDate>Fri, 27 Sep 2024 12:03:42 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4358#p4358</guid>
		</item>
		<item>
			<title><![CDATA[Re: StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4357#p4357</link>
			<description><![CDATA[<p>Использовал на Lua 5.3 и Lua 5.4. Поведение одинаковое.<br />Скрипт, который бы воспроизводил проблему в процессе подготовки.</p>]]></description>
			<author><![CDATA[null@example.com (leher63)]]></author>
			<pubDate>Wed, 25 Sep 2024 14:44:12 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4357#p4357</guid>
		</item>
		<item>
			<title><![CDATA[Re: StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4356#p4356</link>
			<description><![CDATA[<p>Надо как-то разбираться.<br />Но всё равно нужен какой-то скрипт, который проблему бы воспроизводил. Пусть и случайно и пусть изредка.</p><p>Какая версия Lua используется в терминале?</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Wed, 25 Sep 2024 05:38:02 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4356#p4356</guid>
		</item>
		<item>
			<title><![CDATA[Re: StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4355#p4355</link>
			<description><![CDATA[<p>У меня аналогичная проблема, выходит такая же ошибка, причем совершенно в случайном порядке.<br />Связываю эту ошибку с StaticVar вот по каким наблюдениям.<br />Своего бота, написанного на Lua, я разместил внутри кода индикатора QUIK. Для отображения параметров бота я использую таблицы рабочего места QUIK, данные в который передаются из индикатора через StaticVar.<br />После того, как стали появляться ошибки я добавил в код индикатора следующие строки, которые выполняются при инициализации индикатора:</p><div class="codebox"><pre><code>local resultTable = {}
for a, b in pairs(_G) do
    table.insert(resultTable, a..&quot;\t&quot;..tostring(b))
    if  type(b) == &quot;table&quot; then
        for x, y in pairs(b) do
            table.insert(resultTable, &quot;\t&quot;.. &quot;|-- &quot;.. x..&#039;\t&#039;..tostring(y))
        end
    end
end
local f = io.open(dir_logFile..&#039;\\&#039;..&#039;GLOBAL.txt&#039;, &#039;w&#039;)
for i = 1, #resultTable do
    f:write(resultTable[i]..&#039;\n&#039;) 
    f:flush() 
end
f:close()</code></pre></div><p>Данный код сохраняет содержимое глобального окружения в файл. Для таблиц и функций указываются используемые ими адреса.<br />При возникновении ошибки я беру адрес из сообщения об ошибке и пробую его найти в вышеуказанном файле, который сформировал бот, в котором появилась ошибка.<br />Целиком совпадения не было ни разу, но максимальное совпадение первых символов адреса из сообщения об ошибке всегда приходится на функции StaticVar (пример на приложенном скриншоте).<br /><span class="postimg"><img src="https://i.postimg.cc/kXWLmXwM/image.jpg" alt="https://i.postimg.cc/kXWLmXwM/image.jpg" /></span><br />Я не знаю насколько правильно производить такие сравнения, и возможно притянуты за уши совпадения, но другого способа найти хоть какую-то зацепку по возникающей ошибке я не знаю.<br />Буду благодарен если кто-то подскажет как найти источник ошибки.</p><p>ps. Ошибка носит случайный характер, так как код бота, находящийся в индикаторе, восстанавливает свою работу при получении следующего тика (изменения данных по свече) после возникновения ошибки.</p>]]></description>
			<author><![CDATA[null@example.com (leher63)]]></author>
			<pubDate>Tue, 24 Sep 2024 19:43:07 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4355#p4355</guid>
		</item>
		<item>
			<title><![CDATA[Re: StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4354#p4354</link>
			<description><![CDATA[<p>Используется ещё w32.dll.<br />Но самое неприятное то, что непонятно как определить, в каком именно месте скрипта происходит это событие. Это происходит где-то раз в 2 часа. Всё остальное время работает нормально.<br />Этот скрипт просто выводит данные в пользовательские таблицы то, что передаёт ему с помощью StaticVar другой скрипт.</p>]]></description>
			<author><![CDATA[null@example.com (igor)]]></author>
			<pubDate>Tue, 24 Sep 2024 11:26:04 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4354#p4354</guid>
		</item>
		<item>
			<title><![CDATA[Re: StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4353#p4353</link>
			<description><![CDATA[<p><strong>igor</strong>, всё может быть.<br />1. Надо скрипт, воспроизводящий проблему. Тогда можно будет что-то сказать предметно.</p><p>2. А еще какие-то внешние dll используются? а если другие dll отключить/удалить?<br />3. А если отключить StaticVar и не использовать её - проблема остаётся?</p><p>Хотя в целом ситуация странноватая, пока таких сообщений не было, при том, что данная библиотека не менялась уже несколько лет. Но, мало ли, всякое бывает.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Tue, 24 Sep 2024 10:03:21 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4353#p4353</guid>
		</item>
		<item>
			<title><![CDATA[Re: StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4352#p4352</link>
			<description><![CDATA[<p>У меня скрипт, использующий эту dll-ку (StaticVar), почему-то эпизодически останавливается с ошибкой &quot;ACCESS VIOLATION at address 00007FFD5BFF815B&quot;.<br />Может ли эта dll-ка быть причиной?</p>]]></description>
			<author><![CDATA[null@example.com (igor)]]></author>
			<pubDate>Tue, 24 Sep 2024 08:30:56 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4352#p4352</guid>
		</item>
		<item>
			<title><![CDATA[Re: StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4294#p4294</link>
			<description><![CDATA[<p><strong>Alexey89</strong>, сборку для Lua 5.4 высылаю по запросу<br />Напишите на swerg@swerg.ru</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Mon, 30 Oct 2023 04:39:01 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4294#p4294</guid>
		</item>
		<item>
			<title><![CDATA[Re: StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4293#p4293</link>
			<description><![CDATA[<p>О великий Swerg. Заработало!!!!&nbsp; &nbsp;Круть неимоверная. Теперь я эту переменную прикручу так что при запуске скрипта на активный график ставится заявка. С ценой&nbsp; priceLAST&nbsp; + несколько шагов.&nbsp; Считалку числа лотов прикручу. И надеюсь будет толк. </p><p>Еще вопросик в квике поставил версию 5.3.5 под 5.4.1 работать отказалась это баг или фича?</p>]]></description>
			<author><![CDATA[null@example.com (Alexey89)]]></author>
			<pubDate>Sun, 29 Oct 2023 20:14:44 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4293#p4293</guid>
		</item>
		<item>
			<title><![CDATA[Re: StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4292#p4292</link>
			<description><![CDATA[<p><strong>Alexey89</strong><br />Надо скрипт переделать&nbsp; так:</p><div class="codebox"><pre><code>stv = require(&quot;StaticVar&quot;)

function main()
    stv.UseNameSpace(&quot;testNS&quot;)    -- вот эту строку надо перенести сюда
    message(&quot;(test-2) &quot; .. tostring(stv.GetCurrentNameSpace()) .. &quot;.xxx=&quot; .. tostring(stv.GetVar(&quot;xxx&quot;)), 1)
end</code></pre></div><p>И всё заработает.</p><p>Суть в том, что UseNameSpace() работает &quot;раздельно&quot; в основном потоке выполнения (callback&#039;и)&nbsp; и в main()<br />Сделано это было вот почему, вот для какого сценария:<br />Выполняется main(), в ней выполняется вызов&nbsp; UseNameSpace(). Разумеется, код в main() ожидает, что указанный NameSpace и будет выбран до нового вызова UseNameSpace() в коде main().<br />Тут одновременно c main() запускается какой-то callback (т.к. работает в основном потоке), в коде которого вызывается UseNameSpace(), устанавливая свой NameSpace для работы callback&#039;а. Т.е. код callback&#039;а отдельно устанавливает свой&nbsp; NameSpace для своей работы.<br />Но код main() в это время ведь тоже продолжает выполняться, подразумевая своё значение NameSpace.</p><p>Поэтому и было сделано такое вот разделение: в main() устанавливается и поддерживается свой NameSpace, в остальном коде (коде основного потока) - свой NameSpace.</p><p>В общем надо отдельно не забывать устанавливать требуемый NameSpace как в main(), так и в каждом callbak&#039;е.</p><p>Хотя, возможно, в вашем случае никакие NameSpace устанавливать и не требуется.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Sun, 29 Oct 2023 07:05:03 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4292#p4292</guid>
		</item>
		<item>
			<title><![CDATA[Re: StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4291#p4291</link>
			<description><![CDATA[<p>Пытаюсь прикрутить StaticVar.dll&nbsp; к индикатору&nbsp; </p><div class="codebox"><pre><code>Settings = {
    Name = &quot;goodmode&quot;
}

-- Create a global table to store data
myData = {}
 
function Init()
    -- Add the required code here
    stv = require(&quot;StaticVar&quot;)
    stv.UseNameSpace(&quot;testNS&quot;)
    return 1
end

function OnCalculate(Index)
   if Index == 1 then
        local info = getDataSourceInfo()

        -- Store the sec_code value in the global table
        table.insert(myData, info.sec_code)

        -- Output the sec_code value to the message
        message(info.sec_code)

        -- Add the required code here
        stv.SetVar(&quot;xxx&quot;, info.sec_code)
  end
        
    return 0
end  </code></pre></div><p>и забирать переменную скриптом&nbsp; </p><br /><div class="codebox"><pre><code>stv = require(&quot;StaticVar&quot;)

stv.UseNameSpace(&quot;testNS&quot;)

function main()
     
    message(&quot;(test-2) &quot; .. tostring(stv.GetCurrentNameSpace()) .. &quot;.xxx=&quot; .. tostring(stv.GetVar(&quot;xxx&quot;)), 1)
end</code></pre></div><br /><p>к сожалению не работает. есть вероятность что я что-то делаю не так и из индикатора можно давать данные в&nbsp; UseNameSpace ?</p>]]></description>
			<author><![CDATA[null@example.com (Alexey89)]]></author>
			<pubDate>Sat, 28 Oct 2023 18:34:11 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4291#p4291</guid>
		</item>
		<item>
			<title><![CDATA[Re: StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4014#p4014</link>
			<description><![CDATA[<p>К сожалению не видел в почте письма, видимо ушло в спам ;( За это время я тоже не бездельничал, подумал что библиотека больше не поддерживается. Продумываю и начал реализацию другой концепции, объединения всех роботов в один. Возможно не самое лучшее решение, но по крайней мере не будет зависимости от сторонних библиотек. В любом случае робот еще очень далек от совершенства и версий луа сменится еще с десяток пока я завершу его. А возможно это эпопея с роботами будет продолжаться бесконечно. Сколь бы не идеален был робот, а стратегии в любом случае будут меняться, добавляться новые, некоторые уже показывают свою неэффективность на определенных инструментах, а на других крайне эффективны... Я изначально писал робота с четким разделением на части, это &quot;торговая&quot; часть, она работает исключительно на торгах, и часть &quot;стратегии&quot;, которая к бирже не прикасается и занимается исключительно анализом...</p>]]></description>
			<author><![CDATA[null@example.com (dark184)]]></author>
			<pubDate>Mon, 05 Dec 2022 06:57:24 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4014#p4014</guid>
		</item>
		<item>
			<title><![CDATA[Re: StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4013#p4013</link>
			<description><![CDATA[<p><strong>dark184</strong>,<br />написал вам на e-mail<br />Еще кому нужна для Lua5.4 - пишите на swerg@swerg.ru</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Mon, 05 Dec 2022 04:14:58 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4013#p4013</guid>
		</item>
		<item>
			<title><![CDATA[Re: StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3994#p3994</link>
			<description><![CDATA[<p>Если можно.</p>]]></description>
			<author><![CDATA[null@example.com (dark184)]]></author>
			<pubDate>Mon, 28 Nov 2022 08:00:14 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3994#p3994</guid>
		</item>
		<item>
			<title><![CDATA[Re: StaticVar: Обмен данными между Lua-скриптами в QUIK]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3993#p3993</link>
			<description><![CDATA[<p><strong>dark184</strong>,<br />для Lua5.4 в архиве нет сборки.<br />Нужна?</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Mon, 28 Nov 2022 05:25:39 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3993#p3993</guid>
		</item>
	</channel>
</rss>
