Скрипт продолжает работать после выключения терминала, разрыва соединения, снятия всех сделок, После разрыва соединения со стороны брокера, скрипт не остановился и продолжает работать, не ясно как выключить
boolean.rat написал: возможно, создалась некая очередь на транзации у брокера, что и исполняется, пока не закончилась, если верна догадка, были ли другие подобные прецеденты, есть ли инструмент у конечного пользователя эту очередь очистить, не ожидая брокера?
вообще-то это называется DDoS атака. Но вы ее неправильно организовали, поэтому сервер брокера не упал, а брокер очевидно терпеливый.
_sk_ написал: Очень хочется увидеть ответ от разработчиков по поводу изучения данной проблемы, хотя бы после новогодних праздников. Ниже описывается пример, как большое количество таблиц может появляться в реальной программе.
Предположим, что скрипту нужно хранить в памяти для работы 3000 свечей (сколько отдаёт сервер при запросе данных по ликвидным инструментам) по 10 инструментам и 5 таймфреймам. Время свечи QLua отдаёт в виде таблицы
Код
datetime = { year = 2021 , month = 12 , day = 30 , hour = 11 , min = 0 , sec = 0 , ms = 0 , mcs = 0 , .. . }
Соответственно, сразу же имеем 3000 * 10 * 5 = 150 000 таблиц. А если скриптов несколько, то можно ещё на порядок увеличить количество таблиц в памяти.
Конечно, конкретно здесь можно закодировать дату в виде строки "2021-12-30T11:00:00.000" или вообще числом 20211230110000000 для эффективности, но придётся писать код для выделения из этого числа отдельных полей, и арифметика даты/времени станет неудобной.
В общем, просьба к разработчикам дать обратную связь, а то уже нехорошо выглядит такая техподдержка. Хоть пообещайте что-нибудь, как обычно.
_sk_,
вы видите проблему, где ее нет
function main() t = {} for i = 1,150000 do t = os.time() end while true do sleep() end end
nikolz написал: попробуйте исполнить Ваш тест вне квика и сравните время исполнения.
Предложение почти гениальное, особенно с учетом того, что обуждается проблема производительности скриптов в QUIK :: У вас нет понимания, что при встраивании Lua в QUIK его разработчиком вносятся изменения, которые способны изменить встроенного Lua?
Цитата
nikolz написал: Дело в том, что в ваш пример некорректный.0.00016 это 160 us0.0026 это 2.6 ms
Переведите все в терасекунды и вам все станет понятнее ::
Судя по Вашему нытью Вы этого не знаете. ----------------------- VMLua - никакого отношения к КВИКУ не имеет. ------------------------- Разработчики КВИКА ничего в нее не добавляют и не являются авторами VMLua. ----------------------------- Поэтому Ваши претензии не по адресу.
nikolz написал: Правильно я понял, что Вы сравниваете 0.16 ms v 0.26 ms в разных задачах?
Вы поняли неправильно. Задача одна и та же. Версии QUIK разные. Читайте:
Цитата
nikolz написал: 1) В QUIK 8.13.1.16 (QLua 5.4) T = 0,00016 ; 2) В QUIK 9.3.1.11 (QLua 5.4) T = 0,0026 ??? (в 16,25 раз дольше)
Было бы неплохо, если бы Вы писали ед изм. ---------------------- Но особой разницы в числе нулей нет. --------------------- Дело в том, что в ваш пример некорректный. 0.00016 это 160 us 0.0026 это 2.6 ms А минимальный квант времени задачи это 10 ms или 10 000 us ------------------ У вас миллион циклов Поток, исполняющий эти циклы может иметь низкий приоритет и будет прерываться системой которая будет выгружать эту задачу ----------------------- У меня к Вам вопрос. С какой погрешностью Вы измерили эти величины? или иначе какая стабильность этих показаний?
TGB написал: В ниже приведенном коде выделена строка символами ###, которая в QUIK 9.3.1.11 (QLua 5.4) выполняется в 16,25 раз дольше чем в QUIK 8.13.1.16 (QLua 5.4) Где поддержка??
Код
--- Загрузка CPU ---
IsRun = true
function main ()
local T
local hour = 0 , N
N = 1000000
-------------------
while IsRun do
T = os.clock ()
for i = 1 , N do hour = {} end
T = ( os.clock () - T) * 1000 / N ---- ### !! Без подключения к серверу: 1) В QUIK 8.13.1.16 (QLua 5.4) T = 0,00016 ;
--- 2) В QUIK 9.3.1.11 (QLua 5.4) T = 0,0026 ??? (в 16,25 раз дольше)
message (tostring(T))
sleep ( 500 )
end
------------------
end
function OnStop ()
IsRun = false
return 10000
end
Правильно я понял, что Вы сравниваете 0.16 ms v 0.26 ms в разных задачах? Но время минимального кванта для задачи 10 ms. Т е вы сравниваете величины разность которых можно объяснить затратами на выгружения одной задачи и загрузкой другой или разностью приоритетом задач или минимальным квантом времени для исполнения задачи. Иначе говоря, особенностями обслуживания данных задач операционной системой.
Коc написал: Здравствуйте. Кто может подсказать как идет поток ордеров в таблице обезличенных сделок, например одномоментно в 10:10:00 прошло 7 продаж (7 строк) 20 контрактов, 18, 15, 10 и 5. Эти 7 строк в ленте отображаются разом или каждая строчка по отдельности только очень быстро?
присылают блоком вот поэтому видите разом но с разным временем. количество в блоке зависит от интенсивности торгов. ----------------------- исследовать реальную задержку можно сравнивая время сделок с временем сервера точного времени. Попробуйте и увидите много интересного.
Daniil Pozdnyakov написал: Касательно времени в потоке Level 2. Параметр времени не транслируется, однако можно использовать функцию getInfoParam("SERVERTIME ") для получения времени сервера. Подробно об этом написано в документе QLUA.chm в разделе "Сервисные функции" в соответствующем пункте "getInfoParam".
Получая данный параметр, Вы можете сравнивать его с текущим временем на локальной машине. Таким образом, Вы сможете проверить, насколько актуальную информацию Вам прислал сервер.
Daniil Pozdnyakov, поясните, какая связь между Level 2, ТТТ и временем сервера. Заодно и nikolz почитает для общего развития.
Также поясните, чьё время указано в свечах по параметрам из ТТТ, кто и в какой момент проставляет это время?
Увы,Вы невнимательно читаете Про свечи я указал что данные приходят с опозданием до 10 секунд. т е свеча на графике появляется когда время сервера брокера, время сервера точного времени уже на 10 секунд отстоит от времени свечи, которое и есть время сервера точного времени. Рекомендую изучить алгоритм формирования свечи.
nikolz написал: предположу что проблема в поделке на C#. Поэтому задайте вопрос автору этой поделки. ---------------------------------------------- Для чистоты эксперимента сделайте экспорт Вашей таблицы по DDE без костылей на C#
Какая разница С# или что-то другое? Не все сделки передаются по DDE из таблицы "Текущие торги" Что пришло по DDE, то и записалось. А сегодня, по BR-1.22 направление сделки указано не верно (Таблица всех сделок)
разница следующая. DDE передает данные в формате EXCEL В поделке на C# реализовано преобразование этого формата и запись данных в память. Как это реализовано нигде нет ------------------ В прошлой жизни еще до по явления в КВИКЕ луа я использовал именно DDE и свой клиент-сервер для получения данных много исследовал результаты работы DDE Никаких пропусков никогда не наблюдал. -------------------- Поэтому еще раз советую сделать экспорт данных по DDE непосредственно в Excel и сравнить результаты.
Николай-77 написал: Добрый день! Нельзя ли сделать, чтоб шкала времени занимала поменьше места? Например, как в МТ5, NT8 и мн. др. терминалах? А то сейчас у Квика соотношение полезной площади окна (где собственно цена) к площади всего окна графика пожалуй самое маленькое среди большинства терминалов - это не есть хорошо. p/s Про то, что шкалу времени можно совсем отключить, я в курсе.
Можно поставить второй монитор и вынести на него окно графика.
Fasmin написал: (exception) update.luac: error reading ini file: D:\SAMP\CLEAR SBORKA SAMP\moonloader\script_update.ini: cannot open file[17:34:47.955073] (error) update.luac: D:\SAMP\CLEAR SBORKA SAMP\moonloader\update.luac:0: attempt to index global 'updateIni' (a nil value)stack traceback: D:\SAMP\CLEAR SBORKA SAMP\moonloader\update.luac: in function [17:34:47.955073] (error) update.luac: Script died due to an error. (0F3649BC)
Вам система говорит, что ошибка при чтении ini-файла: D:\SAMP\CLEAR СБОРКА SAMP\moonloader\script_update.ini: не удается открыть файл [17:34:47.955073] (ошибка) обновление.luac: D:\SAMP\CLEAR СБОРКА SAMP\moonloader\update.luac:0: попытка индексировать глобальный "файл обновления" (нулевое значение)
Старатель написал: Сделать другие значки для скриптов: 1) остановившихся в результате ошибки; 2) в которых возникла ошибка, но скрипт продолжил работу (ошибка в колбеке)
прикольно. ----------------- 3) сообщать на форуме все теплые материнские слова об авторе такого скрипта и сопровождать эти сообщения гудком паровоза.
У вас значения ms и mcs для параметров бывают отличны от нуля? Но вопрос в том, чье время там проставлено (явно не биржевое) и насколько ему можно доверять? Не может ли случиться так, что сервер пришлет старые данные, а время проставит текущее?
синхронизируйте компьютер с сервером точного времени и получите время биржи с погрешностью не более 10 ms (при соответстующих настройках винды) потом можете сравнить с временем сервера и потока сделок. ------------------------- На основе собственного опыта могу сказать, что время сервера брокера с точным временем совпадает в пределах погрешности. А вот данные по свечам обычно отстают , иногда до 10 секунд.
Nikolay написал: Но покупать алгоритм - то еще занятие.
Так в основном продают программы с возможностью менять параметры, которые пользователь и должен подобрать таким образом, чтобы выйти в плюс. Пользователь подобрал - молодец, нет - пусть подбирает дальше.
Роботы продаваемые в интернете за смешные деньги - это полный развод буратин т.е. лохотрон. -------------------------------------- Все роботы, которые Вы можете купить - это просто одноразовый лотерейный билет, но перебором коэффициентов можно занять пустую голову работой по угадыванию чисел. ---------------------------- Поэтому покупайте билеты Спортлото - меньше проиграете.
Nikolay написал: Таблицы lua - это хэш таблицы. Точнее весь lua - это операции над таблицами. Поэтому банально t[1] = что-то t[2] = что-то ....
Или
t['что-то'] = вот-это t['еще'] = другое
Можно даже в качестве индекса другую таблицу указать
tbl = {} t[tbl] = 'что-то'
Так что как сохранить - это больше вопрос как лучше сохранить в данном случае.
не совсем верно. Таблицы содержат хэш массив и индексный массив если индекс или значение - строка то эта строка преобразуется в хэш, хэш строки помещается в хэш массив, а значение хэша в индексный массив Если индекc - это число то значение хранится по индексу в массиве Поэтому, чтобы работать быстро надо использовать целые числа в качестве индекса.
Nikolay написал: Если себе, то смысла никакого. Если на заказ, то уже имеет смысл.
Ну да, типа скрыть тот ужас, который нагородили в роботе, который сливает депозит, но за деньги заказчика. Чтобы не было мучительно стыдно за такой развод. Тогда обязательно.
Иван написал: Есть какие-то рекомендации для увеличения скорости работы (быстродействия) квика? Сегодня нашел в папке квика лог в корневой директории (вес 1 ГБ+). Удалил его и квик вроде как быстрее стал работать раза в 3.
Подскажите пожалуйста рекомендации что еще можно сделать? Версия квика 7.
1) не создавайте индикаторы по параметрам таблиц. 2) установите в настройках флаги "С учетом настроек, ..." , "Только данные, отражающие текущее состояние" 3) не открывайте много окон и стаканов 4) сворачивайте ненужные окна
Вася написал: Есть класс. Нужно создать 10 его экземпляров в цикле. Как это сделать?
А зачем, если не секрет. А какая разница - класс или не класс? Напишите что хотите сделать в понятиях луа (еще лучше, если сначала научитесь программировать на луа)
предложу такое решение. --------------------- Так как при отправке компа в сон КВИК не может поддерживать соединение, то возможно два варианта решения: ---------------- 1) закрыть КВИК перед уходом спать. При просыпании запускать КВИК снова. ---------------------- 2) разорвать соединение КВИК с сервером , но не выгружать при уходе спать. При просыпании запускать КВИК не требуется, надо лишь восстановить соединение. ------------------------ При надлежащем уровне эти решения можно реализовать в виде скриптов, например, на AutoIt.
Daniil Pozdnyakov написал: Если да, то такое поведение является нормальным, так как данная таблица обновляется с определённым промежутком. .
И что? Обновление таблицы должно передаваться по DDE, а сделок просто нет....
Поясните подробно, какую таблицу Вы передаете по DDE. и нафига фам костыль на C#. ------------------------------ предположу что проблема в поделке на C#. Поэтому задайте вопрос автору этой поделки. ---------------------------------------------- Для чистоты эксперимента сделайте экспорт Вашей таблицы по DDE без костылей на C#.
предположу что у Вас произошла взаимная блокировка потоков ( скрипта и основного терминала ) Смотрите свой скрипт. Хотя скорее всего это проблема разработчиков.
Владимир написал: Anton, Так он и вылетать бы не должен, а час назад снова "неизвестное программное исключение", но на этот раз с убийством Квика и снова без малейших телодвижений с моей стороны.
Неизвестное программное исключение (0xe0434352) - это ошибка, связанная с установкой .NET . Большинство причин этой ошибки связаны с неисправностью .NET Framework , другая причина - в некоторых поврежденных файлах или старых драйверах , которые противоречат Windows . --------------------------------- Очевидно, что Неизвестное программное исключение связано с попыткой выполнить за границами кода приложения . В этом случае такое исключение не может быть опознано системой.
Александр Копяткевич написал: Здравствуйте, Sergey Denegin . Как таковой настройки на сохранение истории графиков нет. В терминале QUIK максимально отображаются 3 тысячи свечей, а хранится максимум 65 тысяч.
Уточните, пожалуйста, на втором терминале (на котором история сохранилась за 4 месяца) Вы постоянно держали график открытым? Когда график открыт он постоянно сохраняет данные при обновлении. Так же, уточните, пожалуйста, подключаются ли терминалы к одному и тому же серверу брокера или каждый к отдельному?
С какой целью разработчики Quik Сделали хранения свечей в кол-ве 65 000, если реализовали отображение только 3000 ?? Зачем разработчики просто так занимают место на HDD Клиента ?
Добрый день. В текущей реализации сервер не сохраняется более 3000 тысяч свечей, по просьбе пользователей было решено пока реализовать хранение истории локально на рабочем месте.
Тут вопрос еще немного в другом- " В терминале QUIK максимально отображаются 3 тысячи свечей". Фактически, если я правильно интерпретирую, то, что вижу - в окне по конкретной бумаге к примеру на минутном графике отображается статистика минутных свечей примерно за 2 месяца, а это ни как не 3000 минутных свечей. Все таки фраза - " В терминале QUIK максимально отображаются 3 тысячи свечей" - некорректная или устаревшая ?
в терминале отгображаются все свечи , которые хранятся на Вашем компе. При очередном подключении к серверу на комп загружается история от текущего до последнего сохраненного но не более 3000 свечей. Если Вы перезакажите данные, то на компе все сотрется и загрузится с сервера последние 3000 свечей. Если не перезаказывать, то данные накапливаются и все отображаются и используются в индикаторах.
Я и говорю: программисты вымерли. До знакомства с Квиком мне и в страшном сне не могло привидеться, что интерпретируемый код способен подвесить задачу.
Согласен, "слава богу, арка вроде не пытается ее ломать под каждое пожелание трудящихся, бо ничего кроме аццких глюков это не принесет".
В моих диалоговых задачах любой обработчик всегда сбрасывал обработанные им события, а остаток передавал следующему - никогда никаких проблем это не вызывало, даже если следующих обработчиков на момент передачи ещё не существовало. А здесь...
Цитата
Табличка как в иконку превращается, чай, очищается в колбеке? Тогда засада:
Честно говоря, не помню. Подачу заявок я точно из коллбека выбросил, но это мало помогло... да, блин, именно там и сидит, зараза! Спасибо, попробую вынести. Кстати, именно там же и точно так же я лечу по Enter глюк "пропадание текста в ячейках", именно через DestroyTable с последующим AllocTable - уже несколько месяцев работает, как часы! ::
Роман написал: Добрый день. Есть некий скрипт который циклично смотри на разные активы по инструментам раздела "TQBR" В нем есть инструменты, которые торгуются только в основную, а так же в основную и дополнительные сессии. Соответственно у меня возникает проблема посмотреть в автоматическом режиме какие-то свечи, на доп. сессиях (утром и вечером) Пример: допустим у одних будет свеча закрытия 15 минуток например 18:45 (AKRN) а у других 23:45 (GAZP), ровно тоже самое с открытием..... В таблице доступных параметров есть пункт "Допуск к дополнительной сессии" или кратко "Доп.сессия" - как взять этот параметр через GET_PARAM() или GET_PARAM_EX() чтобы скрипт различал куда иму идти за датой по основной сессии или по полной? Хочу именно по нему различать и сортировать инструменты в обработке. Спасибо.
PS: разработчик в suppot молчит.
чтобы узнать имя столбца любой таблицы quik для чтения данных из него функцией GET_PARAM(), сделайте экспорт таблицы по DDE в Excel с установленным флагом "формальные заголовки" и получите имя столбца на англ.
Сергей написал: Здравствуйте! Есть функция чтения последней свечи, которая несколько лет работала стабильно, но последнее время, раз в несколько дней выдает ошибку(хотя свечи на графике есть). Функция читает таблицу с одной последней свечой в tab2. Иногда при попытке обратиться к таблице по индексу " if (tab2[0]==nil) then " - вылетает ошибка "attempt to index a function value (local 'tab2')" Добавил проверку tab2==nil, и она в момент ошибки не срабатывает, т.е. tab2 - задана.
Код
function last_condle () -- самая последняя свеча
local tmp_max = getNumCandles (options.future .. "_price")
local tab2, n1, tmpname = getCandlesByIndex (options.future .. "_price", 0 ,tmp_max - 1 , 1 )
-- Костыль №1
if (tab2 = = nil ) then
say( " Ошибка 1748 - нет данных!!! - входим в режим ожидания данных tmp_max=" .. tmp_max)
while (tab2 = = nil ) do
sleep ( 731 )
tab2, n1, tmpname = getCandlesByIndex (options.future .. "_price", 0 ,tmp_max - 1 , 1 )
end
end
-- Костыль №2
if (tab2[ 0 ] = = nil ) then -- Тут иногда ошибка "attempt to index a function value (local 'tab2')"
say( " Ошибка 1739 - нет данных!!! - входим в режим ожидания данных tmp_max=" .. tmp_max)
while (tab2[ 0 ] = = nil ) do
sleep ( 731 )
tab2, n1, tmpname = getCandlesByIndex (options.future .. "_price", 0 ,tmp_max - 1 , 1 )
end
end
return tab2[ 0 ]
end
Если я правильно понимаю, LUA считает что tab2 - функция? Но getCandlesByIndex не должен функий выдавать. Как это вылечить?
LUA 5.4.1
У Вас ошибка при обращении к нулевому индексу в таблице. Т е обращение к такому индексу происходит первый раз. Это подобно обращению за границы таблицы. Т е не ни элемента, а индекса ноль. Но при этом сама таблица существует. ---------------------------------- Но в первом случае Вы проверяете на nil не индекс а само значение , а во втором Вы проверяете опять не индекс а существование таблицы. -------------------------- Вот Вам система и говорит что индекса 0 нет, а не значения и не таблицы. Как минимум Вам надо проверять число элементов в таблице. т е (#tab2~=0) Но так как стандартно в таблицу пишется всегда с 1, а запись нулевого элемента - это творчество разработчиков QLUA, то проверка числа элементов таблицы может быть недостаточна. --------------------- Теперь понятно?
function main() while isRun do srv_hour,srv_min,srv_sec = string.match(getInfoParam('SERVERTIME'),"(%d*):(%d*):(%d*)") srv_offset=srv_hour*3600+srv_min*60+srv_sec if(srv_offset>=base_offset)then message("go") isRun = false else message("wait") end sleep(100) end end
можно еще проще: -------------
Код
isRun = true
base_time = 0+string.gsub("22:16:30",':','');
function main()
while isRun do
srv_time = 0+string.gsub(getInfoParam('SERVERTIME'),':','')
if(srv_time>=base_time)then
message("go")
isRun = false
else
message("wait")
end
sleep(100)
end
end
Hired написал: уточню: данный скрипт на событие по времени сервера quik. скрипт зацикливается если например указать на 5-6 часов больше, если меньше 5 часов то условие срабатывает, хотя по факту время ещё не наступило может ли это как то связано с изменение формата времени в windows. сброс формата не помог, так перевод времени и часового пояса на МСК не помогло
трудно гадать без результатов. Возможно не работают сравнения. покажите сообщения( message)
Владимир написал: Не баг и не фича. И уж точно "не до этих мелочей". Чем меньше техподдержка будет реагировать на подобные темы, тем лучше. Квик и без того грузится чуть ли не дольше, чем операционка - это ещё хрен бы с ним. А то, что он отвисает в самых безобидных ситуациях, иногда даже без входа в Сеть - это как? А то, что вообще вылетает, причём молча - взглянешь на комп, а один из моих Квиков как корова языком слизнула. А на всякие "неизвестные исключения" или даже "unknown hard error" я уже и внимание перестал обращать: не вылетела - и ладно. И упаси меня, Господи, от новых версий!
Теперь второй вариант: какие-то придурки понаоткрывают себе всяких таблиц, графиков, стаканов, заведут немеряное количество разных переменных, подпишутся на все возможные колбеки, да ещё скулят при этом: "Повышенная загрузка CPU" - баг, панимаш! И фонтанируют своими идиотскими предложениями: то им не так, да это не этак. Ручонки кривые, а не баг! С какой радости техподдержка должна таких уродов ублажать?
Просто , КВИК- это добротная телега. А некоторым мерещится студебекер лили даже ероплан. Вот они на этой телеге с обрыва и прыгают. И потом долго по форуму пишется : '...Твою мать, ...Твою мать,... Твою мать"
Спасибо, еще вопрос. У меня есть мысль, чтобы когда цена какой-нибудь бумаги подходила к линии Боллинджера, то она как-то подсвечивалась или давала мне сигнал что подошла. Индикаторы вроде как все закрытые, у вас есть идея как это реализовать?
это просто реализовать и на графиках. Для этого используете две штрих-линии . Одну - выводите , когда далеко, другую -когда близко. Чтобы они отличались используете толщину и цвет.
Руслан написал: Прошу прощения за долгое отсутствие, на работе почти все заболели, в результате случился аврал.
Непонятно , зачем Вы квик посадили на выделенный сервер, если торгуете по двум индикаторам и по свечам. ---------------------- И уж совсем непонятно зачем Вы ставите эту монстр-связку с шарпом. Написали бы на луа и не мучались бы так. ------------------------------------ Если же переносите на выделенный сервер, то тогда и квик надо выкидывать. В этом смысле неплохая поделка у финам "Высокоскоростной Transaq" но делал на ней давно, когда была все сыро. Возможно сейчас все лучше. Но в любом случае это лучше чем делать на квике для робота в дата центре. Да и памяти надо в этом случае в разы меньше и работать будет на порядок быстрее. -------------------------- Но если Вы начинающий в написании роботов, то выделенный сервер вам тем более не нужен.
Руслан написал: Пользуясь случаем, что тема открыта, хочу задать еще один вопрос.
Недавно заметил, что после вечернего клиринга биржа начинает работать в разное время. То есть прямо позавчера в четверг стакан "ожил" только ровно в 19:05, а вчера уже в 19:00 все работало. Есть какая-то закономерность или расписание происходящего?
На сайте ммвб кроме этой картинки с информацией о том, что вечерняя сессия начинается в 19:00, ничего не нашел.
Обычно, если есть экспирация фьючерсов, то вечерняя сессия начинается в 19-05, иначе в 19-00.
решается проблема очень просто. Когда-то давно делал так: Берем с биржи правила формирования имени фьючерса и на основе этих правил и диапазона нужных дат формируете имена фьючерсов для конкретной акции.
Старатель написал: Демонстрационный скрипт: Скрытый текст
Код
local n = 50000
for i = 1 , n do
_G[ "f" .. i] = function () end
end
local class = "SPBFUT"
local sec = "SiZ1"
local param = {"BIDDEPTHT", "OFFERDEPTHT" }
local run = true
function OnStop ()
run = nil
end
function main ()
assert( Subscribe_Level_II_Quotes (class, sec))
for i = 1 , # param do
ParamRequest(class, sec, param[i])
end
while run do sleep ( 500 ) end
Unsubscribe_Level_II_Quotes (class, sec)
for i = 1 , # param do
CancelParamRequest(class, sec, param[i])
end
end
function OnQuote (class_code, sec_code) end
function OnParam (class_code, sec_code) end
function OnAllTrade (alltrade) end
QUIK 9.3.1.11, Lua 5.4 Открыто, как минимум одно окно: стакан ликвидного инструмента. Конечно, никто не запускает скрипты с тысячами функций, но при нескольких запущенных скриптах с десятками функций при высокой активности на бирже получаем нихилую загрузку CPU.
ЗЫ: У кого "один скрипт на все случаи жизни" с парой функций, может игнорировать эту тему. Без флуда!
Согласен, что всегда можно написать скрипт, который загрузит бессмысленными вычислениями любой супер компьютер. Но вопрос лишь в том, виноват ли в этом скрипт? ---------------------------------- Пару слов по существу проблемы (это мой опыт решения данной проблемы. При этом даже нейронная сеть на ХР c одним ядром загружает CPU не более , чем на 30%.) ------------------- 1) Снизить загрузку процессора можно простым сворачиванием окон квика. 2) Если в скрипте и его функциях используются циклы в историю данных, то это очень плохой скрипт. 3) Язык луа не предназначен для сложных вычислений (обработка больших массивов данных) поэтому используйте API C for Lua. 4) Вызов кобеков QLUA реализуйте в одном скрипте для любого количества роботов и скриптов, в которых используете данные колбеков 5) Не надо лазить постоянно в архив терминала, используйте таблицы луа для хранения получаемых с биржи и от брокера данных .
Если вы собираетесь работать менее, чем с 10 инструментами, лучше храните деньги в сберегательной кассе. На одном инструменте вы можете ждать своего "профита" годами. А можете и не дождаться никогда. А даже если и дождётесь, это ровным счётом ничего не скажет о качестве вашего алгоритма.
к слову, на одном ликвидном инструменте профит с начала года до настоящего времени 200%.
Совет начинающим (бесплатный) Возьмите один ликвидный инструмент и работайте с ним. Когда на нем получите профит, то Вам будет понятно есть ли смысл брать что-то еще. Если на ливидной бумаге не получите профит, то брать что-то еще вообще нет никакого смысла.
Полагаю , что такая программа называется "Иди туда, не знаю куда, принеси то,не знаю что" О такой проге мечтают все начинающие, так как не знают куда бежать и что тянуть.
Можно смотреть число полученных записей за фиксированный интервал времени. ----------------------------- Интервал можно взять 1 секунду, если изменений нет, то кирдык. ------------------------------- Но не представляю, что Вы будете делать , когда узнаете таким образом на 60 секунд раньше, чем средствами квика.
В качестве совета на будущее. Выкиньте коннектор QUIKSharp . В вашем распоряжении есть DDE и API C для LUA , mapping (https://habr.com/ru/post/320446/). Это самые быстрые способы передачи данных в сторонние программы роботов.