Добрый день! Скачал с сайта Открытие дистрибутив по этой ссылке
Пытаюсь установить на виртуальную машину от RuVDS Операционная система Windows Server 2022, IP - Швейцария
На всех этапах установки и использования кириллица превратилась в кракозябры см скриншот
Ранее КВИК стоял на виртуалке другого сервиса - UltraVDS, там такой проблемы не было. Это был Windows Server 2016, IP - Москва.
Где это настраивается? Спасибо
Получить значение линии на графике
Пользователь
Сообщений: Регистрация: 29.03.2017
19.03.2022 20:59:09
Я нарисовал линии на графике. Можно ли получить с помощью Луа их значения?
Например, значение линии на такую-то дату и время было 108500?
Индикатор RSI из INDICATORS.ZIP вылетает с ошибкой
Пользователь
Сообщений: Регистрация: 29.03.2017
07.09.2021 22:36:03
Индикатор RSI из INDICATORS.ZIP вылетает с ошибкой
эта строка выглядит так
Код
local val_Up = RSI_MA_U(it.l, {Period=P, Metod = M, VType=ANY}, {[it.l] = Up})
Вот код индикатора, уж не знаю какая это редакция, может не свежая.
Вызывается следующим блоком:
Код
func = RSI() ;
local rsi_count={}
nk=ds[real]:Size()
for i=1,nk do rsi_count[i]=func(i, {Period=rsi_period, VType="Typical"}, ds[real]) end
if rsi_count[nk]~=nil then
rsi0=rsi_count[nk]
rsi1=rsi_count[nk-1]
rsi2=rsi_count[nk-2]
rsi3=rsi_count[nk-3]
rsi4=rsi_count[nk-4]
max_rsi=math.max(rsi0,rsi1,rsi2,rsi3,rsi4)
in_rsi=math.min(rsi0,rsi1,rsi2,rsi3,rsi4)
else
mm (real.." "..nk.." rsi_count[num_candles]=nil") ; sleep (100)
end
Подскажите пожалуйста, в чём может быть дело.
Ошибка без указания строки в коде
Пользователь
Сообщений: Регистрация: 29.03.2017
23.08.2021 12:54:56
Добрый день Скрипт выдаёт ошибку без указания строки в коде. Как понять, где эта ошибка произошла?
Что происходит утром?
Пользователь
Сообщений: Регистрация: 29.03.2017
01.02.2021 14:00:48
Квик стоит на виртуалке. Скрипт лежит на моём ноутбуке. Скрипт читает файлик с сигналами, который тоже лежит на ноутбуке. Вид файла с сигналами: 01.02.2021 at 11:00 open_long SBER
Эта строка парсится и записывается в Луа-таблицу. Я надеюсь, что она вечно хранится в памяти. Но выходит что нет? Каждое утро Квик по новой запускает main и обнуляет все переменные? Уточните пожалуйста что происходит утром в плане: -работы main -существования переменных и таблиц скрипта.
Не является приложением Win32
Пользователь
Сообщений: Регистрация: 29.03.2017
02.10.2020 17:15:09
Начал запускать свой старый скрипт. Он был 100% рабочим. Теперь на версии КВИКа 8.8.4.3 вылазит ошибка: смысл понятен - мне надо 32 битную, а тут 62. Но как с этим бороться, - не понимаю. Скрипт пытается сделать
Код
require"socket"
а потом
Код
local RANDOM_SEED=socket.gettime()*10000
Установлена библиотека LuaForWindows и сама Луа.
Плановые чистые позиции
Пользователь
Сообщений: Регистрация: 29.03.2017
14.09.2020 19:50:44
Как рассчитывается поле "Плановые чистые позиции"? Учитывает ли оно вар.маржу и накопленный доход?
Перестала работать getQuoteLevel2
Пользователь
Сообщений: Регистрация: 29.03.2017
22.06.2020 21:02:49
После обновления квика до 8.6.0.97 перестала работать функция getQuoteLevel2 строка
Код
qt = getQuoteLevel2 ('SPBFUT','SRU0')
на вечерней сессии возвращает
С другим запросом
Код
qt = getQuoteLevel2 ('TQBR','GAZP')
та же картина. Сейчас идёт вечорка, про другие сессии не знаю пока.
getCandlesByIndex - разница в свечах
Пользователь
Сообщений: Регистрация: 29.03.2017
03.05.2020 13:04:29
Почему такая разница в выводимых значениях:
Код
--save IMOEX quotes
t,n,_ = getCandlesByIndex("IMOEX",0,0,getNumCandles ('IMOEX'))
mm (#t) =>3008
mm (getNumCandles ('IMOEX')) =>3009
mm (n) =>3009
Большие иконки
Пользователь
Сообщений: Регистрация: 29.03.2017
26.03.2020 22:15:28
Я удалил все .dat файлы. В итоге сильно изменился внешний вид иконок. Они стали очень большими. Как регулировать их размер? Версия квика 8.3.2.4
Обращение к элементу большой таблицы
Пользователь
Сообщений: Регистрация: 29.03.2017
29.02.2020 15:07:41
У меня огромная таблица big_base с миллионом свечей. в течение итерации происходит обращение к отдельным её элементам:
Код
перебор candle, начало итерации:
big_base[candle][1]
потом снова
big_base[candle][1]
потом
big_base[candle][2]
является ли это обращение долгим? Возможно, лучше написать:
Код
перебор candle, начало итерации:
current_candle = big_base[candle]
а потом писать
current_candle[1]
current_candle[1]
current_candle[2]
Ускорит ли это работу скрипта, или Луа настолько хорош, что обращение к индексу многомиллионной таблицы идёт быстро?
Получить путь к python.exe
Пользователь
Сообщений: Регистрация: 29.03.2017
24.02.2020 09:46:00
Пытаюсь получить путь к файлу python.exe Строка на Луа
Код
os.getenv("PYTHON_PATH")
выдаёт nil Питон свежей версии установлен в необычную папку: C:\InstallPython\python.exe Подскажите, как средствами Луа получить путь к python.exe
не является приложением Win32
Пользователь
Сообщений: Регистрация: 29.03.2017
04.02.2020 17:49:19
Робот на Луа использует dll на С++ В версии КВИКа 7 всё работает как надо, в версии квика 8 выдаёт ошибку:
error loading module 'socket.core' from file 'C:\Program Files (x86)\Lua\5.1\clibs\socket\core.dll': не является приложением Win32.
Как с этим бороться?
Заполнение пропусков на графике
Пользователь
Сообщений: Регистрация: 29.03.2017
25.09.2019 16:08:29
Добрый день. Подписан у брокера Открытие на трансляцию мировых рынков. График по иностранным инструментам выглядит так: Искусственно заполняются неторговые часы. Брокер говорит, что эта проблема есть только у меня. По просьбе брокера я удалил все .dat файлы отовсюду, даже на всякий случай удалил info.wnd. Проблема осталась. Более того, она также воспроизводится на других экземплярах КВИКА. А у брокера (со слов менеджера) её нет. Верится с трудом. Теперь брокер просит выслать им архив КВИКа. Я не против, но прошу всё же ответа от компетентного специалиста-разработчика. Для сравнения, то же самое на других акциях - NVIDIA (ранее я их НЕ скачивал, этот график прилетел ко мне в терминал впервые)
Вопрос про OnAllTrade
Пользователь
Сообщений: Регистрация: 29.03.2017
10.09.2019 19:23:44
Я подписываюсь на новые сделки через INTERVAL_TICK и обрабатываю их в OnAllTrade Хочу анализировать только новые сделки. Старые сделки, уже прошедшие за сегодня, обрабатывать не хочу. Есть ли риски, что в OnAllTrade прилетит старая сделка из сегодняшних? Ну например при первом старте КВИКа в 13 часов в КВИК начнут сыпаться ранее прошедшие сделки. Они мне не нужны. И только потом начнут поступать новые.
Имитировать continue
Пользователь
Сообщений: Регистрация: 29.03.2017
08.08.2019 19:01:27
В последующих версиях Lua есть функция continue, но КВИК работает на древней версии Луа, где такой опции нет. можно ли как то силами Lua написать свою функцию continue и легко вставлять её в нужные куски кода, например:
Код
function continue ()
--бла-бла-бла
end
for i=1, 10 do
if i==5 then continue() end
--бла-бла
end
Отправка транзакций из OnParam
Пользователь
Сообщений: Регистрация: 29.03.2017
14.07.2019 08:09:51
Заметил, что отправка транзакций - выставление и снятие заявок - трудоёмкая операция. Торгую 50-ю акциями. Если у меня висит 50 заявок, то при их массовом одновременном снятии квик подвисает на несколько секунд. При быстром выставлении такого же числа заявок он тоже зависает. Поэтому вопросы. 1. Наблюдения верны? Отправка транзакций - ресурсоёмкая процедура? 2. Хочу отправлять транзакции из OnParam. Это плохая идея? С точки зрения логики работы программы это было бы очень удобно. Сейчас у меня отправка заявок идёт в функции main, там в бесконечном цикле перебираются одна за другой 50 акций на соблюдение условия выставления/снятия. Хочу перенести этот блок в OnParam. Заявок ставится много, они всё время перевыставляются. В день отправляется до 10 тысяч заявок, то есть с учётом снятия это 20 000 транзакций.
Выставить кодировку
Пользователь
Сообщений: Регистрация: 29.03.2017
02.07.2019 14:23:32
Пишу код в Notepad++ Стоит эта кодировка:
Строка
Код
send_msg ("Снята: "..k)
, где k - тикер, в квике выглядит так:
Как с этим бороться?
Критерий исполнения заявки OnTrade
Пользователь
Сообщений: Регистрация: 29.03.2017
27.06.2019 18:12:04
Как с помощью колбека OnTrade понять, что заявка с известным номером исполнилась полностью или частично? Как то же самое узнать с помощью колбека OnOrder?
Локальность переменной
Пользователь
Сообщений: Регистрация: 29.03.2017
27.06.2019 14:12:12
Я хочу, чтобы таблица (или любая переменная) была локальной ради скорости её обработки
local row={} for i=0,getNumberOf("orders")-1,1 do row=getItem("orders",i) end
является ли в этом примере row локальной? Строка row=getItem("orders",i) не превращает ли её в глобальную? Ведь здесь идёт повторное объявление.
No such file
Пользователь
Сообщений: Регистрация: 29.03.2017
27.06.2019 10:37:55
Получаю ошибку
Скрипт организован вот так: То есть он не видит файл в той же папке где лежит запускаемый скрипт. Но стоит запускамый скрипт Unitas 3.0.lua удалить а потом добавить, как всё начинает работать:
Запустил КВИК, нажал кнопку Запустить - не работает. Удалил скрипт из списка, добавил снова, запустил - работает.
биржа или брокер?
Пользователь
Сообщений: Регистрация: 29.03.2017
13.06.2019 13:13:12
биржа штрафует за ошибочные транзакции. хочу уточнить - если я вижу такое сообщение, значит моя транзакция не долетела до биржи и отбита сервером брокера?
Индикатор фрактал
Пользователь
Сообщений: Регистрация: 29.03.2017
08.06.2019 23:41:22
Пытаюсь переписать на Питоне индикатор Фрактал (код ниже). Но не могу понять что в этом коде происходит. Помогите пожалуйста написать на питоне индикатор фрактал для самого простого случая - список цен: Например, как найти верхний фрактал (для пиков)? price=[186.99,190.99,191.24,197,196.75,196.8,196.8,198,201.26,203.32,208.44,207.17,207.95,210.4,212.2,212,209.7,213.61,213.14,217.9,216.29,215.5,217.85,216.59,211.01,210.43,214,219.1,213.9,204.43,208,204.19,202.08,206.89,203.41,205.25,205.86,205.8,205.4,207.8,206.54,205.5,202.92,205,203.95,205.25,205.1,206,203.66,203.55,205.9,207.7,209.8,210.61,207.7,214,218,214.1,215.07,214.42,217.7,218.23,219.05,221.8,227.5,232.3,238,243.68,238.86,239.5,237.8,233.24,234.3,232.79,232.6,235.41,235.67,236,227.8,223.18,228.8,225.17,229.1,232.52,232.8,231.49,230,227,224.22,227.88,228.69,228.19,226.94,226]
Код
Settings = {
Name = "*FRACTALS (Fractals)",
Period = 5,
line = {{
Name = "Horizontal line",
Type = TYPE_LINE,
Color = RGB(140, 140, 140)
},
{
Name = "FRACTALS - Up",
Type = TYPE_TRIANGLE_UP,
Color = RGB(0, 206, 0)
},
{
Name = "FRACTALS - Down",
Type = TYPE_TRIANGLE_DOWN,
Color = RGB(221, 44, 44)
}
},
Round = "off",
Multiply = 1,
Horizontal_line="off"
}
function Init()
func = FRACTALS()
return #Settings.line
end
function OnCalculate(Index)
local Out1,Out2 = func(Index, Settings)
SetValue(Out1, 2, ConvertValue(Settings,H(Out1)))
SetValue(Out2, 3, ConvertValue(Settings,L(Out2)))
return tonumber(Settings.Horizontal_line),nil,nil
end
function FRACTALS() --Fractals ("FRACTALS")
local H_tmp={}
local L_tmp={}
local it = {[1]=0, l=0}
return function (I, Fsettings, ds)
local Fsettings=(Fsettings or {})
local P = (Fsettings.Period or 5)
if (P>0) then
if I == 1 then
H_tmp={}
L_tmp={}
it = {[1]=0, l=0}
end
if CandleExist(I,ds) then
if I~=it[Squeeze(it.l,P)] then
it.l = it.l + 1
it[Squeeze(it.l,P)] = I
end
local Ip,Ipppp = Squeeze(it.l,P),Squeeze(it.l,P-1)+1
local nP = math.floor(P/2)*2+1
H_tmp[Ipppp] = GetValue(it[Ip],HIGH,ds)
L_tmp[Ipppp] = GetValue(it[Ip],LOW,ds)
if it.l >= nP then
local S = it[Squeeze(it.l-nP+1+math.floor(nP/2),P)]
local val_h=math.max(unpack(H_tmp))
local val_l=math.min(unpack(L_tmp))
local L = GetValue(S,LOW,ds)
local H = GetValue(S,HIGH,ds)
if (val_h == H) and (val_h >0)
and (val_l == L) and (val_l > 0) then
return S,S
else
if (val_h == H) and (val_h > 0) then
return S,nil
end
if (val_l == L) and (val_l > 0) then
return nil,S
end
end
end
end
end
return nil,nil
end
end
SMA,MMA,EMA,WMA,SMMA,VMA = "SMA","MMA","EMA","WMA","SMMA","VMA"
OPEN,HIGH,LOW,CLOSE,VOLUME,MEDIAN,TYPICAL,WEIGHTED,DIFFERENCE,ANY = "O","H","L","C","V","M","T","W","D","A"
function CandleExist(I,ds)
return (type(C)=="function" and C(I)~=nil) or
(type(ds)=="table" and (ds[I]~=nil or (type(ds.Size)=="function" and (I>0) and (I<=ds:Size()))))
end
function Squeeze(I,P)
return math.fmod(I-1,P+1)
end
function ConvertValue(T,...)
local function r(V, R)
if R and string.upper(R)== "ON" then R=0 end
if V and tonumber(R) then
if V >= 0 then return math.floor(V * 10^R + 0.5) / 10^R
else return math.ceil(V * 10^R - 0.5) / 10^R end
else return V end
end
if arg.n > 0 then
for i = 1, arg.n do
arg[i]=arg[i] and r(arg[i] * ((T and T.Multiply) or 1), (T and T.Round) or "off")
end
return unpack(arg)
else return nil end
end
function GetValue(I,VT,ds)
VT=(VT and string.upper(string.sub(VT,1,1))) or ANY
if VT == OPEN then --Open
return (O and O(I)) or (ds and ds:O(I))
elseif VT == HIGH then --High
return (H and H(I)) or (ds and ds:H(I))
elseif VT == LOW then --Low
return (L and L(I)) or (ds and ds:L(I))
elseif VT == CLOSE then --Close
return (C and C(I)) or (ds and ds:C(I))
elseif VT == VOLUME then --Volume
return (V and V(I)) or (ds and ds:V(I))
elseif VT == MEDIAN then --Median
return ((GetValue(I,HIGH,ds) + GetValue(I,LOW,ds)) / 2)
elseif VT == TYPICAL then --Typical
return ((GetValue(I,MEDIAN,ds) * 2 + GetValue(I,CLOSE,ds))/3)
elseif VT == WEIGHTED then --Weighted
return ((GetValue(I,TYPICAL,ds) * 3 + GetValue(I,OPEN,ds))/4)
elseif VT == DIFFERENCE then --Difference
return (GetValue(I,HIGH,ds) - GetValue(I,LOW,ds))
else --Any
return (ds and ds[I])
end
return nil
end
Стакан или Текущая таблица
Пользователь
Сообщений: Регистрация: 29.03.2017
31.05.2019 18:07:46
Записываю лучшие биды и аски по акциям средней ликвидности, например Распадская RASP. Что лучше выбрать: OnParam или OnQuote? Сомнения связаны с тем, что текущая таблица транслируется срезами раз в 50 миллисекунда, то есть будут пропущенные данные. А стакан? Он транслируется срезами или безостановочно?
attempt to concatenate field '?' (a nil value)
Пользователь
Сообщений: Регистрация: 29.03.2017
16.05.2019 07:37:50
Строка
Код
" sd="..(t_big[candle][6] or "nil")
выдаёт ошибку attempt to concatenate field '?' (a nil value) 6-поле действительно нил. Как правильно написать эту фразу?
Шаг вперёд в цикле
Пользователь
Сообщений: Регистрация: 29.03.2017
29.03.2019 10:52:43
Есть цикл, внутри которого качаются котировки с финама по многим инструментам. for i=start_year,cur_year,1 do
end В начале почти по всем акциям прилетают пустые годы (котировок ещё нет) Первый НЕпустой год я брать не хочу, потому что котировки ещё не адекватные. Я хочу брать второй не пустой год. То есть цикл должен быть таким
Код
for i=start_year,cur_year,1 do
--если размер таблицы нулевой, шагаем на 2 шага
--после этого всегда шагаем 1 шагом
end
как это написать?
доступ к большим таблицам
Пользователь
Сообщений: Регистрация: 29.03.2017
21.03.2019 18:12:32
Есть две огромных таблицы, которые описывают одни и те же свечки
Код
t_big[candle] --хранит цены: {1=open,2=high,3=low,4=close}
sd[candle]--хранит стандартные отклонения для этих свечек: sd[candle]=4.6432234444
Брут форс многкратно обращается к этим полям в поисках наилучших параметров. Крутит цикл, внутри него ещё цикл, а потом ещё цикл. На просчёт пятиминуток за 12 лет по 21 акции у меня ушла неделя. Объединение этих таблиц в одну приведёт ли к ускорению доступа к их полям? Хотя бы небольшому. Или это нейтрально?
Когда всё работает нормально, в чёрном окошке пишется то, что задумано. Это пишет питоновская функция print: Lua-функция os.execute возвращает 0 (признак успеха). Но часто бывает такая ерунда. Чёрное окошко появляется, в нём ничего не пишется. До print в 14 строчке не доходит. И так навеки, пока это окошко не закрыть. После закрытия окошка функция os.execute раздупляется и возвращает огромное отрицательное число, например -1073741510 Данные не получены, надо запускать скрипт заново. Помогите побороть этот глюк. Самое обидное то, что функция os.execute на время пустого чёрного окошка оказывается в подвешенном состоянии. Пока висит чёрное окошко, она ничего не возвращает, а значит нельзя обработать ошибку.
Задать градиент
Пользователь
Сообщений: Регистрация: 29.03.2017
15.02.2019 21:35:59
Есть ряд чисел от 0 до 10 с шагом 0,1 0 - белый цвет (точнее розовый, доведённый до стадии белого) промежуточные цвета - розовые разной насыщенности 10 - красный цвет Чем ближе к 10, тем сильнее розовый превращается в красный. помогите пожалуйста задать это на Луа. Это будет работать в таблице КВИКа и задаваться через SetColor Если по простому, мне это надо, чтобы сильно упавшие акции были ярко-красными, а слабо упавшие были розовыми. Чем сильнее упала акция, тем интенсивнее красный цвет. Надеюсь, понятно выразил мысль.
Итераторы на Луа
Пользователь
Сообщений: Регистрация: 29.03.2017
04.02.2019 23:11:22
Читаю книжку Иерусалимскиса про Луа. Вот код оттуда.
Код
function values (t)
local i = 0
return function () i = i + 1; return t[i] end
end
t = {10, 20, 30}
iter = values(t) -- создает итератор
while true do
local element = iter() -- вызывает итератор
if element == nil then break end
print(element)
end
Код работает как запланировано:
Почему всё становится плохо, если строку
Код
local element = iter() -- вызывает итератор
заменить на
Код
local element = values(t)
Чем отличаются эти варианты?
откуда x
Пользователь
Сообщений: Регистрация: 29.03.2017
28.12.2018 00:25:25
Иду по книжке иерусалимскиса "Программирование на Луа" Поясните пожалуйста этот пример
Код
function derivative (f, delta)
delta = delta or 1e-4
return function (x) return (f(x + delta) - f(x))/delta end
end
c = derivative(math.sin)
print(math.cos(5.2), c(5.2))
Откуда function (x) return (f(x + delta) - f(x))/delta end берёт свой аргумент x?
Вопрос по книге Луа
Пользователь
Сообщений: Регистрация: 29.03.2017
04.12.2018 17:45:23
Подскажите пожалуйста, что в этом коде делает _Window и чем она отличается от Window?
Код
function Window (options)
-- проверка обязательных опций
if type(options.title) ~= "string" then
error("no title")
elseif type(options.width) ~= "number" then
error("no width")
elseif type(options.height) ~= "number" then
error("no height")
end
-- everything else is optional
_Window(options.title,
options.x or 0, -- значение по умолчанию
options.y or 0, -- значение по умолчанию
options.width, options.height,
options.background or "white", -- по умолчанию
options.border -- по умолчанию false (nil)
)
end
Это код из Главы 5.3. книги Иерусалимскиса Программирование на Луа. Речь идёт про именованные аргументы. Перед приведённым кодом идёт текст:
os.clock проблема
Пользователь
Сообщений: Регистрация: 29.03.2017
03.12.2018 10:49:35
Добрый день. Функция os.clock() почему то вернула неадекватное значение, хотя всегда работала нормально согласно ожиданиям. Терминал стоит на виртуалке, не выключался несколько недель. Произошёл "перешаг" в новый месяц с ноября на декабрь... Не знаю важно ли это для установления проблемы. Из за чего это может быть?
функция Unpack
Пользователь
Сообщений: Регистрация: 29.03.2017
02.12.2018 12:08:58
Здравствуйте. У меня работает эта функция в таком виде: print(unpack{10,20,30})
Но в том виде как в книжке по Луа, она выдаёт ошибку
map или чтение файла (dll на c++)
Пользователь
Сообщений: Регистрация: 29.03.2017
17.11.2018 22:11:55
пишу dll на C++ для КВИКа (вызывается через Lua) Схема действий такая. Десятки файлов, каждый по 50-100 тысяч строк хранят биржевую информацию, которую я каждый день записываю. Тестер будет прочёсывать множество таких накопленных файлов. Поиск наилучшего параметра будет проходить обычным брутфорсом, например, параметр А прогнать на каждом из файлов, меняя значение параметра с 1 до 100, то есть сто итераций. Какой путь лучше избрать с точки зрения скорости исполнения? 1. Значения из файла (те самые 50 тысяч строк) считываются в оперативную память и хранятся в массиве map. Робот прогоняет 100 значений параметра на содержимом этого map. 2. На каждой итерации робот читает файл строчку за строчкой, то есть каждый раз обращается к тексту, не запоминая содержимое файла. Что будет быстрее? Попробовать оба варианта мне будет сложно из-за слабых программистских навыков, поэтому прошу опытных людей подсказать лучший путь.
Фильтр премаркета
Пользователь
Сообщений: Регистрация: 29.03.2017
13.10.2018 20:05:47
Уже не первый год работаю с индикаторами INDICATORS.ZIP, написанными Сергеем Гороховым.
Как в этих индикаторах, на примере Moving Average отсекать свечки премаркета (те которые 9:59)? Где ставить проверку "Если время меньше 10 часов, то игнорировать свечу?" Спасибо.
Исполнить скрипт питона в Луа
Пользователь
Сообщений: Регистрация: 29.03.2017
12.10.2018 13:53:46
Пытаюсь из кода Lua исполнить питоновский скрипт. для этого вызываю
Код
os.execute("C:\\py+lua\\parser.py")
на мгновение появляется чёрное окошко, сразу исчезает и ничего не происходит os.execute возвращает 0.
профилирование кода Lua+dll
Пользователь
Сообщений: Регистрация: 29.03.2017
01.10.2018 22:40:44
Сижу туплю, не пойму как мне профилировать dll на Си++ с помощью Visual Studio 2017. dll вызывается из Луа Что писать в Command-line arguments и Working directory? При попытке запустить профилирование появляется ошибка: Это сопровождается текстом: Profiling started. Instrumenting D:\_c++\runfast\Release\runfast.dll in place Info VSP3049: Small functions will be excluded from instrumentation. Microsoft ® VSInstr Post-Link Instrumentation 15.8.18219.1 x86 Unable to obtain debug information. Link with the /PROFILE linker switch. PRF0002: Instrumentation failed with these options: /u "D:\_c++\runfast\Release\runfast.dll" /excludesmallfuncs. Please check the output window for additional details. Data written to D:\_c++\runfast\info181001(3).vsp. Profiling finished. Profiling complete.
Английские слова все понятны, но технический смысл я не улавливаю. Помогите пожалуйста
проблема LuaRocks
Пользователь
Сообщений: Регистрация: 29.03.2017
28.09.2018 22:22:01
Впервые пользуюсь установкой луа пакетов с помощью LuaRocks пробовал установить два пакета-безрезультатно. Выскакивает такая ошибка:
Сама luarocks работает. Команды выполняет:
% lua hello.lua
Пользователь
Сообщений: Регистрация: 29.03.2017
28.09.2018 19:09:07
Хочу систематизировать знания по Луа, читаю книгу Иерузалмиски Сразу какие-то непонятки:
у меня возникает такая проблема. Почему?
файл лежит в корне луа там где lua.exe
dofile в защищённом режиме
Пользователь
Сообщений: Регистрация: 29.03.2017
21.09.2018 21:12:01
В файле tbl.lua лежит небольшая таблица вида:
Код
t={
a=100
b=200
}
Но иногда в этом файле могут быть кривые данные. Если вызывать этот файл с помощью dofile (tbl.lua), могут быть ошибки и основной скрипт остановится с ошибкой. Как написать в духе:
dofile (tbl.lua), но если там нечитаемый бред, то идти дальше и не обновлять таблицу t (пользоваться старой).
Глобальные таблицы Lua на C++
Пользователь
Сообщений: Регистрация: 29.03.2017
14.09.2018 20:49:23
Прошу подсказать какой аналог глобальной таблицы Луа для Си++ Совсем точноЙ формулировкой вопроса будет, как то же самое написать на Си++
Код
ticker_list="GAZP,SBER,GMKN"
period_muvinga={}
period_muvinga.GAZP=23
period_muvinga.SBER=19
period_muvinga.GMKN=20
for sec in string.gmatch(ticker_list,"%a+") do
local period=period_muvinga[sec]
end
и второй вопрос. Когда дойдёт дело до объявления чего-то глобального в Си++ (то что является ответом на первый вопрос), в какой части кода это объявлять? Я пока не могу придумать ничего лучше кроме как здесь. Речь идёт про dll, написанную на Си++:
А этот цикл обрывается на второй итерации:
for (int i = 1; i<=4; i++){
printf("%i", i);
printf("\n");
lua_rawgeti(L, -2, i);
lua_getfield(L, -1, "quantity");
auto q = lua_tonumber(L, -1);
}
Пишет 1 2
Путём опытов я понял, что проблема в функции lua_rawgeti(L, -2, i); Она обрывает цикл на второй итерации. Почему? П.С. Если это важно, то всё это происходит внутри обработки колбека OnQuote
Передать getQuoteLevel2 в dll
Пользователь
Сообщений: Регистрация: 29.03.2017
30.08.2018 23:58:34
Спасибо этому форуму за советы и подсказки. Как принять в dll таблицу с целочисленными ключами, разобрался. Прошу подсказать как внутри dll разобрать по полям более сложную таблицу.
Код
qt=getQuoteLevel2(class, sec)
Согласно документации она возвращает таблицу, в которой два стринга и две вложенных таблицы. Мне нужны для работы все четыре. Как мне, к примеру, получить объём из 3-й котировки на покупку?
Для разбора таблицы с целочисленными индексами мой код внутри dll выглядит так:
Код
static int forLua_SumArray(lua_State* L) {
// Get the length of the table (same as # operator in Lua)
int n = lua_objlen(L, 1);
double sum = 0.0;
// For each index from 1 to n, get the table value as a number and add to sum
for (int i = 1; i <= n; ++i) {
lua_rawgeti(L, 1, i);
sum += lua_tonumber(L, -1);
lua_pop(L, 1);
}
lua_pushnumber(L, sum);
return 1;
}
dll против Луа. Странности
Пользователь
Сообщений: Регистрация: 29.03.2017
25.08.2018 22:18:55
Вот функция на Си++ внутри dll. Она принимает таблицу и выдаёт обратно в Луа сумму элементов этой таблицы.
Код
static int forLua_SumArray(lua_State* L) {
// Get the length of the table (same as # operator in Lua)
int n = lua_objlen(L, 1);
double sum = 0.0;
// For each index from 1 to n, get the table value as a number and add to sum
for (int i = 1; i <= n; ++i) {
lua_rawgeti(L, 1, i);
sum += lua_tonumber(L, -1);
lua_pop(L, 1);
}
lua_pushnumber(L, sum);
return 1;
}
Я ожидаю, что чем больше элементов будет в таблице, тем сильнее dll должна опережать аналогичные подсчёты в Луа. Написал код для сравнения скорости.
Код
iterations=1000000
function main ()
t={}
for i=1,20 do--вставляем в таблицу 20 элементов
table.insert(t,i)
end
--гоняем цикл миллион раз
start=os.clock()
for i=1,iterations do
s=runfast.SumArray(t)
end
finish_dll=os.clock()-start
mm("dll:"..finish_dll)
--гоняем цикл миллион раз
start=os.clock()
for i=1,iterations do
s=sum(t)
end
finish_lua=os.clock()-start
mm("Lua:"..finish_lua)
mm("Lua slower:"..math_round((finish_lua/finish_dll),1))
end
Луа медленнее в 2,4 раза. Я мучаюсь с Си ради роста скорости в 100 раз, ну да ладно. В 2,5 раза тоже кое-что. Сказываются транспортные издержки при перекидывании данных между Си и Луа. ************************ А теперь удивительное для меня. Заполняю таблицу 40 элементами.
Код
t={}
for i=1,40 do
table.insert(t,i)
end
Значит внутри Си++ будет производиться в 2 раза больше операций и она сможет лучше проявить своё преимущество в скорости по сравнению с Луа. Но нет: при 40 элементах в таблице преимущество Си в скорости такое же.
Почему? Я думал, что чем больше таблица, тем быстрее будет работать вариант кода с dll. Объясните пожалуйста.
luaL_len отсутствует в Lua 5.1
Пользователь
Сообщений: Регистрация: 29.03.2017
24.08.2018 23:39:06
Пытаюсь в моей dll применить код на Си
Код
static int forLua_SumArray (lua_State* L) { // Get the length of the table (same as # operator in Lua)
int n = luaL_len(L, 1);
double sum = 0.0;
// For each index from 1 to n, get the table value as a number and add to sum
for (int i = 1; i <= n; ++i) {
lua_rawgeti(L, 1, i);
sum += lua_tonumber(L, -1);
lua_pop(L, 1);
}
lua_pushnumber(L, sum);
return 1;
}
всё хорошо, но в Луа 5.1. нет функции luaL_len. Она появилась в более поздних версиях. Вот код этой функции в Луа 5.3.
Как мне это внедрить в свою dll? Как дописать строку в lauxlib.h - это понятно. А вот файла lauxlib.c в моей Луа 5.1.5 вообще нет.
Стек при 2 функциях (dll)
Пользователь
Сообщений: Регистрация: 29.03.2017
24.08.2018 13:06:27
У меня в dll две функции. Обе постоянно что то делают со стеком. Есть ли риски того, что они будут по ошибке брать элементы друг друга? Или для каждой из них свой стек и путаница не грозит?
Поместить колбек в dll
Пользователь
Сообщений: Регистрация: 29.03.2017
23.08.2018 14:38:03
Как делать простые вещи с dll вроде разобрался. Прошу проконсультировать, как поместить в dll колбек OnQuote Чтобы это выглядело как то так: package.cpath = "C:\\runfast.dll" require "runfast" runfast.OnQuote() ... и так далее. Ума не приложу где мне эту строчку runfast.OnQuote() размещать. За пределами main как и сейчас? подскажите пожалуйста
Арифметические операции со временем
Пользователь
Сообщений: Регистрация: 29.03.2017
21.08.2018 14:24:21
Я совершаю в Луа арифметические операции со временем. Например 124500+5=124505 (12:45:05). По какой формуле я могу избежать проблемы с 60 минутами/секундами? 124459+5=124504 (не 124464) Как этого добиться?