Nikolay написал: Но покупать алгоритм - то еще занятие.
Так в основном продают программы с возможностью менять параметры, которые пользователь и должен подобрать таким образом, чтобы выйти в плюс. Пользователь подобрал - молодец, нет - пусть подбирает дальше.
Ошибка запуска скомпилированного файла
Пользователь
Сообщений: Регистрация: 18.12.2017
17.12.2021 16:19:53
Можно без скачиваний обойтись: запустите данный скрипт и появится скомпилированный файл
Код
local FILE = "MyScript" -- название компилируемого файла без расширения
local PATH = "C:\\Quik-Robot\\" -- путь компилируемого файла
local STRIP = false -- если STRIP = true, то бинарное представление может не включать всю отладочную информацию о функции, для уменьшения размера
local f = io.open (PATH .. FILE .. ".luac", "wb")
f:write (string.dump (loadfile (PATH .. FILE .. ".lua"), STRIP))
f:close ()
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
Пользователь
Сообщений: Регистрация: 18.12.2017
24.10.2021 20:22:15
Цитата
Anton написал: 2) onMainInit как раз чтобы вынести бизнес-код из мейна, заодно весь мусор, созданный в процессе инициализации, попадет к коллектору сразу после нее, а не после того, как мейн закончится (т.е. никогда).
От себя добавлю: у меня очень часто в подобных конструкциях мусор к коллектору не попадал, поэтому в конце подобных функций инициализации ставил collectgarbage ().
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
Пользователь
Сообщений: Регистрация: 18.12.2017
24.10.2021 20:15:48
Цитата
Nikolay написал: Раз уж эта тема стала такой абстрактной, могу сказать, что в российском сегменте общаться конструктивно сложно - практически всегда происходит переход на личности. Впрочем, это часто происходит и в реальности. Но на всяких интернет ресурсах - это просто данность. Лично мне это малопонятная данность.
Вполне понятная данность. Это следствие отсутствия нормальной модерации.
Цитата
Nikolay написал: Для меня как раз наоборот. dofile живет в глобальном контексте, что неудобно. По сути это предкомпилированная блок кода. При этом вместо require можно использовать конструкцию типа:
Код
local lib = load(file_path)()
что, по сути, равносильно dofile, но имеет преимущества. Как минимум, можно получить код ошибки при загрузке модуля, если таковая есть. Например, переопределив dofile так
Код
function dofile (filename) local f = assert(loadfile(filename)) return f() end
От себя добавлю, если интересно: Согласен с Антоном, сам всегда использую dofile для загрузки кусков кода или модулей на луа. require также использует loadfile, но сложнее. Зачем вам все эти пути и искатели в простой задаче, когда вы знаете где и что у вас лежит?
Код
inSecList = dofile(inFileName)
inSecList = assert(loadfile(inFileName)) () -- или так, если нужно
Баги QUIK 8.13
Пользователь
Сообщений: Регистрация: 18.12.2017
13.10.2021 01:23:14
Цитата
Roffild написал: 10. isConnected() == nil возможно! Тут явно "гонка потоков". Этот баг отловить непросто. Чтоб 100% избежать бага нужно стартовать скрипты когда все загрузилось. "Окно подключения" появляется после отрисовки графиков на старых данных - вот на этом этапе нужно стартовать скрипты, но не раньше. А может причина проще: забыли переменную в isConnected() инициализировать 0 и она периодически попадает на "грязную память".
У меня много скриптов, где есть isConnected(). Ни разу подобной проблемы не было. Если вы таки сталкивались с подобным, то порекомендую условие в цикле модифицировать так или наоборот и всё:
проблема была нами проверена - она не воспроизвелась. Поэтому просьба открыть график инструмента и таблицу обезличенных сделок и после этого закрыть терминал. Потом нужно создать архив директории терминала без *txk ключей, выложить его на какой-либо файлообменный сервер и на почту прислать письмо с ссылкой для скачивания.
Дополнительная просьба, в письме укажите, пожалуйста, ссылку на данную ветвь форума.
Видимо, это только на старых версиях бывает. Смысла что-то отсылать поэтому нет, обновлюсь как-нибудь и проверю. Спасибо.
Спасибо, я ведь ту ветку когда-то читал. Они поправили это в 9-х версиях терминала?
Объем свечей (график vs ТОС)
Пользователь
Сообщений: Регистрация: 18.12.2017
07.10.2021 16:22:19
Сейчас проверил - все стало нормально, значения на свечах соответствуют ТОС. Не знаю, что это было, но у меня это дело скрипт определил, который сравнивает, а потом я руками все перепроверил. У двух брокеров, с перезаказом данных. Если ещё раз вылезет, отскриню свечю графика.
Могли бы Вы прислать скриншоты, на которых различия будут отчётливо видны. Также уточните, пожалуйста, версию Вашего терминала.
Терминалы: 8.8.0.55 и 8.7.1.3. Скриншоты чего? На графике на индикаторе объема и на самой свече значение: 3650. Через скрипт, который обрабатывает ТОС или если просто выгрузить сделки из ТОС в эксель и просуммировать: 1825.
Объем свечей (график vs ТОС)
Пользователь
Сообщений: Регистрация: 18.12.2017
06.10.2021 14:47:22
Здравствуйте. Наблюдаю расхождение значений объема последней свечи вечерней сессии полученной из графика и из ТОС. На графике в 2 раза больше, чем в ТОС. На примере RIZ1, 2021-10-05, 5 мин: график - 3650, ТОС - 1825; 1 мин: график - 996, ТОС - 498. Другие инструменты не проверял. Позавчера тоже было расхождение в 2 раза, раньше не проверял. Данные перезаказывал вместе с архивом.
Андрей написал: Сделать вторую версию ф-ции sendTransaction, которая пропускает "проверку достаточности средств на сервере", идет сразу на биржу. Таким образом отправленные 2 транзакции обработаются без проблем, если прийдут на биржу в таком же порядке. Это уже достаточный уровень функционала. В худшем случае биржа просто не обработает вторую транзакцию, Ведь ваша проверка на сервере Quik - это как пре(дварительный)фильтр. Без него ничего страшного тоже не произойдет - получим отказ от биржи в реплае.
С этим предложением, Андрей, вы погорячились. А, вообще, вам нужен прямой доступ на биржу без всякого этого, уж если вам скорость так критична.
Метки
Пользователь
Сообщений: Регистрация: 18.12.2017
21.08.2021 00:06:13
Цитата
написал: Если вы хотите установить "невидимую" метку, просто не указывайте image_path. И потом посредством setlabel делайте с ней все что необходимо.
Если image_path указан, он должен быть обработан. Либо метка нарисована, либо должна возникнуть ошибка исполнения.
Проблем у меня ни в том, ни в другом случае не возникнет. Я писал истины ради. Если IMAGE_PATH указан некорректно, то его игнорирование - не ошибка. Метка добавляется как-будто его не указывали или указали IMAGE_PATH= "". Это просто неуказанный параметр или указанный неверно (его некорректность игнорируется). Также, как если вы укажете FONT_FACE_NAME = "нет такого", то будет добавлена метка со значением по умолчанию "Arial".
Метки
Пользователь
Сообщений: Регистрация: 18.12.2017
20.08.2021 17:26:18
Я бы не стал это исправлять. Данный пример на мой взгляд работает корректно. Метка выставляется, её не видно, но она есть. Если её изменить с помощью SetLabelParams - всё нормально работает и возвращает true. У меня в скриптах есть такое: невидимые метки добавляются (Add), а затем устанавливаются/меняются (Set) - все нормально работает. Если в вышеуказанном примере вместо IMAGE_PATH="нет такого файла", написать: IMAGE_PATH="", то метка не добавится, nil вернет, так что оставьте как есть.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Пользователь
Сообщений: Регистрация: 18.12.2017
12.03.2021 22:00:33
Цитата
Владимир написал: А как "нормальные люди" задают ID транзакции? В принципе, можно бы присобачить системное время или просто нумеровать их у себя как 1, 2, 3, 4,... А "уникальность между скриптами" меня не волнует - у меня один скрипт - есть, был и будет. Точнее, две его копии на двух Квиках.
Так и используйте время, как многие делают, зачем этот огород с рандомом? При запуске скрипта задаете начальное значение, типа:
Код
local trans_id = os.time () - 1546290000 -- идентификатор транзакции (количество секунд с начала 2019 года для UTC+3)
или просто os.time (), а дальше в скрипте: trans_id = trans_id+1
Ошибка флага сделки., Новый/старый терминал. Есть разница.
написал: Да, 2-ой. И у меня 2-ой. Можно с префиксом "0x" поставить для наглядности: bit.band(trade.flags, 0x4). И bit.band в отличие от bit.test число возвращает. Почему bit.test лучше, чем bit.band - готов узнать.
Кроме быстродействия и наглядности никаких.
Какого быстродействия? Что быстрее bit.test или bit.band?
агрегировать значения из таблицы сделок по временному условию
Николай, я предполагаю, что это вы мне написали, поэтому давайте объясню:
Цитата
А вот то, что функция аггрегирования вызывается несколько раз - это не очень. Почему не произвести расчет разово, перебрав сделки в одном цикле.
Если вы про вызовы в message, то это просто для демонстрации, чтобы человеку нагляднее было. Задачи что-то несколько раз перебирать и не стояло. Ему, вообще, только для лонга нужно было и, возможно, он один раз в конце дня этот скрипт запускает. Понятно, что одно и тоже несколько раз не нужно пересчитывать. Я также надеюсь, что он догадается при частом подсчете не обсчитывать строки таблицы каждый раз от 0 по новой при поступлении новой записи в таблицу.
Цитата
Что касается направления сделки, то если это обычная таблица trades (а не обезличенные сделки), то направление это 2-ой бит флага. И проверять его лучше логически через функцию bit.test, а не сравнивать с десятичным числом.
Да, 2-ой. И у меня 2-ой. Можно с префиксом "0x" поставить для наглядности: bit.band(trade.flags, 0x4). И bit.band в отличие от bit.test число возвращает. Почему bit.test лучше, чем bit.band - готов узнать.
агрегировать значения из таблицы сделок по временному условию
Пользователь
Сообщений: Регистрация: 18.12.2017
02.03.2021 18:52:57
Чуть подкорректировал (после 12 часов это ">="):
Код
local SecCode = "RIH1"
function aggrF(direction)
local value=0 -- здесь рассчитываю кумулятивное значение из столбца объем таблицы сделок
for i = 0, getNumberOf("trades") - 1 do
local trade = getItem ("trades", i) -- получение таблицы данных из i-ой строки ТС
if bit.band(trade.flags, 4) == direction and trade.sec_code == SecCode and trade.datetime.hour >= 12 then -- сделка на продажу по конкр. инструменту
value = trade.value+value
end
end
return value
end
message ("Buy: " .. tostring (aggrF(0)))
message ("Sell: " .. tostring (aggrF(4)))
message ("Total: " .. tostring (aggrF(0)+aggrF(4)))
Данный инструмент запрещен для операции шорт
Пользователь
Сообщений: Регистрация: 18.12.2017
23.02.2021 20:38:28
Владимир, пишите/звоните своему брокеру. Разработчики тут ни при чем.
Создание авто ввода текста в Lua, Как создать скрипт который при нажатии клавиши мышки вводил бы текст автоматически.
Пользователь
Сообщений: Регистрация: 18.12.2017
07.02.2021 17:19:53
Цитата
Антон написал: Есть такая приложуха GHUB для мышек фирмы логитеч и хотелось бы привязать к клавиши как то это Там есть возможность без скрипта но тогда не будет работать клавиша как то иначе как кроме ввода значений
Антон, это форум про другую игру.
Выскакивает ворнинг "Compare string with number", А его не должно быть, по идее!
Пользователь
Сообщений: Регистрация: 18.12.2017
26.01.2021 02:38:31
Цитата
Александр Волфовиц написал: На малоликвидных инструментах OnQuote может и по 10 секунд не срабатывать - а время желательно чтоб было актуальное. Вроде бы проблема решилась с помощью локальных переменных перед проверкой, спасибо всем за советы!
Я, когда вам отвечал, торопился и поэтому что-то невнятное написал. Хорошо, что есть Антон, который все верно порекомендовал. В вашей ситуации проблема не только со строками/числами, но и со временем. Если вы хотите получать актуальное время, то делайте, как Антон написал, чтобы не было последовательных присвоений, а только разом. Очень маловероятна, но реальна ситуация, что в момент присвоения local hour, min, sec = hcc, mcc, scc вы получите час из старого определения времени в main, а минуту из нового. Подзавис основной поток в начале часа и у вас в OnQuote смещение на 59 минут.
Выскакивает ворнинг "Compare string with number", А его не должно быть, по идее!
Пользователь
Сообщений: Регистрация: 18.12.2017
24.01.2021 19:42:36
Лучше перед if объявит локальную hcc, а в конце поставить hcc = hcc или что-то типа этого. Тогда для аварийной строки в OnQuote () hcc всегда будет number.
Выскакивает ворнинг "Compare string with number", А его не должно быть, по идее!
Пользователь
Сообщений: Регистрация: 18.12.2017
24.01.2021 19:24:13
Предположение: В строке if type(hcc) == 'number' and type(mcc) == 'number' then значение глобальной hcc ещё number, а дальше при сравнении в строке "if hcc <= 10 and hcc >= 9 and mcc < 5 then" оно уже string. Попробуйте перед первым if поставить что-то типа local hcc = hcc (или как вам по коду лучше будет)
Выскакивает ворнинг "Compare string with number", А его не должно быть, по идее!
Пользователь
Сообщений: Регистрация: 18.12.2017
24.01.2021 19:12:01
Цитата
Александр Волфовиц написал: , мне нужно, чтобы в числах были отдельно часы и минуты.
, первый фрагмент кода находится в main(), второй - в OnQuote() , ворнинг возникает в рабочее время биржи.
А сама аварийная строка "if hcc <= 10 and hcc >= 9 and mcc < 5 then" где находится?
Как понять, что скрипт загружен через require?
Пользователь
Сообщений: Регистрация: 18.12.2017
18.01.2021 19:39:36
Цитата
Незнайка написал: В Lua 5.1 можно было заглянуть в package.loaded[modname]. Если там userdata, то скрипт загружен через require, иначе - запущен сам. А теперь как?
Незнайка, вы в скрипте, который может запускать рассматриваемый модуль, поставьте флаг и проверяйте его в модуле. Если модуль флаг не видит, значит он сам запущен, а если видит, то снаружи.
Утечка памяти, Происходит утечка памяти
Пользователь
Сообщений: Регистрация: 18.12.2017
06.01.2021 19:49:30
Цитата
Виталий написал: Вопрос к знающим и к поддержке: почему происходит утечка памяти? Версия Quik 8.10.1.1
Для информации: Проверил первый скрипт у себя на 8.7 и 8.8 - всё в порядке. Растет незначительными темпами, а затем сбрасывается. Если вставить collectgarbage ("step"), то совсем незначительные колебания (отклонение в 10% от 40КБ до 44КБ), а если collectgarbage () - не изменяется вообще.
Отладка QUIK 8.11
Пользователь
Сообщений: Регистрация: 18.12.2017
16.12.2020 15:52:00
Цитата
Максим написал: Добрый день! Столкнулся с проблемой: на lua 5.3 пользовался такой конструкцией в модулях: module(..., package.seeall) на lua 5.4.1 - убрали module и package.seeall как проще выйти из ситуации?
module(..., package.seeall) - это старый способ. .
Неприятность таблицы "Клиентский портфель", Вопрос "совсем новичка":
Пользователь
Сообщений: Регистрация: 18.12.2017
16.12.2020 15:03:22
Цитата
Павел написал: Так я получу количество лот газпрома в портфеле?
Вы поменьше выкладывайте персональных данных. По поводу выведется что-то или нет проверяйте на практике самостоятельно, вопросов у вас и без мелочей ещё ворох останется. В "Интерпретаторе языка Lua" описаны функции, таблицы и пр. - пользуйтесь, и поиском по форуму тоже, здесь уже многие вещи обмусолены.
Неприятность таблицы "Клиентский портфель", Вопрос "совсем новичка":
Пользователь
Сообщений: Регистрация: 18.12.2017
12.12.2020 15:07:54
Цитата
Павел написал: Коллеги, прошу подскажите, что я не так делаю? Не возвращает прочитанные количества лотов:
-- функция возвращает количество лотов в клиентском портфеле по заданному инструменту function get_lots(arg_Sec_Code) local lots = 0 for i = 0, getNumberOf("FUTURES_CLIENT_HOLDING") - 1 do if getItem("FUTURES_CLIENT_HOLDING",i).sec_code == arg_Sec_Code then lots = getItem("FUTURES_CLIENT_HOLDING",i).totalnet end end return lots end
Буквы высокие.
Код
local function get_lots (arg_Sec_Code)
for i = 0, getNumberOf ("FUTURES_CLIENT_HOLDING") - 1 do
local fch = getItem ("futures_client_holding", i)
if fch and fch.sec_code == arg_Sec_Code then
return fch.totalnet -- or 0
end
end
return 0
end
FAQ: Оптимизация производительности клиентского места QUIK, Обсуждение
Пользователь
Сообщений: Регистрация: 18.12.2017
27.11.2020 15:24:24
Цитата
Александр Кашников написал: Склейка инструментов на срочке - подтверждаю - это бред, который никому не нужен. Свечки это совсем не актуальная информация, их перерисовывают при каждом клиринге - скрывают сделки крупных ММ. А тут еще вы со своей склейкой и главное выбора никакого нет , а я не просил склейку и никто не просил, даже Вася не просил, я у него спрашивал.
Склейка по умолчанию стоит включенной (было бы правильнее сделать её выключенной по умолчанию), но она отключается. Я при замене инструмента с истекающем сроком обращения отключаю склейку вручную.
написал: Я хочу привести данную таблицу к состоянию, которое изображено на первом скрине этой темы. Да, вы правильно понимаете: ячейки цены должны быть выделены жирным и быть такого же цвета, что и остальные ячейки соответствующей строки. Раньше все было как и должно быть (этот первый скрин был сделан специально в 7-й версии предварительно перед обновлением на 8-ю, так как на другом терминале при обновлении я заметил это нововведение). Сейчас же ячейки цены выделяются серым цветом.
Как можем видеть на Вашем скриншоте, для параметра "Цена" у Вас установлено форматирование - стоит галочка для "Форматирование включено" в левом верхнем углу. Отключите форматирование, сняв галочку с этой опции.
Хорошая шутка! Еще можно посоветовать выключить Квик и компьютер. Евгений, вы спрашивали: "Уточните, пожалуйста, к какому состоянию Вы хотите привести данную таблицу?" Я ответил, что хочу привести данную таблицу к состоянию, которое изображено на первом скрине этой темы". Думал, что ответил понятно, но попробую объяснить еще раз: Я сам включил это форматирование, а не оно само как-то включилось. Включил я его для того, чтобы значение цены всегда выделялось жирным шрифтом. Одновременно с этим надо, чтобы строки таблицы форматировались целиком по цвету, включая ячейки со значениями цены. Это работало. Раньше. Что я и продемонстрировал в первом скрине. Вы можете сделать также, как у меня на первом скрине, какими-то пользовательскими настройками или это баг?
FAQ: Оптимизация производительности клиентского места QUIK, Обсуждение
Пользователь
Сообщений: Регистрация: 18.12.2017
25.11.2020 14:52:36
Цитата
Roman Azarov написал: , добрый день! если в терминале используется таблица обезличенных сделок, экспорт тиков во внешние системы или же построение тикового графика, то с сервера QUIK будут заказаны все сделки по всем инструментам, на получение информации по которым у терминала (пользователя) есть права независимо от того, какие фильтры настроены в таблице обезличенных сделок или по какому конкретному инструменту открыт тиковый график.
Как-то это нерационально. Зачем получать то, что не нужно? У МБ 80-90% мало кому интересный неликвид. Зачем его транслировать, если человек работает только с RI и Si? Где в такой логике минимизация трафика и улучшение производительности?
Форматирование таблицы сделок
Пользователь
Сообщений: Регистрация: 18.12.2017
25.11.2020 14:40:05
Цитата
Evgeniy Karnaukhov написал: , уточните, пожалуйста, к какому состоянию Вы хотите привести данную таблицу? Правильно понимаем, что Вы хотите, чтобы ячейки Цены НЕ подсвечивались отдельным синим цветом? Если так, то нужно проверить именно настройки форматирования по Цене. Пришлите, пожалуйста, скриншот окна форматирования по параметру "Цена".
Я хочу привести данную таблицу к состоянию, которое изображено на первом скрине этой темы. Да, вы правильно понимаете: ячейки цены должны быть выделены жирным и быть такого же цвета, что и остальные ячейки соответствующей строки. Раньше все было как и должно быть (этот первый скрин был сделан специально в 7-й версии предварительно перед обновлением на 8-ю, так как на другом терминале при обновлении я заметил это нововведение). Сейчас же ячейки цены выделяются серым цветом. пс. Сделайте ограничение по размеру для уменьшения картинки, чтобы скрины меньше определенного размера уже не уменьшались (87 КБ уменьшает до 29, а потом не ясно, что изображено)
Вероятно, нужно проверить форматирование таблицы сделок по Цене. Для этого правой кнопкой мыши щелкните по столбцу "Цена" и выберите "Форматирование "Цена"". В открывшемся окне должны быть заданы условия и цветовые настройки. Вы можете их как изменить, так и вовсе убрать, нажав на значок крестика справа от условий или сняв галочку с "Форматирование включено" в левом верхнем углу окна (так форматирование не удаляется, а просто отключается).
Евгений, так не получается что-то, потыкал я как раньше, но так, чтобы выделялся жирным столбец и при этом менялись по цветам строки без появления серого фона, не выходит. Может у вас получится? Спасибо.
Форматирование таблицы сделок
Пользователь
Сообщений: Регистрация: 18.12.2017
23.11.2020 15:48:52
Здравствуйте! До смены версии Квика у меня было так:
Теперь получилось так:
Как-то можно сделать как раньше? Спасибо. пс. Качество плохое, так как у вас обрезает. Вставляется ли нормально?
Неверная дата и время, Стандартные функции Lua возвращают неверное время сервера
Пользователь
Сообщений: Регистрация: 18.12.2017
29.10.2020 14:27:58
Цитата
MrLex написал: Подскажите как получить текущие дату/время сервера в формате "20201023_2345"?
Если секунды не нужны - закомментируйте их
Код
local function serverTime () -- функция расчета времени сервера
local ser_time = getInfoParam ("SERVERTIME")
if ser_time and #ser_time == 8 then
return string.sub (ser_time, 1, 2) .. string.sub (ser_time, 4, 5) .. string.sub (ser_time, 7, 8)
else
return false
end
end
local function serverDate () -- функция расчета даты сервера
local ser_date = getInfoParam ("TRADEDATE")
return string.sub (ser_date, 7, 10) .. string.sub (ser_date, 4, 5) .. string.sub (ser_date, 1, 2)
end
message (tostring (serverDate ()) .. "_" .. tostring (serverTime ()))
Таблица "Доступные скрипты", lua-скрипты и их эксплуатация. За что пользователи не любят QUIK
Пользователь
Сообщений: Регистрация: 18.12.2017
25.10.2020 04:12:34
Поддерживаю, уже писали похожие пожелания. Хотя бы пункты 4, 5, 6 для начала. Слишком много бесполезной площади. Остальные пункты тоже дельные.
Как убрать нуль после точки?, .0
Пользователь
Сообщений: Регистрация: 18.12.2017
13.10.2020 00:30:48
Цитата
Алексей написал: Допустим получаю значение цены через OnAllTrade. Далее пишу это значение в файл или таблицу - получается 77934.0 Как сделать, что бы была обычная запись 77934, без .0 ? Только недавно перешел с 32б QUIK, в 64b. В старом такого не было.
Кажется, это уже было:
Выделять объём на тиковом графике цветом в зависимости от направления сделки
Пользователь
Сообщений: Регистрация: 18.12.2017
28.07.2020 02:01:58
Цитата
Старатель написал: Сравнение в скорости линейного поиска с SearchItems:
Цитата
Искомый элемент в начале таблицы: linSearch: 0.660 SearchItems: 0.495
Цитата
Искомый элемент в конце таблицы: linSearch: 18.437 SearchItems: 4.919
Да, у меня такие же пропорции по результатам. То, что линейный быстрее SearchItems, я писал для случая вызова SearchItems без параметров, а с параметром он быстрее, да. И сжирается всё вызовом getItem. Арковцы писали, что в 8-й версии была исправлена "Медленная работа функции getItem в QLUA", я сравнил, но что-то разницы с 7-й не заметил.
Выделять объём на тиковом графике цветом в зависимости от направления сделки
Пользователь
Сообщений: Регистрация: 18.12.2017
27.07.2020 19:00:00
Согласен со всеми. Про спот я, вообще, забыл . Тогда, действительно, лучше строить копии ТОС отдельно по каждому инструменту.
Выделять объём на тиковом графике цветом в зависимости от направления сделки
Пользователь
Сообщений: Регистрация: 18.12.2017
25.07.2020 18:57:19
Цитата
Старатель написал: не лазить в таблицу "all_trades" в поисках нужной сделки - очень сильно затормаживает расчёт: сам только вызов SearchItems увеличивает время расчёта в 10 и более раз.
Старатель, здравствуйте. Увидел это ваше сообщение по поводу использования SearchItems в ТОС, а так как я раньше об этой функции не знал (как-то ускользнула от моего внимания, другие использовал), то решил её проверить и написать, что получил. Может кому-то ещё эта инфа пригодится. Сравнил её только с двумя методами поиска: линейным и бинарным. Если искать по идентификатору сделки порядковый номер в таблице, то даже линейный поиск быстрее на 30%. Бинарный быстрее в 7000 раз. Если вызывать SearchItems с параметром "trade_num", то он быстрее вызова без параметра в 10 раз (в 700 раз медленнее, чем бинарный). Не понял я замысла сей функции и области её применения. Может что-то ускользнуло от моего внимания, какой-то смысл в неё заложенный, поэтому вы у себя проверьте, вот функции, которыми проверял:
Код
local function linSearch (t, id, num_1, num_2) -- функция линейного поиска
while num_1 <= num_2 do
local t_trade_num = getItem (t, num_1).trade_num -- номер сделки в таблице
if id == t_trade_num then -- сравнение идентификационных номеров
return num_1
else
num_1 = num_1 + 1
end
end
end
local function binSearch (t, id, num_1, num_2) -- функция бинарного поиска
while num_1 <= num_2 do
local middle = num_1 + math.floor ((num_2 - num_1) * 0.5) -- середина диапазона
local t_trade_num = getItem (t, middle).trade_num -- номер сделки в таблице
if id < t_trade_num then -- сравнение идентификационных номеров
num_2 = middle
elseif id > t_trade_num then
num_1 = middle
else
return middle
end
end
end
local res = linSearch ("all_trades", 26139171939000, 0, getNumberOf ("all_trades") - 1) -- вызов
Функция SetLabelParams. Зачем она нужна?
Пользователь
Сообщений: Регистрация: 18.12.2017
28.09.2019 00:44:02
Цитата
Imersio Arrigo написал: Вероятно обновить значение в метке тупо быстрее чем удалить-создать. Просто заметно это когда их много.
По скорости разницы нет, проверял. Думается, что функция SetLabelParams это DelLabel + AddLabel.
Функция SetLabelParams. Зачем она нужна?
Пользователь
Сообщений: Регистрация: 18.12.2017
26.09.2019 13:50:09
Всем привет! Задался вопросом: Зачем нужна функция SetLabelParams? Для вывода обновляемой метки пользовался кодом, типа:
Код
local label = {}
label.TEXT = difference
......
label.FONT_HEIGHT = 10
DelLabel (CHART_TAG_PRICE_1, result)
result = AddLabel (CHART_TAG_PRICE_1, label)
По скорости сравнивал - нет разницы. В чем смысл SetLabelParams? Есть какие-то нюансы?
Строки вместо чисел в таблицах Quik 7.27.2.1
Пользователь
Сообщений: Регистрация: 18.12.2017
27.06.2019 18:47:09
Здравствуйте, Андрей. Да, я знаю и пользуюсь выводом DDE и ещё у меня скрипт написан на вывод определенной информации в файл, так что с возможностями вывода я знаком. Мне хотелось бы, чтобы те вещи, которые в программе были изначально и очень давно сделаны нормально и удобно, не переделывались в угоду непонятно кому. Вот кому вдруг понадобился вывод объемов, цен, маржи и пр. в строковом формате при копировании правой кнопкой? Такие вещи для любителей лишних движений нужно делать опционально. А многие люди, вообще, не врубаются в эти выводы всякие разные, а просто копируют таблицу ctrl+C и вставляют в Excel. Таких людей много, о них не нужно забывать. Регистрировать ли пожелание на восстановление функционала? Зачем его регистрировать, его просто восстановить нужно. Кому он мешал и чем руководствовались люди, которые его ломали? Вы почаще спрашивайте практикующих трейдеров что им нужно, что менять, а что нет. Мне пришлось вернуться к старой версии из старой сохранённой перед обновлением папки (да, опыт сын ошибок трудных, научили). Чего ради такие "улучшения"? Появляется одна нормальная вещь: увеличение количества условий в пользовательском фильтре и одновременно - на, получай косячину в довесок. По поводу приоритета копирования ячейки сочетанием ctrl+C, а не всей таблицы - тоже вопрос. Неужели люди чаще ячейками копируют? Пользователи много лет при копировании таблицы целиком нажимали ctrl+C, а теперь, вводя возможность копирования ячейки, вы перекидываете комбинацию клавиш, которая уже у всех на автомате наработана, на другой функционал. Новый функционал нужно вешать на новые комбинации клавиш, старый оставлять на старых.
Строки вместо чисел в таблицах Quik 7.27.2.1
Пользователь
Сообщений: Регистрация: 18.12.2017
26.06.2019 19:38:16
Обновил Квик до указанной версии. Копирую содержание таблиц (сделки, клиентский портфель, таблица ограничений по клиентским счетам) в Excel и вижу, что что-то имеет строковый формат, а что-то числовой (например: "Премия по опционам" - строка, а следующий столбец "Биржевые сборы" - число). Нельзя ли этот ужас исправить и сделать как было раньше на старых версиях (в числах). Зачем такое было сделано? Или если существуют какие-то люди, которым такое понадобилось, то сделайте опцию: вывод строк. Всё было просто и удобно: взял и скопировал без всяких бубнов. По уму и Ctrl + C в таблице на ячейку тоже на выбор опционально лучше сделать, приоритет на ячейку вместо таблицы целиком непонятен, я, например, ячейки по отдельности не копирую.