Добрый день,
Ранее сообщал, что сделал возможность запуска скриптов QUIL в отдельных потоках в LUAJIT.
----------------
кратко это работает так.
В колбек OnParam приходят сделки инструментов, которые передаются в функцию main()
-----------------------
В main - это LUA 5.3 по каждому инструменту запускается скрипт алгоритма робота в отдельном потоке из пула потоков под LUAJIT.
======================
На просторах интернета нашел тесты по которым разработчики сравнивали MT5 сравнивали MQL5 и LUA в QUIK.
---------------------
вот сами тесты:
===================
На этих тестах я провел тест LUA 5.3 и LUAJIT.
==================
Результаты говорят сами за себя:
Когда подключу MT5 к QUIK, то сделаю тест и для него.
-----------------------
Следите за новостями.
Ранее сообщал, что сделал возможность запуска скриптов QUIL в отдельных потоках в LUAJIT.
----------------
кратко это работает так.
В колбек OnParam приходят сделки инструментов, которые передаются в функцию main()
-----------------------
В main - это LUA 5.3 по каждому инструменту запускается скрипт алгоритма робота в отдельном потоке из пула потоков под LUAJIT.
======================
На просторах интернета нашел тесты по которым разработчики сравнивали MT5 сравнивали MQL5 и LUA в QUIK.
---------------------
вот сами тесты:
| Код |
|---|
-- TestQuickSort
local array={}
local function QuickSort(arr,left,right)
local i=left
local j=right
local center=arr[math.floor((i+j)/2)]
while i<=j do
while(arr[i]<center and i<right) do i=i+1 end
while(arr[j]>center and j>left) do j=j-1 end
if i<=j then local x=arr[i] arr[i]=arr[j] arr[j]=x i=i+1 j=j-1 end
end
if left<j then QuickSort(arr,left,j) end
if right>i then QuickSort(arr,i,right) end
end
local function Start1()
for i=0,MAX_SIZE-1 do array[i]=i%100 end
start=os.clock()
QuickSort(array,0,MAX_SIZE-1)
res=(os.clock()-start)*1000
print("TestQuickSort SIZE="..MAX_SIZE..", time=" .. res .. " ms")
for i=1,MAX_SIZE-1 do
if array[i]<array[i-1] then print("Array not sorted"); break;
end
end
end
local str=""
local a={}
local function PiCalculate(digits)
local d = 0
local c = (math.floor(digits/4)+1)*14
local f = 10000
for i=0,c do a[i]=20000000 end
c=c-14
b=c
while b>0 do
e=d%f
d=e
while b-1>0 do
b=b-1
d = d * b + a[b]
g = (b * 2) - 1
a[b]=(d%g)*f
d=math.floor(d/g)
end
r=e+math.floor(d/f)
if r<1000 then
if(r>99) then
str=str .. "0"
else
if(r > 9) then
str=str .. "00"
else
str=str .. "000"
end
end
end
str=str .. string.format("%d",r)
c=c-14
b=c
end
end
function Start2()
start=os.clock()
PiCalculate(MAX_SIZE)
res=(os.clock()-start)*1000
print("TestPiCalculated SIZE="..MAX_SIZE..", time=" .. res .." ms Pi="..string.sub(str,1,16))
end
-- TestFibo
local fib={}
local function TestFibo(n)
if n<2 then return 1 else return TestFibo(n-2)+TestFibo(n-1) end
end
local function Start3()
start=os.clock()
for i=0,MAX_SIZE-1 do fib[i]=TestFibo(i) end
res=(os.clock()-start)*1000
print("TestFibo SIZE="..MAX_SIZE..", time="..res.." ms Fibo[39]="..fib[39])
end
-- TestArrays
local function Start4()
local x={} local y={}
local start=os.clock()
for i=1,MAX_SIZE,1 do x[i]=i y[i]=0 end
y[MAX_SIZE]=0
for k=1,MAX_SIZE,1 do
for i=MAX_SIZE, 1,-1 do y[i]=y[i]+x[i] end
end
local res=(os.clock()-start)*1000
local check=0
for k=1,MAX_SIZE,1 do check=check+y[k] end
print("Test Arrays SIZE="..MAX_SIZE..", Time = "..res.." ms check=".. check)
end
local function Ackermann(m,n)
if(m==0) then return(n+1) end
if(n==0) then return(Ackermann(m-1,1)) end
return(Ackermann(m-1,Ackermann(m,(n-1))))
end
-- TestAckermann
local function Start5()
local check=0
local start=os.clock()
for i=1,MAX_SIZE do check=check+Ackermann(1+i%3,1+i%5); end
local finish=os.clock()
local res=(finish-start)*1000
print("TestAckermann SIZE="..MAX_SIZE..",time=".. string.format("%.0f",res).." ms check="..check)
end
-- TestFloat
local f0=0.0
local f1=123.456789
local f2=98765.12345678998765432
local f3=12345678943.98
function TestFloat(MAX_SIZE)
MAX_SIZE=MAX_SIZE-1
for i=0, MAX_SIZE do
for j=0, MAX_SIZE do
f0=f0+(f1/(i+1))-f2+(f3*i);
end
end
end
function Start6()
local t=os.clock()
TestFloat(MAX_SIZE)
local res=(os.clock()-t)*1000
local check=f0
print("TestFloat SIZE="..MAX_SIZE..", time=" ..res.." ms check="..tostring(check));
end
MAX_SIZE=35000; Start6()
MAX_SIZE=120000; Start5()
MAX_SIZE=32000; Start4()
MAX_SIZE=40; Start3()
MAX_SIZE=22000; Start2()
MAX_SIZE=16000000; Start1()
|
На этих тестах я провел тест LUA 5.3 и LUAJIT.
==================
Результаты говорят сами за себя:
Когда подключу MT5 к QUIK, то сделаю тест и для него.
-----------------------
Следите за новостями.