76 (2019-11-19 10:39:57 отредактировано toxa)

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

swerg пишет:

Одного опасаюсь: при таком синтаксисе (прям как таблицы) пользователи решат, что это прям натурально Lua-таблицы и начнут использовать/требовать общение и синтаксис обращения к ним как полностью аутентичным Lua-таблицам (применяя всякие table.sort(), table.insert, итерирование в for и т.п.). А т.к. пока (для скорости обмена между скриптами скриптами) предполагается это реализовывать вручную, не копируя в реальные промежуточные Lua-таблицы (при обращении по индексам), то как бы не замаяться всё это поддерживать smile

это не кажется таким уж сложным, если в качестве хранилища использовать не свои структуры, а lua же. понадобится три вещи: функция deepcopy(source_lua_state, dest_lua_state) которая копирует объект со стека одного стейта в стек другого и метаметоды __index и __newindex для таблицы, которую возвращает либа. deepcopy() должна быть защищена критической секцией, а внутри рекурсивно обходить все вложенные объекты. и, кстати, по скорости будет так же.

[s]можно реализовать две стратегии: все скрипты разделяют один объект, либо в каждом скрипте есть своя копия, и мы делаем копирование во все экземпляры. все зависит от того, что пользователь делает чаще: чтение или запись и насколько записываемые объекты развесисты.[/s] второй вариант не получится.

ps: кстати, если остановить все скрипты, использующие staticvar, то хранилище обнулится. наверное, это не очень хорошо. можно грузить либу-владелицу хранилища в квик при первой записи в хранилище, а выгружать - на wm_close основного окна quik.

77 (2019-11-21 14:44:00 отредактировано toxa)

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

.

78 (2019-11-21 14:44:27 отредактировано toxa)

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

создал отдельную тему: [url]https://quik2dde.ru/viewtopic.php?pid=2519#p2519[/url]

79

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

А с последним квиком (8.6) она работает? Что-то у меня не получается подключить.

80 (2020-08-19 22:36:40 отредактировано mzhumakhanov)

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

vasionok пишет:

А с последним квиком (8.6) она работает? Что-то у меня не получается подключить.

У меня тоже не завелось. Там lua 5.3, под него надо пересобирать. Ни разу не пробовал, но можно и попробовать.
Вроде нужная либа, удивительно, что мало активности. Может все на lua_share сидят. smile

UPD: пока перешел на lua_share, поживу на нем, пересборка StaticVar мне обойдется дольше по времени

81

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

vasionok пишет:

А с последним квиком (8.6) она работает? Что-то у меня не получается подключить.

Сделана поддержка QUIK 8.5 и далее.
Поддержка версий 8.0...8.4 убрана.

Всё по ссылкам во втором посте темы.

82 (2022-11-27 14:10:06 отредактировано dark184)

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

Разбираюсь с библиотекой, что то она не хочет запускаться в версии луа 5.4.1 с ошибкой multiple Lua VMs detected. Expected 5.3 instead of 5.4, но в 5.3.5 запускается. Правда только запускается, работу пока не проверял. Так и должно быть?
Квик 9.7.1.10, dll брал по инструкции из папки x64 и скопировал в корень папки квика QUIK_x64.
Проблема в том, что в версии 5.3.5 была у меня проблема со скриптами насколько я помню...

83 (2022-11-27 22:35:17 отредактировано toxa)

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

вы про либу StaticVar?

84

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

dark184,
для Lua5.4 в архиве нет сборки.
Нужна?

85

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

Если можно.

86

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

dark184,
написал вам на e-mail
Еще кому нужна для Lua5.4 - пишите на swerg@swerg.ru

87 (2022-12-05 11:01:54 отредактировано dark184)

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

К сожалению не видел в почте письма, видимо ушло в спам ;( За это время я тоже не бездельничал, подумал что библиотека больше не поддерживается. Продумываю и начал реализацию другой концепции, объединения всех роботов в один. Возможно не самое лучшее решение, но по крайней мере не будет зависимости от сторонних библиотек. В любом случае робот еще очень далек от совершенства и версий луа сменится еще с десяток пока я завершу его. А возможно это эпопея с роботами будет продолжаться бесконечно. Сколь бы не идеален был робот, а стратегии в любом случае будут меняться, добавляться новые, некоторые уже показывают свою неэффективность на определенных инструментах, а на других крайне эффективны... Я изначально писал робота с четким разделением на части, это "торговая" часть, она работает исключительно на торгах, и часть "стратегии", которая к бирже не прикасается и занимается исключительно анализом...

88

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

Пытаюсь прикрутить StaticVar.dll  к индикатору 

Settings = {
    Name = "goodmode"
}

-- Create a global table to store data
myData = {}
 
function Init()
    -- Add the required code here
    stv = require("StaticVar")
    stv.UseNameSpace("testNS")
    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("xxx", info.sec_code)
  end
        
    return 0
end  

и забирать переменную скриптом 


stv = require("StaticVar")

stv.UseNameSpace("testNS")

function main()
     
    message("(test-2) " .. tostring(stv.GetCurrentNameSpace()) .. ".xxx=" .. tostring(stv.GetVar("xxx")), 1)
end

к сожалению не работает. есть вероятность что я что-то делаю не так и из индикатора можно давать данные в  UseNameSpace ?

89

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

Alexey89
Надо скрипт переделать  так:

stv = require("StaticVar")

function main()
    stv.UseNameSpace("testNS")    -- вот эту строку надо перенести сюда
    message("(test-2) " .. tostring(stv.GetCurrentNameSpace()) .. ".xxx=" .. tostring(stv.GetVar("xxx")), 1)
end

И всё заработает.

Суть в том, что UseNameSpace() работает "раздельно" в основном потоке выполнения (callback'и)  и в main()
Сделано это было вот почему, вот для какого сценария:
Выполняется main(), в ней выполняется вызов  UseNameSpace(). Разумеется, код в main() ожидает, что указанный NameSpace и будет выбран до нового вызова UseNameSpace() в коде main().
Тут одновременно c main() запускается какой-то callback (т.к. работает в основном потоке), в коде которого вызывается UseNameSpace(), устанавливая свой NameSpace для работы callback'а. Т.е. код callback'а отдельно устанавливает свой  NameSpace для своей работы.
Но код main() в это время ведь тоже продолжает выполняться, подразумевая своё значение NameSpace.

Поэтому и было сделано такое вот разделение: в main() устанавливается и поддерживается свой NameSpace, в остальном коде (коде основного потока) - свой NameSpace.

В общем надо отдельно не забывать устанавливать требуемый NameSpace как в main(), так и в каждом callbak'е.

Хотя, возможно, в вашем случае никакие NameSpace устанавливать и не требуется.

90

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

О великий Swerg. Заработало!!!!   Круть неимоверная. Теперь я эту переменную прикручу так что при запуске скрипта на активный график ставится заявка. С ценой  priceLAST  + несколько шагов.  Считалку числа лотов прикручу. И надеюсь будет толк.

Еще вопросик в квике поставил версию 5.3.5 под 5.4.1 работать отказалась это баг или фича?

91

Re: StaticVar: Обмен данными между Lua-скриптами в QUIK

Alexey89, сборку для Lua 5.4 высылаю по запросу
Напишите на swerg@swerg.ru