Матлаб из Клуа

Страницы: 1
RSS
Матлаб из Клуа
 
С Амиброкером не вышло, а вот с Матлабом похоже выходит:

Код
--require "w32" -- говорят что нужна, на практике не увидел
require "luacom"
local isrun = true

function OnStop(flag)
    isrun = false
end
function main()
--w32.CoInitialize(nil)

ML = luacom.CreateObject("matlab.application.single")
assert(ML)
ML.Visible = 1 -- не обязательно там все равно ничего в принципе не видно, но проще убить процесс если что

t = tos(0)
message("tos = " .. tostring(#t)) -- меньше 150 тк фильтр по "SPBFUT"

ML:PutWorkspaceData("C1", "base", t); -- отправляем в МЛ под именем С1
message("Put")
wd = ML:GetWorkspaceData('C1', 'base') -- а вот так получаем обратно
message("C1(1,1) = " .. tostring(wd[1][1]))
ML:Execute("r = TST;") -- в МЛ у меня эта функция пишет данные в файл и возвращает "1", если все гладко
r = ML:GetWorkspaceData('r', 'base') -- на прямую результат возвращает криво, так наверно удобнее
message("Execute TST = " .. tostring(r))

ML:Quit()
ML = nil
--w32.CoUninitialize(nil)
message("end COM ML")
end

function tos(n) -- читает ТОС  в матрицу начиная с "n"
   local outcell = {}
   local cnt = 0
   nn = getNumberOf("all_trades")
   for i = n, 150 do -- для примера хватит 150 строчек, но максимум 1500 * 5
                                 -- приходится ограничить - у LuaVM случается грыжа при передаче в МЛ более чем 2000*5
      trade = getItem("all_trades", i)
      cc = trade["class_code"]
      if cc == "SPBFUT" then
         cnt = cnt + 1
         dt = trade["datetime"]
         dt = dt.hour*10000 + dt.min*100 + dt.sec
         outcell[cnt] = {trade.trade_num, trade.sec_code, trade.qty, trade.price, dt}
      end
   end
   return outcell
end
 
из собственного опыта.
Я использовал из матлаба любые методы следующим образом:
1) Пишем программу в матлаб.
2) Преобразуем ее средствами матлаб в прогамму на С либо С++ (по вкусу)
3)  создаем DLL.
4) Подключаем DLL к LUA.
5) работаем в реале без загрузки матлаба и с высокой скоростью.
 
 
Цитата
Николай Камынин написал:
4) Подключаем DLL к LUA.

Где почитать подробнее про этот пункт?
А матлаб не так уж и сильно грузит, не знаю пока как быстр обмен по Кому.
 
Цитата
валерий написал:
Цитата
Николай  Камынин   написал:
4) Подключаем DLL к LUA.
Где почитать подробнее про этот пункт?
А матлаб не так уж и сильно грузит, не знаю пока как быстр обмен по Кому.
почитать в API C для LUA.  В инете полно.
--------------------
У Вас получается две вм машины работают  VM LUA и VM Matlab. А это хорошие расходы ресурсов.
-------------------------
А Вы для чего матлаб подключаете?
Может не имеет смысла вычислять 2+2 на матлабе?
 
Цитата
Николай Камынин написал:
Может не имеет смысла вычислять 2+2 на матлабе?

В принципе согласен, всякие там нейросети как-то не дали особого преимущества, а посчитать МА можно и в экселе. Но МЛ надежен, удобен, универсален. Так что там у меня всё и системы и базы и типа бухгалтерии с выводом в эксель. Оргцентр в общем.
API C для LUA полно, но в основном наоборот из С в LUA. Пока не нашел, что мне бы нужно или не понял. Си не знаю. Кстати, Луа только Си с плюсами принимает, а то бы на шарпе я бы мог.
 
Цитата
валерий написал:
Цитата
Николай  Камынин   написал:
4) Подключаем DLL к LUA.
Где почитать подробнее про этот пункт?
https://quik2dde.ru/viewforum.php?id=14
 
Цитата
swerg написал:
Где почитать подробнее про этот пункт?
https://quik2dde.ru/viewforum.php?id=14

Спасибо но там для меня сложновато и не очень надежно. А вот ваша StaticVar.dl кажется весьма может пригодиться. Спасибо.
Страницы: 1
Читают тему
Наверх