Добрый день! Скачал с сайта Открытие дистрибутив по этой ссылке
Пытаюсь установить на виртуальную машину от 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
Подскажите пожалуйста, в чём может быть дело.
Все индикаторы на Lua
Пользователь
Сообщений: Регистрация: 29.03.2017
07.09.2021 15:42:28
P.S. скрипт работает и всё считает нормально, но в какой-то момент вылетает с этой ошибкой.
Все индикаторы на Lua
Пользователь
Сообщений: Регистрация: 29.03.2017
07.09.2021 15:35:25
Индикатор RSI вылетает с ошибкой
эта строка выглядит так
Код
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 18:38:56
Цитата
Игорь Б написал: Попробуйте обернуть в status_main, msg_main = pcall(function() end). Второй параметр дасть номер строки с ошибкой.
Ого, спасибо! Дельный совет.
Ошибка без указания строки в коде
Пользователь
Сообщений: Регистрация: 29.03.2017
23.08.2021 17:39:10
Код большой - 700 строчек. Я не знаю какую часть вам показать, не весь же.
Ошибка без указания строки в коде
Пользователь
Сообщений: Регистрация: 29.03.2017
23.08.2021 14:34:36
Цитата
написал: У вас, наверное, код скомпилирован с удалением отладочной информации?
обычный код я ничего необычного с ним не делал
Ошибка без указания строки в коде
Пользователь
Сообщений: Регистрация: 29.03.2017
23.08.2021 12:54:56
Добрый день Скрипт выдаёт ошибку без указания строки в коде. Как понять, где эта ошибка произошла?
Индикаторы для QUIK старше 8.3.2.4
Пользователь
Сообщений: Регистрация: 29.03.2017
26.06.2021 15:55:48
Добрый день. Давно пользуюсь этой библиотекой. Спустя два года запустил старый скрипт. Цель - получить последнюю свечу на графике.
В таком виде перестало работать.
Код
func1 = MA()
local num_candles=ds[instr]:Size()
last=func1(num_candles, {Period=mov_period, Metod = "SMA", VType="Typical"}, ds[instr])
А в таком почему-то работает. Главное отличие второго варианта: в нём рассчитываются все значения мувинга слева направо и потом берётся нужный. А в первом варианте я сразу обращался к нужной мне свече.
Код
func1 = MA()
local ma_count={}
local num_candles=ds[instr]:Size()
for i=1, num_candles do
ma_count[i]=func1(i, {Period=mov_period, Metod = "SMA", VType="Typical"}, ds[instr])
end
last = ma_count[#ma_count]
Что происходит утром?
Пользователь
Сообщений: Регистрация: 29.03.2017
01.02.2021 22:35:49
BlaZed, перечитайте мои два сообщения ещё раз. Egor Zaytsev ответил на мой вопрос, хотя я почему-то и правда был уверен, что main каждое утро в обязательно порядке САМ перезапускается. А в его начале у меня стоит функция чтения файла, который лежит на ноутбуке.
Уточните пожалуйста что происходит утром в плане: -работы main -существования переменных и таблиц скрипта.
Что запрограммировано, то и происходит. Ничем принципиальным утро от другого времени не отличается.
Не видя кода только можно гадать, что у вас там запрограммировано.
Смотрите почему у вас main повторно запускается, и как скрипт обрабатывает потерю связи, короче код смотрите.
Вы не в курсе дела. Или я не в курсе дела, что что-то изменилось. Каждое утро main перезапускается при смене сессии.
Что происходит утром?
Пользователь
Сообщений: Регистрация: 29.03.2017
01.02.2021 14:27:52
Уточню Я запустил скрипт, скрипт считал данные. Я надеюсь, что они лежат в памяти "вечно". Но по утрам всё обнуляется из-за повторного запуска main? КВИК на виртуалке не имеет постоянного доступа к ноутбуку. Я вышел с виртуалки, и связь с ноутбуком пропала. Но я рассчитываю, что считанные данные останутся в памяти.
Что происходит утром?
Пользователь
Сообщений: Регистрация: 29.03.2017
01.02.2021 14:00:48
Квик стоит на виртуалке. Скрипт лежит на моём ноутбуке. Скрипт читает файлик с сигналами, который тоже лежит на ноутбуке. Вид файла с сигналами: 01.02.2021 at 11:00 open_long SBER
Эта строка парсится и записывается в Луа-таблицу. Я надеюсь, что она вечно хранится в памяти. Но выходит что нет? Каждое утро Квик по новой запускает main и обнуляет все переменные? Уточните пожалуйста что происходит утром в плане: -работы main -существования переменных и таблиц скрипта.
Робот читает интернет-страницу
Пользователь
Сообщений: Регистрация: 29.03.2017
10.12.2020 19:35:29
Этот код уже очень давно не работает, потому что на смарт-лабе изменился интерфейс этой страницы. Она теперь совсем другая и не подходит под этот код.
Начал запускать свой старый скрипт. Он был 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 22:34:26
внезапно заработало само
Перестала работать getQuoteLevel2
Пользователь
Сообщений: Регистрация: 29.03.2017
22.06.2020 21:56:59
Да
Код
Subscribe_Level_II_Quotes("SPBFUT", inst)
и потом
Код
sleep (500)
Перестала работать 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
25.02.2020 16:59:45
Спасибо, Антон.
Код
os.execute("python.exe C:\\script.py")
работает и без указания полного пути к Питону. Я не знал, что так можно! Это решает мою проблему, я задал этот вопрос, так как думал, что нужен полный путь к python.exe
Получить путь к python.exe
Пользователь
Сообщений: Регистрация: 29.03.2017
25.02.2020 15:53:25
Цитата
Anton написал: Кстати говоря, переменная называется PYTHONPATH без андерскора, может в этом дело?
Антон, спасибо за вашу помощь, вот дополнительная информация Строчка
Код
message (os.getenv('PATH'),1)
выдаёт
То есть среди этих путей есть нужный! Но строка
Код
message (os.getenv('PYTHONPATH') or 'type_nil',1)
по прежнему выдаёт нил.
Получить путь к python.exe
Пользователь
Сообщений: Регистрация: 29.03.2017
24.02.2020 16:27:56
Цитата
Anton написал: Сразу в пути использовать переменную? Типа
Код
os.execute ( "%WINDIR%\\notepad.exe" )
Надо чтобы работало у любого желающего, кто захочет это запустить. Не только у меня. Надо универсальный метод.
Получить путь к 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 19:14:53
Я в этом плохо соображаю. Надо просто перекомпилировать в Visual Studio?
не является приложением 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
27.09.2019 20:46:22
Но мне нужен именно мелкий таймфрейм. Эти искажения влияют на работу луа-индикатора. Я сразу понял, что брокер не прав, говоря, что это проблема у меня в КВИКе. Значит, это они транслируют эти уродливые графики. Как это исправить?
Заполнение пропусков на графике
Пользователь
Сообщений: Регистрация: 29.03.2017
26.09.2019 10:41:10
Да код класса FEN. Это касается всех инструментов из него. Как видно на графике, эта проблема была всегда, а не только после указанной вам даты. Я уже неоднократно перезаказывал архив графиков, чистил .dat файлы, в которых они хранятся. Эти пустые свечки не пропадают с графика. Брокер ведёт себя так, словно это проблема у меня на КВИКе, но мой знакомый заходил под моей учёткой в новый скачанный квик на другом конце земного шара, и это проблема выглядела так же. Это брокер транслирует в КВИК эту ерунду, но почему-то ведёт себя странно и не признаёт этого.
Заполнение пропусков на графике
Пользователь
Сообщений: Регистрация: 29.03.2017
25.09.2019 16:08:29
Добрый день. Подписан у брокера Открытие на трансляцию мировых рынков. График по иностранным инструментам выглядит так: Искусственно заполняются неторговые часы. Брокер говорит, что эта проблема есть только у меня. По просьбе брокера я удалил все .dat файлы отовсюду, даже на всякий случай удалил info.wnd. Проблема осталась. Более того, она также воспроизводится на других экземплярах КВИКА. А у брокера (со слов менеджера) её нет. Верится с трудом. Теперь брокер просит выслать им архив КВИКа. Я не против, но прошу всё же ответа от компетентного специалиста-разработчика. Для сравнения, то же самое на других акциях - NVIDIA (ранее я их НЕ скачивал, этот график прилетел ко мне в терминал впервые)
Вопрос про OnAllTrade
Пользователь
Сообщений: Регистрация: 29.03.2017
10.09.2019 19:36:15
А как это лучше сделать? Ведь при первом запуске скрипта в, скажем 13 часов, КВИК сначала загружает историю сегодняшних сделок, и они выглядят как свежие, хотя они старые
Вопрос про 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
24.07.2019 18:15:35
Вот рабочий вариант, внедрённый в робота. Увы, приходится объявлять переменную paper как глобальную, потому что sec внутри fn не видна.
Код
function fn(t)
if stop_search then return nil end --stop_search - это флаг. Изначально равен nil
if t.sec_code == paper and t.client_code==client_code and t.limit_kind==2 then
stop_search=true
return true
else
return false
end
end
function get_position (sec)
paper=sec
stop_search=nil --убиваем флаг, выставленный на прежних запусках функции.
tbl_indxs=SearchItems('depo_limits', 0, getNumberOf("depo_limits")-1, fn)
if tbl_indxs then
limit = getItem("depo_limits", tbl_indxs[1]) --найден 1 индекс, его и берём.
local lot=lot[sec]--lot[sec] ранее определена
return limit.currentbal/lot,limit.locked_buy/lot, limit.locked_sell/lot, limit.awg_position_price
else
return 0,0,0,0
end
end
function fn(t)
if stop_search then return nil end --stop_search - это флаг. Изначально равен nil
if t.sec_code == sec and t.client_code==client_code and t.limit_kind==2 then
stop_search=true
return true
else
return false
end
end
function get_position (sec)
stop_search=nil --убиваем флаг, выставленный на прежних запусках функции.
tbl_indxs=SearchItems('depo_limits', 0, getNumberOf("depo_limits")-1, fn)
limit = getItem("depo_limits", tbl_indxs[1]) --найден 1 индекс, его и берём.
local lot=lot[sec]--lot[sec] ранее определена
return limit.currentbal/lot,limit.locked_buy/lot, limit.locked_sell/lot, limit.awg_position_price
end
Отправка транзакций из OnParam
Пользователь
Сообщений: Регистрация: 29.03.2017
22.07.2019 15:39:30
Nikolay Pavlov, спрошу про другой случай. Я знаю, что в нужной мне таблице только один элемент с нужным параметром. Например, я ищу в depo_limits текущий остаток по SBER. Как мне в SearchItems оборвать поиск сразу после того как SBER был найден?
Я делаю что-то в таком духе:
Код
function fn(t)
if t.sec_code == sec and t.client_code==client_code and t.limit_kind==2 then
return true
else
return false
end
end
tbl_indxs=SearchItems('depo_limits', 0, getNumberOf("depo_limits")-1, fn)
и второй вопрос, как мне в функцию fn передать переменную sec?
Отправка транзакций из OnParam
Пользователь
Сообщений: Регистрация: 29.03.2017
19.07.2019 07:40:15
Nikolay Pavlov, спасибо за совет! вопрос по SearchItems. Никогда с ней не работал.
Хочу получить мои сделки за сегодня по BANEP
Код
function fn (t)
if t.sec_code=='BANEP' then
return true
end
end
tbl=SearchItems('trades', 0, getNumberOf("trades")-1, fn, "qty,class_code, sec_code")
у меня за день и правда 90 сделок, но не понятно в чём толк этой функции? ----------------
Если написать чуть-чуть иначе:
Код
function fn (t)
if t.sec_code=='BANEP' then
return t
end
end
tbl=SearchItems('trades', 0, getNumberOf("trades")-1, fn)
то он пишет такое:
Цитата
1=18;2=20;3=21;
19,21,22 - это номера моих сделок с Башнефтью. С учётом сдвига всё верно. Но как получить все поля по этим сделкам?
Отправка транзакций из OnParam
Пользователь
Сообщений: Регистрация: 29.03.2017
19.07.2019 07:13:40
Nikolay Pavlov, переменная ticker_list из моего примера:
Код
1=SBER;2=GAZP;3=GMKN;4=LKOH;................
Ключ - число, значение - тикер. Ваш совет:
Код
function tableContains(table, key)
return table[key] ~= nil
end
не подойдёт в чистом виде. Разве что переделать тикер лист в
Код
'SBER'=1; 'GAZP' = 2; 'GMKN' = 3;
тогда ваша функция сработает. Но и в этом случае она где-то там невидимо для меня будет перебирать всю таблицу в поисках ключа. Спасибо за помощь!
Отправка транзакций из OnParam
Пользователь
Сообщений: Регистрация: 29.03.2017
19.07.2019 07:02:22
Nikolay Pavlov, посмотрел описание функции SearchItems. Почему вы её рекламируете по сравнению с
Код
for i=0,getNumberOf("orders")-1,1 do
В ней тоже задаётся список строчек с какой по какую искать. Если у меня за день 10 000 заявок, скрипт будет пробегать по всем. Разве не так?
Отправка транзакций из OnParam
Пользователь
Сообщений: Регистрация: 29.03.2017
18.07.2019 12:05:10
функция для снятия всех заявок. в неё передаётся таблица с тикерами.
Код
function CleanActive (ticker_list) --переписать её, чтобы искать с конца.
local row={}
for i=0,getNumberOf("orders")-1,1 do
row=getItem("orders",i)
local sec=row.sec_code
if table_contains(ticker_list, sec) and orderflags2table(row.flags).active then
res,ms=killOrder(tostring(row.order_num),sec,row.class_code)
end
end
end
Код
function table_contains(table, element)
for _, value in pairs(table) do
if value == element then return true end
end
return nil
end
Я запускаю CleanActive из OnStop и из самого начала функции main. Это очень часто вешает квик, приходится его убивать через окно с процессами.
Отправка транзакций из OnParam
Пользователь
Сообщений: Регистрация: 29.03.2017
14.07.2019 08:09:51
Заметил, что отправка транзакций - выставление и снятие заявок - трудоёмкая операция. Торгую 50-ю акциями. Если у меня висит 50 заявок, то при их массовом одновременном снятии квик подвисает на несколько секунд. При быстром выставлении такого же числа заявок он тоже зависает. Поэтому вопросы. 1. Наблюдения верны? Отправка транзакций - ресурсоёмкая процедура? 2. Хочу отправлять транзакции из OnParam. Это плохая идея? С точки зрения логики работы программы это было бы очень удобно. Сейчас у меня отправка заявок идёт в функции main, там в бесконечном цикле перебираются одна за другой 50 акций на соблюдение условия выставления/снятия. Хочу перенести этот блок в OnParam. Заявок ставится много, они всё время перевыставляются. В день отправляется до 10 тысяч заявок, то есть с учётом снятия это 20 000 транзакций.
Критерий исполнения заявки OnTrade
Пользователь
Сообщений: Регистрация: 29.03.2017
03.07.2019 15:49:28
Вопрос, связанные с троекратным приходом сделки. Если у меня заключается много сделок, в том числе почти одновременно, возможно ли, что три колбека перемежаются колбеками от соседних сделок. Ну например прилетает первый колбек по Сберу, потом один по Газпрому, а потом долетают ещё по два колбека от Газпрома и Сбера? Или они приходят строго очередями? Сначала три по одной бумаге, потом три по другой? --- Ну и раз вам эта проблема знакома, то какой лучший способ с нею бороться?
Критерий исполнения заявки OnTrade
Пользователь
Сообщений: Регистрация: 29.03.2017
02.07.2019 15:32:40
И ещё вопрос. Можно ли факт заключения сделки отслеживать через OnTransReply или он только для отправки ордеров?
Критерий исполнения заявки OnTrade
Пользователь
Сообщений: Регистрация: 29.03.2017
02.07.2019 15:27:38
Мне мерещится, или колбек OnTrade срабатывает три раза на каждую сделку? Один за другим приходят три отчёта о совершении одной сделки.
Выставить кодировку
Пользователь
Сообщений: Регистрация: 29.03.2017
02.07.2019 14:23:32
Пишу код в Notepad++ Стоит эта кодировка:
Строка
Код
send_msg ("Снята: "..k)
, где k - тикер, в квике выглядит так:
Как с этим бороться?
Локальность переменной
Пользователь
Сообщений: Регистрация: 29.03.2017
27.06.2019 18:56:54
Я не знаю быстрый или не быстрый. Просто читал что локальные переменные работают быстро. Ваше сообщение означает, что скорости не прибавится?